brasero r1144 - in trunk: . src



Author: philippr
Date: Fri Aug 22 19:00:16 2008
New Revision: 1144
URL: http://svn.gnome.org/viewvc/brasero?rev=1144&view=rev

Log:
	Fix #548556 â Nagging about checking newly burned CDs

	* src/brasero-burn-dialog.c (brasero_burn_dialog_insert_disc_cb),
	(brasero_burn_dialog_loss_warnings_cb),
	(brasero_burn_dialog_disable_joliet_cb),
	(brasero_burn_dialog_progress_changed_real),
	(brasero_burn_dialog_progress_changed_cb),
	(brasero_burn_dialog_action_changed_cb),
	(brasero_burn_dialog_dummy_success_cb),
	(brasero_burn_dialog_finalize),
	(brasero_burn_dialog_setup_session),
	(brasero_burn_dialog_notify_success),
	(brasero_burn_dialog_end_session):
	* src/brasero-progress.c
	(brasero_burn_progress_display_session_info):
	* src/brasero-progress.h:
	* src/burn.c (brasero_burn_status):

Modified:
   trunk/ChangeLog
   trunk/src/brasero-burn-dialog.c
   trunk/src/brasero-progress.c
   trunk/src/brasero-progress.h
   trunk/src/burn.c

Modified: trunk/src/brasero-burn-dialog.c
==============================================================================
--- trunk/src/brasero-burn-dialog.c	(original)
+++ trunk/src/brasero-burn-dialog.c	Fri Aug 22 19:00:16 2008
@@ -54,6 +54,7 @@
 #include "brasero-jacket-edit.h"
 
 #include "burn-basics.h"
+#include "burn-debug.h"
 #include "burn-session.h"
 #include "burn-medium.h"
 #include "brasero-drive-selection.h"
@@ -92,7 +93,13 @@
 	GtkWidget *image;
 	BraseroTrayIcon *tray;
 
+	/* for our final statistics */
+	GTimer *total_time;
+	gint64 total_size;
+	GSList *rates;
+
 	guint is_writing:1;
+	guint is_creating_image:1;
 };
 
 #define TIMEOUT	10000
@@ -487,6 +494,8 @@
 		hide = TRUE;
 	}
 
+	g_timer_stop (dialog->priv->total_time);
+
 	if (drive)
 		drive_name = brasero_drive_get_display_name (drive);
 	else
@@ -621,6 +630,8 @@
 	if (hide)
 		gtk_widget_hide (GTK_WIDGET (dialog));
 
+	g_timer_start (dialog->priv->total_time);
+
 	if (result != GTK_RESPONSE_OK)
 		return BRASERO_BURN_CANCEL;
 
@@ -646,6 +657,8 @@
 		hide = TRUE;
 	}
 
+	g_timer_stop (BRASERO_BURN_DIALOG (dialog)->priv->total_time);
+
 	window = GTK_WINDOW (dialog);
 	message = gtk_message_dialog_new (window,
 					  GTK_DIALOG_DESTROY_WITH_PARENT|
@@ -685,6 +698,8 @@
 	if (hide)
 		gtk_widget_hide (GTK_WIDGET (dialog));
 
+	g_timer_start (BRASERO_BURN_DIALOG (dialog)->priv->total_time);
+
 	if (result == GTK_RESPONSE_ACCEPT)
 		return BRASERO_BURN_NEED_RELOAD;
 
@@ -757,6 +772,8 @@
 		hide = TRUE;
 	}
 
+	g_timer_stop (BRASERO_BURN_DIALOG (dialog)->priv->total_time);
+
 	window = GTK_WINDOW (dialog);
 	message = gtk_message_dialog_new (window,
 					  GTK_DIALOG_DESTROY_WITH_PARENT|
@@ -787,6 +804,8 @@
 	if (hide)
 		gtk_widget_hide (GTK_WIDGET (dialog));
 
+	g_timer_start (BRASERO_BURN_DIALOG (dialog)->priv->total_time);
+
 	if (result != GTK_RESPONSE_OK)
 		return BRASERO_BURN_CANCEL;
 
@@ -905,6 +924,10 @@
 	brasero_tray_icon_set_progress (BRASERO_TRAYICON (dialog->priv->tray),
 					task_progress,
 					remaining);
+
+	if (rate > 0 && dialog->priv->is_writing)
+		dialog->priv->rates = g_slist_prepend (dialog->priv->rates,
+						       GINT_TO_POINTER ((gint) rate));
 }
 
 static void
@@ -933,6 +956,8 @@
 						   task_progress,
 						   remaining,
 						   media);
+	if ((dialog->priv->is_writing || dialog->priv->is_creating_image) && isosize > 0)
+		dialog->priv->total_size = isosize;
 }
 
 static void
@@ -972,6 +997,7 @@
 						 media);
 	}
 
+	dialog->priv->is_creating_image = (action == BRASERO_BURN_ACTION_CREATING_IMAGE);
 	dialog->priv->is_writing = is_writing;
 
 	brasero_burn_get_action_string (dialog->priv->burn, action, &string);
