[easytag] Provide a useful error when failing to write files
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag] Provide a useful error when failing to write files
- Date: Fri, 1 Aug 2014 16:46:22 +0000 (UTC)
commit aafa2f280cd38621835c8919315d07165639a0db
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 89a6bbe..dcaa626 100644
--- a/src/easytag.c
+++ b/src/easytag.c
@@ -3071,9 +3071,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;
@@ -3083,29 +3083,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)
{
@@ -3115,13 +3100,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 e86fcba..bddd4b4 100644
--- a/src/et_core.c
+++ b/src/et_core.c
@@ -4005,7 +4005,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;
@@ -4013,9 +4014,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;
@@ -4036,7 +4037,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
@@ -4059,7 +4060,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:
@@ -4116,13 +4117,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 101c9cb..7fb051b 100644
--- a/src/et_core.h
+++ b/src/et_core.h
@@ -337,7 +337,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]