[easytag/easytag-2-2] Provide a useful error when failing to write files



commit 4288ddf6c7c5b09d352cdce784088e263d332501
Author: David King <amigadave amigadave com>
Date:   Fri Aug 1 17:34:24 2014 +0100

    Provide a useful error when failing to write files
    
    Pass an error back from ET_Save_File_Tag_To_HD() to ensure that a useful
    error message is presented to the user. Provide a sane fallback if the
    tag writing function does not provide a GError API (currently all
    non-Ogg formats).
    
    https://bugzilla.gnome.org/show_bug.cgi?id=733929

 src/easytag.c |   27 +++++++--------------------
 src/et_core.c |   20 ++++++++++----------
 src/et_core.h |    2 +-
 3 files changed, 18 insertions(+), 31 deletions(-)
---
diff --git a/src/easytag.c b/src/easytag.c
index aa24a0b..f22a890 100644
--- a/src/easytag.c
+++ b/src/easytag.c
@@ -3075,9 +3075,9 @@ et_rename_file (const char *old_filepath, const char *new_filepath,
 static gboolean
 Write_File_Tag (ET_File *ETFile, gboolean hide_msgbox)
 {
+    GError *error = NULL;
     gchar *cur_filename_utf8 = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
     gchar *msg = NULL;
-    gchar *msg1;
     gchar *basename_utf8;
     GtkWidget *msgdialog;
 
@@ -3087,29 +3087,14 @@ Write_File_Tag (ET_File *ETFile, gboolean hide_msgbox)
     g_free(msg);
     msg = NULL;
 
-    if (ET_Save_File_Tag_To_HD(ETFile))
+    if (ET_Save_File_Tag_To_HD (ETFile, &error))
     {
         Statusbar_Message(_("Tag(s) written"),TRUE);
         g_free (basename_utf8);
         return TRUE;
     }
 
-    switch ( ((ET_File_Description *)ETFile->ETFileDescription)->TagType)
-    {
-#ifdef ENABLE_OGG
-        case OGG_TAG:
-            /* Special for Ogg Vorbis because the error was already reported in
-             * ET_Save_File_Tag_To_HD. */
-            break;
-#endif
-        default:
-            msg = g_strdup (g_strerror (errno));
-            msg1 = g_strdup_printf (_("Cannot write tag in file '%s' (%s)"),
-                                    basename_utf8, msg);
-            Log_Print (LOG_ERROR, "%s", msg1);
-            g_free (msg1);
-    }
-
+    Log_Print (LOG_ERROR, "%s", error->message);
 
     if (!hide_msgbox)
     {
@@ -3119,13 +3104,15 @@ Write_File_Tag (ET_File *ETFile, gboolean hide_msgbox)
                              GTK_BUTTONS_CLOSE,
                              _("Cannot write tag in file '%s'"),
                              basename_utf8);
-        gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msgdialog),"%s",msg);
+        gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (msgdialog),
+                                                  "%s", error->message);
         gtk_window_set_title(GTK_WINDOW(msgdialog),_("Tag Write Error"));
 
         gtk_dialog_run(GTK_DIALOG(msgdialog));
         gtk_widget_destroy(msgdialog);
     }
-    g_free(msg);
+
+    g_clear_error (&error);
     g_free(basename_utf8);
 
     return FALSE;
diff --git a/src/et_core.c b/src/et_core.c
index c709a13..1885adc 100644
--- a/src/et_core.c
+++ b/src/et_core.c
@@ -4011,7 +4011,8 @@ ET_Save_File_Tag_Internal (ET_File *ETFile, File_Tag *FileTag)
 /*
  * Save data contained into File_Tag structure to the file on hard disk.
  */
-gboolean ET_Save_File_Tag_To_HD (ET_File *ETFile)
+gboolean
+ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error)
 {
     ET_File_Description *ETFileDescription;
     gchar *cur_filename;
@@ -4019,9 +4020,9 @@ gboolean ET_Save_File_Tag_To_HD (ET_File *ETFile)
     gboolean state;
     GFile *file;
     GFileInfo *fileinfo;
-    GError *error = NULL;
 
     g_return_val_if_fail (ETFile != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
     cur_filename      = ((File_Name *)(ETFile->FileNameCur)->data)->value;
     cur_filename_utf8 = ((File_Name *)(ETFile->FileNameCur)->data)->value_utf8;
@@ -4042,7 +4043,7 @@ gboolean ET_Save_File_Tag_To_HD (ET_File *ETFile)
 #endif
 #ifdef ENABLE_OGG
         case OGG_TAG:
-            state = ogg_tag_write_file_tag (ETFile, &error);
+            state = ogg_tag_write_file_tag (ETFile, error);
             break;
 #endif
 #ifdef ENABLE_FLAC
@@ -4065,7 +4066,7 @@ gboolean ET_Save_File_Tag_To_HD (ET_File *ETFile)
 #endif
 #ifdef ENABLE_OPUS
         case OPUS_TAG:
-            state = ogg_tag_write_file_tag (ETFile, &error);
+            state = ogg_tag_write_file_tag (ETFile, error);
             break;
 #endif
         case UNKNOWN_TAG:
@@ -4122,13 +4123,12 @@ gboolean ET_Save_File_Tag_To_HD (ET_File *ETFile)
     }
     else
     {
-        if (error)
+        if (*error == NULL)
         {
-                Log_Print (LOG_ERROR,
-                           _("Error writing tag type %d to file %s (%s)"),
-                           ETFileDescription->TagType, cur_filename_utf8,
-                           error->message);
-                g_error_free (error);
+            g_set_error (error, G_IO_ERROR, G_IO_ERROR_UNKNOWN,
+                         _("Error writing tag type %d to file %s (%s)"),
+                         ETFileDescription->TagType, cur_filename_utf8,
+                         g_strerror (EIO));
         }
 
         return FALSE;
diff --git a/src/et_core.h b/src/et_core.h
index b81fbfd..ea00217 100644
--- a/src/et_core.h
+++ b/src/et_core.h
@@ -343,7 +343,7 @@ gboolean ET_Set_Displayed_File_List         (GList *ETFileList);
 
 void     ET_Display_File_Data_To_UI (ET_File *ETFile);
 void     ET_Save_File_Data_From_UI  (ET_File *ETFile);
-gboolean ET_Save_File_Tag_To_HD     (ET_File *ETFile);
+gboolean ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error);
 
 gboolean ET_Undo_File_Data          (ET_File *ETFile);
 gboolean ET_Redo_File_Data          (ET_File *ETFile);


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