@@ -995,8 +1021,16 @@
 	GtkWidget *message;
 	GtkWindow *window;
 	GtkWidget *button;
+	gboolean hide;
 	gint id;
 
+	if (!GTK_WIDGET_VISIBLE (dialog)) {
+		gtk_widget_show (GTK_WIDGET (dialog));
+		hide = TRUE;
+	}
+
+	g_timer_stop (dialog->priv->total_time);
+
 	window = GTK_WINDOW (dialog);
 	message = gtk_message_dialog_new (window,
 					  GTK_DIALOG_DESTROY_WITH_PARENT|
@@ -1024,6 +1058,11 @@
 	answer = gtk_dialog_run (GTK_DIALOG (message));
 	gtk_widget_destroy (message);
 
+	if (hide)
+		gtk_widget_hide (GTK_WIDGET (dialog));
+
+	g_timer_start (dialog->priv->total_time);
+
 	if (answer == GTK_RESPONSE_OK) {
 		if (id)
 			g_source_remove (id);
@@ -1145,6 +1184,16 @@
 		cobj->priv->session = NULL;
 	}
 
+	if (cobj->priv->total_time) {
+		g_timer_destroy (cobj->priv->total_time);
+		cobj->priv->total_time = NULL;
+	}
+
+	if (cobj->priv->rates) {
+		g_slist_free (cobj->priv->rates);
+		cobj->priv->rates = NULL;
+	}
+
 	g_free (cobj->priv);
 	G_OBJECT_CLASS (parent_class)->finalize (object);
 }
@@ -1283,6 +1332,13 @@
 
 	brasero_tray_icon_set_action (BRASERO_TRAYICON (dialog->priv->tray),
 				      BRASERO_BURN_ACTION_NONE);
+
+	if (dialog->priv->total_time)
+		g_timer_destroy (dialog->priv->total_time);
+
+	dialog->priv->total_time = g_timer_new ();
+	g_timer_start (dialog->priv->total_time);
+
 	return BRASERO_BURN_OK;
 }
 
@@ -1583,6 +1639,8 @@
 static void
 brasero_burn_dialog_notify_success (BraseroBurnDialog *dialog)
 {
+	gint64 rate;
+	GSList *iter;
 	BraseroMedia media;
 	BraseroDrive *drive;
 	gchar *primary = NULL;
@@ -1633,6 +1691,25 @@
 
 	brasero_burn_dialog_activity_stop (dialog, primary);
 
+	/* show total required time and average speed */
+	rate = 0;
+	if (dialog->priv->rates) {
+		int num = 0;
+
+		for (iter = dialog->priv->rates; iter; iter = iter->data) {
+			rate += GPOINTER_TO_INT (iter->data);
+			num ++;
+		}
+		rate /= num;
+	}
+
+	brasero_burn_progress_display_session_info (BRASERO_BURN_PROGRESS (dialog->priv->progress),
+						    g_timer_elapsed (dialog->priv->total_time, NULL),
+						    rate,
+						    (media & BRASERO_MEDIUM_DVD),
+						    dialog->priv->total_size);
+
+
 	if (brasero_burn_session_get_input_type (dialog->priv->session, NULL) == BRASERO_TRACK_TYPE_AUDIO) {
 		GtkWidget *button;
 
@@ -1717,10 +1794,8 @@
 				 BraseroBurnResult result,
 				 GError *error)
 {
-	if (dialog->priv->burn) {
-		g_object_unref (dialog->priv->burn);
-		dialog->priv->burn = NULL;
-	}
+	if (dialog->priv->total_time)
+		g_timer_stop (dialog->priv->total_time);
 
 	brasero_burn_session_stop (dialog->priv->session);
 
@@ -1747,6 +1822,21 @@
 		brasero_burn_dialog_notify_success (dialog);
 	}
 
+	if (dialog->priv->burn) {
+		g_object_unref (dialog->priv->burn);
+		dialog->priv->burn = NULL;
+	}
+
+	if (dialog->priv->rates) {
+		g_slist_free (dialog->priv->rates);
+		dialog->priv->rates = NULL;
+	}
+
+	if (dialog->priv->total_time) {
+		g_timer_destroy (dialog->priv->total_time);
+		dialog->priv->total_time = NULL;
+	}
+
 	return FALSE;
 }
 

Modified: trunk/src/brasero-progress.c
==============================================================================
--- trunk/src/brasero-progress.c	(original)
+++ trunk/src/brasero-progress.c	Fri Aug 22 19:00:16 2008
@@ -189,6 +189,108 @@
 	gtk_widget_show_all (table);
 }
 
