[Goodies-commits] r4718 - xfburn/trunk/xfburn

David Mohr squisher at xfce.org
Sat May 3 08:45:21 CEST 2008


Author: squisher
Date: 2008-05-03 06:45:21 +0000 (Sat, 03 May 2008)
New Revision: 4718

Modified:
   xfburn/trunk/xfburn/xfburn-perform-burn.c
   xfburn/trunk/xfburn/xfburn-progress-dialog.c
Log:
Implement error reporting

Modified: xfburn/trunk/xfburn/xfburn-perform-burn.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-perform-burn.c	2008-05-03 06:03:45 UTC (rev 4717)
+++ xfburn/trunk/xfburn/xfburn-perform-burn.c	2008-05-03 06:45:21 UTC (rev 4718)
@@ -54,7 +54,17 @@
   char media_name[80];
   int media_no;
   int factor;
+  int ret;
 
+  gboolean error = FALSE;
+  int error_code;
+  char msg_text[BURN_MSGS_MESSAGE_LEN];
+  int os_errno;
+  char severity[80];
+  const char *final_status_text;
+  XfburnProgressDialogStatus final_status;
+  const char *final_message;
+
   while (burn_drive_get_status (drive, NULL) != BURN_DRIVE_IDLE)
     usleep(100001);
  
@@ -86,6 +96,12 @@
       xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG (dialog_progress), _("Cannot recognize state of drive and media"));
     return;
   }
+
+  /* set us up to receive fatal errors */
+  ret = burn_msgs_set_severities ("ALL", "NEVER", "libburn");
+
+  if (ret <= 0)
+    g_warning ("Failed to set libburn message severities, burn errors might not get detected!");
  
   burn_disc_write (burn_options, disc); 
 
@@ -151,5 +167,27 @@
     usleep (500000);
   }
 
-  xfburn_progress_dialog_set_status_with_text (XFBURN_PROGRESS_DIALOG (dialog_progress), XFBURN_PROGRESS_DIALOG_STATUS_COMPLETED, _("Done"));
+  /* check the libburn message queue for errors */
+  while ((ret = burn_msgs_obtain ("FAILURE", &error_code, msg_text, &os_errno, severity)) == 1) {
+    g_warning ("[%s] %d: %s (%d)", severity, error_code, msg_text, os_errno);
+    error = TRUE;
+  }
+#ifdef DEBUG
+  while ((ret = burn_msgs_obtain ("ALL", &error_code, msg_text, &os_errno, severity)) == 1) {
+    g_warning ("[%s] %d: %s (%d)", severity, error_code, msg_text, os_errno);
+  }
+#endif
+  if (ret < 0)
+    g_warning ("Fatal error while trying to retrieve libburn message!");
+
+  if (G_LIKELY (!error)) {
+    final_message = _("Done");
+    final_status = XFBURN_PROGRESS_DIALOG_STATUS_COMPLETED;
+  } else {
+    final_status_text  = _("Failure");
+    final_status = XFBURN_PROGRESS_DIALOG_STATUS_FAILED;
+    final_message = g_strdup_printf ("%s: %s", final_status_text, msg_text);
+  }
+
+  xfburn_progress_dialog_set_status_with_text (XFBURN_PROGRESS_DIALOG (dialog_progress), final_status, final_message);
 }

Modified: xfburn/trunk/xfburn/xfburn-progress-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-progress-dialog.c	2008-05-03 06:03:45 UTC (rev 4717)
+++ xfburn/trunk/xfburn/xfburn-progress-dialog.c	2008-05-03 06:45:21 UTC (rev 4718)
@@ -64,7 +64,7 @@
                                                  GParamSpec * pspec);
 
 static void set_writing_speed (XfburnProgressDialog * dialog, gfloat speed);
-static void set_action_text (XfburnProgressDialog * dialog, const gchar * text);
+static void set_action_text (XfburnProgressDialog * dialog, XfburnProgressDialogStatus status, const gchar * text);
 
 static void cb_button_close_clicked (GtkWidget *button, XfburnProgressDialog * dialog);
 static gboolean cb_dialog_delete (XfburnProgressDialog * dialog, GdkEvent * event, XfburnProgressDialogPrivate * priv);
@@ -159,9 +159,10 @@
 
   /* label */
   priv->label_action = gtk_label_new ("Initializing ...");
-  gtk_misc_set_alignment (GTK_MISC (priv->label_action), 0.0, 0.0);
+  gtk_misc_set_alignment (GTK_MISC (priv->label_action), 0.1, 0.0);
   gtk_label_set_justify (GTK_LABEL (priv->label_action), GTK_JUSTIFY_LEFT);
-  set_action_text (obj, _("Initializing..."));
+  gtk_label_set_selectable (GTK_LABEL (priv->label_action), TRUE);
+  set_action_text (obj, XFBURN_PROGRESS_DIALOG_STATUS_RUNNING, _("Initializing..."));
   gtk_widget_show (priv->label_action);
   gtk_box_pack_start (box, priv->label_action, FALSE, TRUE, BORDER);
 
@@ -282,12 +283,16 @@
 }
 
 static void
-set_action_text (XfburnProgressDialog * dialog, const gchar * text)
+set_action_text (XfburnProgressDialog * dialog, XfburnProgressDialogStatus status, const gchar * text)
 {
   XfburnProgressDialogPrivate *priv = XFBURN_PROGRESS_DIALOG_GET_PRIVATE (dialog);
   gchar *temp = NULL;
 
-  temp = g_strdup_printf ("<b>%s</b>", text);
+  if (status == XFBURN_PROGRESS_DIALOG_STATUS_FAILED)
+    temp = g_strdup_printf ("<span size=\"larger\" foreground=\"red\">%s</span>", text);
+  else
+    temp = g_strdup_printf ("<b>%s</b>", text);
+
   gtk_label_set_markup (GTK_LABEL (priv->label_action), temp);
 
   g_free (temp);  
@@ -485,7 +490,7 @@
 {
   xfburn_progress_dialog_set_status (dialog, status);
   gdk_threads_enter ();
-  set_action_text (dialog, text);
+  set_action_text (dialog, status, text);
   gdk_threads_leave ();
 }
 




More information about the Goodies-commits mailing list