[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