brasero r972 - in trunk: . src src/plugins/growisofs



Author: philippr
Date: Fri Jul 11 12:51:55 2008
New Revision: 972
URL: http://svn.gnome.org/viewvc/brasero?rev=972&view=rev

Log:
	Fix #529418 â Speed is not displayed

	* src/burn-job.c (brasero_job_set_progress):
	* src/burn-task-ctx.c (brasero_task_ctx_reset),
	(brasero_task_ctx_set_next_track),
	(brasero_task_ctx_start_progress),
	(brasero_task_ctx_set_written_track),
	(brasero_task_ctx_set_progress), (brasero_task_ctx_get_rate),
	(brasero_task_ctx_stop_progress):
	* src/plugins/growisofs/burn-growisofs.c
	(brasero_growisofs_read_stderr):

Modified:
   trunk/ChangeLog
   trunk/src/burn-job.c
   trunk/src/burn-task-ctx.c
   trunk/src/plugins/growisofs/burn-growisofs.c

Modified: trunk/src/burn-job.c
==============================================================================
--- trunk/src/burn-job.c	(original)
+++ trunk/src/burn-job.c	Fri Jul 11 12:51:55 2008
@@ -1663,8 +1663,10 @@
 	if (priv->next)
 		return BRASERO_BURN_ERR;
 
-	if (progress < 0.0 || progress > 1.0)
+	if (progress < 0.0 || progress > 1.0) {
+		BRASERO_JOB_LOG (self, "Tried to set an insane progress value (%lf)", progress);
 		return BRASERO_BURN_ERR;
+	}
 
 	return brasero_task_ctx_set_progress (priv->ctx, progress);
 }

Modified: trunk/src/burn-task-ctx.c
==============================================================================
--- trunk/src/burn-task-ctx.c	(original)
+++ trunk/src/burn-task-ctx.c	Fri Jul 11 12:51:55 2008
@@ -60,13 +60,15 @@
 	/* keep track of time */
 	GTimer *timer;
 	gint64 first_written;
+	gdouble first_progress;
 
 	/* used for immediate rate */
-	gint64 current_written;
 	gdouble current_elapsed;
-	gint64 last_written;
 	gdouble last_elapsed;
 
+	gint64 last_written;
+	gdouble last_progress;
+
 	/* used for remaining time */
 	GSList *times;
 	gdouble total_time;
@@ -167,10 +169,11 @@
 	priv->track_bytes = -1;
 	priv->session_bytes = -1;
 	priv->written_changed = 0;
-	priv->current_written = 0;
+
 	priv->current_elapsed = 0;
 	priv->last_written = 0;
 	priv->last_elapsed = 0;
+	priv->last_progress = 0;
 
 	if (priv->times) {
 		g_slist_free (priv->times);
@@ -299,6 +302,7 @@
 
 	priv->session_bytes += priv->track_bytes;
 	priv->track_bytes = 0;
+	priv->last_written = 0;
 
 	if (priv->current_track)
 		brasero_track_unref (priv->current_track);
@@ -413,10 +417,12 @@
 	if (!priv->timer) {
 		priv->timer = g_timer_new ();
 		priv->first_written = priv->session_bytes + priv->track_bytes;
+		priv->first_progress = priv->progress;
 	}
 	else if (force) {
 		g_timer_start (priv->timer);
 		priv->first_written = priv->session_bytes + priv->track_bytes;
+		priv->first_progress = priv->progress;
 	}
 
 	return BRASERO_BURN_OK;
@@ -563,22 +569,23 @@
 
 	priv = BRASERO_TASK_CTX_PRIVATE (self);
 
-	priv->track_bytes = written;
 	priv->written_changed = 1;
 
-	if (priv->use_average_rate)
+	if (priv->use_average_rate) {
+		priv->track_bytes = written;
 		return BRASERO_BURN_OK;
+	}
 
 	if (priv->timer)
 		elapsed = g_timer_elapsed (priv->timer, NULL);
 
 	if ((elapsed - priv->last_elapsed) > 0.5) {
-		priv->last_written = priv->current_written;
+		priv->last_written = priv->track_bytes;
 		priv->last_elapsed = priv->current_elapsed;
-		priv->current_written = written;
 		priv->current_elapsed = elapsed;
 	}
 
+	priv->track_bytes = written;
 	return BRASERO_BURN_OK;
 }
 