+void
+brasero_burn_progress_display_session_info (BraseroBurnProgress *obj,
+					    glong time,
+					    gint64 rate,
+					    gboolean is_DVD,
+					    gint written)
+{
+	GtkWidget *label;
+	GtkWidget *table;
+	int hrs, mn, sec;
+	gdouble speed;
+	gchar *text;
+
+	if (obj->priv->speed_time_info)
+		gtk_widget_destroy (obj->priv->speed_time_info);
+
+	table = gtk_table_new (2, 2, FALSE);
+	obj->priv->speed_time_info = table;
+	gtk_container_set_border_width (GTK_CONTAINER (table), 0);
+
+	label = gtk_label_new (_("Total time:"));
+	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 1.0);
+	gtk_table_attach (GTK_TABLE (table), label,
+			  0,
+			  1,
+			  0,
+			  1, 
+			  GTK_EXPAND|GTK_FILL,
+			  GTK_EXPAND|GTK_FILL,
+			  0,
+			  0);
+
+	hrs = time / 3600;
+	time = ((int) time) % 3600;
+	mn = time / 60;
+	sec = ((int) time) % 60;
+
+	text = g_strdup_printf ("%02i:%02i:%02i", hrs, mn, sec);
+	obj->priv->time = gtk_label_new (text);
+	g_free (text);
+
+	gtk_misc_set_alignment (GTK_MISC (obj->priv->time), 1.0, 1.0);
+	gtk_table_attach (GTK_TABLE (table), obj->priv->time,
+			  1,
+			  2,
+			  0,
+			  1, 
+			  GTK_FILL,
+			  GTK_FILL,
+			  0,
+			  0);
+	if (rate > 0) {
+		label = gtk_label_new (_("Average drive speed:"));
+		gtk_misc_set_alignment (GTK_MISC (label), 0.0, 1.0);
+		gtk_table_attach (GTK_TABLE (table), label,
+				  0,
+				  1,
+				  1,
+				  2, 
+				  GTK_EXPAND|GTK_FILL,
+				  GTK_EXPAND|GTK_FILL,
+				  0,
+				  0);
+
+		if (is_DVD)
+			speed = (gfloat) BRASERO_RATE_TO_SPEED_DVD (rate);
+		else
+			speed = (gfloat) BRASERO_RATE_TO_SPEED_CD (rate);
+
+		text = g_strdup_printf ("%"G_GINT64_FORMAT" KiB/s (%.1f x)", rate / 1024, speed);
+		obj->priv->speed = gtk_label_new (text);
+		g_free (text);
+
+		gtk_misc_set_alignment (GTK_MISC (obj->priv->speed), 1.0, 0.0);
+		gtk_table_attach (GTK_TABLE (table), obj->priv->speed,
+				  1,
+				  2,
+				  1,
+				  2, 
+				  GTK_FILL,
+				  GTK_FILL,
+				  0,
+				  0);
+	}
+
+	gtk_box_pack_start (GTK_BOX (obj), table, TRUE, TRUE, 20);
+	gtk_widget_show_all (table);
+
+	if (written > 1024 * 1024)
+		text = g_strdup_printf (_("%i MiB"), written / 1024 / 1024);
+	else if (written > 1024)
+		text = g_strdup_printf (_("%i kiB"), written / 1024);
+	else if (written > 0)
+		text = g_strdup_printf (_("%i bytes"), written);
+	else
+		return;
+
+	gtk_label_set_text (GTK_LABEL (obj->priv->bytes_written), text);
+	gtk_widget_show (obj->priv->bytes_written);
+	g_free (text);
+}
+
 static void
 brasero_burn_progress_set_property (GObject *object,
 				    guint property_id,

Modified: trunk/src/brasero-progress.h
==============================================================================
--- trunk/src/brasero-progress.h	(original)
+++ trunk/src/brasero-progress.h	Fri Aug 22 19:00:16 2008
@@ -71,6 +71,12 @@
 				  gint mb_isosize,
 				  gint mb_written,
 				  gint64 rate);
+void
+brasero_burn_progress_display_session_info (BraseroBurnProgress *progress,
+					    glong time,
+					    gint64 rate,
+					    gboolean is_DVD,
+					    gint mb_written);
 
 void
 brasero_burn_progress_set_action (BraseroBurnProgress *progress,

Modified: trunk/src/burn.c
==============================================================================
--- trunk/src/burn.c	(original)
+++ trunk/src/burn.c	Fri Aug 22 19:00:16 2008
@@ -1213,15 +1213,21 @@
 	g_return_val_if_fail (BRASERO_BURN (burn), BRASERO_BURN_ERR);
 	
 	priv = BRASERO_BURN_PRIVATE (burn);
-	if (!priv->task || !brasero_task_is_running (priv->task))
+
+	if (!priv->task)
+		return BRASERO_BURN_NOT_READY;
+
+	if (isosize)
+		brasero_task_ctx_get_session_output_size (BRASERO_TASK_CTX (priv->task),
+							  NULL,
+							  isosize);
+
+	if (!brasero_task_is_running (priv->task))
 		return BRASERO_BURN_NOT_READY;
 
 	if (rate)
 		brasero_task_ctx_get_rate (BRASERO_TASK_CTX (priv->task), rate);
 
-	if (isosize)
-		brasero_task_ctx_get_session_output_size (BRASERO_TASK_CTX (priv->task), NULL, isosize);
-
 	if (written)
 		brasero_task_ctx_get_written (BRASERO_TASK_CTX (priv->task), written);
 



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