@@ -601,14 +608,36 @@
 			       gdouble progress)
 {
 	BraseroTaskCtxPrivate *priv;
+	gdouble elapsed;
 
 	g_return_val_if_fail (BRASERO_IS_TASK_CTX (self), BRASERO_BURN_ERR);
 
 	priv = BRASERO_TASK_CTX_PRIVATE (self);
 
 	priv->progress_changed = 1;
-	priv->progress = progress;
 
+	if (priv->use_average_rate) {
+		priv->progress = progress;
+		return BRASERO_BURN_OK;
+	}
+
+	/* here we prefer to use track written bytes instead of progress.
+	 * NOTE: usually plugins will return only one information. */
+	if (priv->last_written) {
+		priv->progress = progress;
+		return BRASERO_BURN_OK;
+	}
+
+	if (priv->timer)
+		elapsed = g_timer_elapsed (priv->timer, NULL);
+
+	if ((elapsed - priv->last_elapsed) > 0.5) {
+		priv->last_progress = priv->progress;
+		priv->last_elapsed = priv->current_elapsed;
+		priv->current_elapsed = elapsed;
+	}
+
+	priv->progress = progress;
 	return BRASERO_BURN_OK;
 }
 
@@ -678,7 +707,7 @@
 	if (priv->current_action != BRASERO_BURN_ACTION_RECORDING
 	&&  priv->current_action != BRASERO_BURN_ACTION_DRIVE_COPY) {
 		*rate = -1;
-		return BRASERO_BURN_OK;
+		return BRASERO_BURN_NOT_SUPPORTED;
 	}
 
 	if (priv->rate) {
@@ -689,18 +718,30 @@
 	if (priv->use_average_rate) {
 		gdouble elapsed;
 
-		if ((priv->session_bytes + priv->track_bytes) <= 0 || !priv->timer)
+		if (!priv->timer)
 			return BRASERO_BURN_NOT_READY;
 
 		elapsed = g_timer_elapsed (priv->timer, NULL);
-		*rate = (gdouble) ((priv->session_bytes + priv->track_bytes) - priv->first_written) / elapsed;
+
+		if ((priv->session_bytes + priv->track_bytes) > 0)
+			*rate = (gdouble) ((priv->session_bytes + priv->track_bytes) - priv->first_written) / elapsed;
+		else if (priv->progress > 0.0)
+			*rate = (gdouble) (priv->progress - priv->first_progress) * priv->size / elapsed;
+		else
+			return BRASERO_BURN_NOT_READY;
 	}
 	else {
-		if (!priv->last_written)
+		if (priv->last_written > 0) {			
+			*rate = (gdouble) (priv->track_bytes - priv->last_written) /
+				(gdouble) (priv->current_elapsed - priv->last_elapsed);
+		}
+		else if (priv->last_progress > 0.0) {
+			*rate = (gdouble)  priv->size *
+				(gdouble) (priv->progress - priv->last_progress) /
+				(gdouble) (priv->current_elapsed - priv->last_elapsed);
+		}
+		else
 			return BRASERO_BURN_NOT_READY;
-			
-		*rate = (gdouble) (priv->current_written - priv->last_written) /
-			(gdouble) (priv->current_elapsed - priv->last_elapsed);
 	}
 
 	return BRASERO_BURN_OK;
@@ -891,6 +932,7 @@
 		priv->timer = NULL;
 	}
 	priv->first_written = 0;
+	priv->first_progress = 0.0;
 
 	g_mutex_lock (priv->lock);
 

Modified: trunk/src/plugins/growisofs/burn-growisofs.c
==============================================================================
--- trunk/src/plugins/growisofs/burn-growisofs.c	(original)
+++ trunk/src/plugins/growisofs/burn-growisofs.c	Fri Jul 11 12:51:55 2008
@@ -107,12 +107,12 @@
 {
 	int perc_1, perc_2;
 
-	if (sscanf (line, " %2d.%1d%% done, estimate finish", &perc_1, &perc_2) == 2) {
+	if (sscanf (line, " %2d.%2d%% done, estimate finish", &perc_1, &perc_2) == 2) {
 		gdouble fraction;
 		BraseroBurnAction action;
 
 		fraction = (gdouble) ((gdouble) perc_1 +
-			   ((gdouble) perc_2 / (gdouble) 10.0)) /
+			   ((gdouble) perc_2 / (gdouble) 100.0)) /
 			   (gdouble) 100.0;
 
 		brasero_job_set_progress (BRASERO_JOB (process), fraction);
@@ -120,8 +120,10 @@
 		brasero_job_get_current_action (BRASERO_JOB (process), &action);
 		if (action == BRASERO_BURN_ACTION_BLANKING
 		&&  fraction >= 0.01) {
-			/* we nullified 1% (more than 65536) that's enough. A 
-			 * signal SIGTERM will be sent. */
+			/* we nullified 1% of the medium (more than 65536)
+			 * that's enough to make the filesystem unusable and
+			 * looking blank. A signal SIGTERM will be sent to stop
+			 * us. */
 			brasero_job_finished_session (BRASERO_JOB (process));
 			return BRASERO_BURN_OK;
 		}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]