[easytag/wip/gerror: 6/8] Use GError in WavPack tagging code



commit 1561588a121294b2f91e9ed5589c394212858cbf
Author: David King <amigadave amigadave com>
Date:   Mon Sep 29 16:11:20 2014 +0100

    Use GError in WavPack tagging code

 src/et_core.c             |   18 ++++++++--
 src/tags/wavpack_header.c |   46 ++++++++++++++-----------
 src/tags/wavpack_header.h |    7 +++-
 src/tags/wavpack_tag.c    |   83 ++++++++++++++++++++++++++++-----------------
 src/tags/wavpack_tag.h    |    4 +-
 5 files changed, 100 insertions(+), 58 deletions(-)
---
diff --git a/src/et_core.c b/src/et_core.c
index ed133d7..841552c 100644
--- a/src/et_core.c
+++ b/src/et_core.c
@@ -583,7 +583,13 @@ GList *ET_Add_File_To_File_List (gchar *filename)
 #endif
 #ifdef ENABLE_WAVPACK
         case WAVPACK_TAG:
-            Wavpack_Tag_Read_File_Tag(filename, FileTag);
+            if (!wavpack_tag_read_file_tag (filename, FileTag, &error))
+            {
+                Log_Print (LOG_ERROR,
+                           _("Error reading tag from WavPack file ā€˜%sā€™: %s"),
+                           filename_utf8, error->message);
+                g_clear_error (&error);
+            }
         break;
 #endif
 #ifdef ENABLE_OPUS
@@ -674,7 +680,13 @@ GList *ET_Add_File_To_File_List (gchar *filename)
             break;
 #ifdef ENABLE_WAVPACK
         case WAVPACK_FILE:
-            Wavpack_Header_Read_File_Info(filename, ETFileInfo);
+            if (!wavpack_header_read_file_info (filename, ETFileInfo, &error))
+            {
+                Log_Print (LOG_ERROR,
+                           _("Error while querying information for file ā€˜%sā€™: %s"),
+                           filename_utf8, error->message);
+                g_error_free (error);
+            }
             break;
 #endif
 #ifdef ENABLE_MP4
@@ -3514,7 +3526,7 @@ ET_Save_File_Tag_To_HD (ET_File *ETFile, GError **error)
 #endif
 #ifdef ENABLE_WAVPACK
         case WAVPACK_TAG:
-            state = Wavpack_Tag_Write_File_Tag(ETFile);
+            state = wavpack_tag_write_file_tag (ETFile, error);
             break;
 #endif
 #ifdef ENABLE_OPUS
diff --git a/src/tags/wavpack_header.c b/src/tags/wavpack_header.c
index d6ecf73..94f65e2 100644
--- a/src/tags/wavpack_header.c
+++ b/src/tags/wavpack_header.c
@@ -1,21 +1,20 @@
-/* wavpack_header.c - 2007/02/15 */
-/*
- *  EasyTAG - Tag editor for many file types
- *  Copyright (C) 2007 Maarten Maathuis (madman2003 gmail com)
+/* EasyTAG - Tag editor for audio files.
+ * Copyright (C) 2014  David King <amigadave amigadave com>
+ * Copyright (C) 2007 Maarten Maathuis (madman2003 gmail com)
  *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include <config.h>
@@ -37,14 +36,22 @@
 
 
 gboolean
-Wavpack_Header_Read_File_Info (const gchar *filename,
-                               ET_File_Info *ETFileInfo)
+wavpack_header_read_file_info (const gchar *filename,
+                               ET_File_Info *ETFileInfo,
+                               GError **error)
 {
     WavpackContext *wpc;
+    gchar message[80];
 
-    wpc = WavpackOpenFileInput(filename, NULL, 0, 0);
+    g_return_val_if_fail (filename != NULL && ETFileInfo != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-    if ( wpc == NULL ) {
+    /* TODO: Use WavpackOpenFileInputEx() instead. */
+    wpc = WavpackOpenFileInput (filename, message, 0, 0);
+
+    if (wpc == NULL)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s", message);
         return FALSE;
     }
 
@@ -61,7 +68,6 @@ Wavpack_Header_Read_File_Info (const gchar *filename,
     return TRUE;
 }
 
-
 EtFileHeaderFields *
 Wavpack_Header_Display_File_Info_To_UI (const gchar *filename_utf8,
                                         ET_File *ETFile)
diff --git a/src/tags/wavpack_header.h b/src/tags/wavpack_header.h
index 0b5f77a..ae603e7 100644
--- a/src/tags/wavpack_header.h
+++ b/src/tags/wavpack_header.h
@@ -20,11 +20,14 @@
 #ifndef ET_WAVPACK_HEADER_H_
 #define ET_WAVPACK_HEADER_H_
 
-
 #include "et_core.h"
 
-gboolean Wavpack_Header_Read_File_Info (const gchar *filename, ET_File_Info *ETFileInfo);
+G_BEGIN_DECLS
+
+gboolean wavpack_header_read_file_info (const gchar *filename, ET_File_Info *ETFileInfo, GError **error);
 EtFileHeaderFields * Wavpack_Header_Display_File_Info_To_UI (const gchar *filename_utf8, ET_File *ETFile);
 void et_wavpack_file_header_fields_free (EtFileHeaderFields *fields);
 
+G_END_DECLS
+
 #endif /* ET_WAVPACK_HEADER_H_ */
diff --git a/src/tags/wavpack_tag.c b/src/tags/wavpack_tag.c
index 472ee24..f26eb2b 100644
--- a/src/tags/wavpack_tag.c
+++ b/src/tags/wavpack_tag.c
@@ -65,19 +65,26 @@
  * Read tag data from a Wavpack file.
  */
 gboolean
-Wavpack_Tag_Read_File_Tag (const gchar *filename, File_Tag *FileTag)
+wavpack_tag_read_file_tag (const gchar *filename,
+                           File_Tag *FileTag,
+                           GError **error)
 {
     WavpackContext *wpc;
+    gchar message[80];
     gchar *field, *field2;
     guint length;
 
     int open_flags = OPEN_TAGS;
 
     g_return_val_if_fail (filename != NULL && FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
-    wpc = WavpackOpenFileInput(filename, NULL, open_flags, 0);
+    /* TODO: Use WavpackOpenFileInputEx() instead. */
+    wpc = WavpackOpenFileInput (filename, message, open_flags, 0);
 
-    if ( wpc == NULL ) {
+    if (wpc == NULL)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s", message);
         return FALSE;
     }
 
@@ -267,22 +274,28 @@ Wavpack_Tag_Read_File_Tag (const gchar *filename, File_Tag *FileTag)
     return TRUE;
 }
 
-
-gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
+gboolean
+wavpack_tag_write_file_tag (ET_File *ETFile,
+                            GError **error)
 {
+    const gchar *filename;
+    const File_Tag *FileTag;
     WavpackContext *wpc;
-
-    gchar    *filename = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value;
-    File_Tag *FileTag  = (File_Tag *)ETFile->FileTag->data;
-    gchar    *buffer;
-
-    int open_flags = OPEN_EDIT_TAGS;
+    gchar message[80];
+    gchar *buffer;
 
     g_return_val_if_fail (ETFile != NULL && ETFile->FileTag != NULL, FALSE);
+    g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+    filename = ((File_Name *)((GList *)ETFile->FileNameCur)->data)->value;
+    FileTag = (File_Tag *)ETFile->FileTag->data;
 
-    wpc = WavpackOpenFileInput(filename, NULL, open_flags, 0);
+    /* TODO: Use WavpackOpenFileInputEx() instead. */
+    wpc = WavpackOpenFileInput (filename, message, OPEN_EDIT_TAGS, 0);
 
-    if ( wpc == NULL ) {
+    if (wpc == NULL)
+    {
+        g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s", message);
         return FALSE;
     }
 
@@ -290,21 +303,21 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
      * Title
      */
     if (FileTag->title && WavpackAppendTagItem(wpc, "title", FileTag->title, strlen(FileTag->title)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Artist
      */
     if (FileTag->artist && WavpackAppendTagItem(wpc, "artist", FileTag->artist, strlen(FileTag->artist)) == 
0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Album
      */
     if (FileTag->album && WavpackAppendTagItem(wpc, "album", FileTag->album, strlen(FileTag->album)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
@@ -318,7 +331,7 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
         if (WavpackAppendTagItem (wpc, "part", buffer, strlen (buffer)) == 0)
         {
             g_free (buffer);
-            return FALSE;
+            goto err;
         }
         else
         {
@@ -331,7 +344,7 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
                                                           FileTag->disc_number,
                                                           strlen (FileTag->disc_number)) == 0)
         {
-            return FALSE;
+            goto err;
         }
     }
 
@@ -339,7 +352,7 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
      * Year
      */
     if (FileTag->year && WavpackAppendTagItem(wpc, "year", FileTag->year, strlen(FileTag->year)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
@@ -349,13 +362,13 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
         buffer = g_strdup_printf("%s/%s", FileTag->track, FileTag->track_total);
         if (FileTag->track && WavpackAppendTagItem(wpc, "track", buffer, strlen(buffer)) == 0) {
             g_free(buffer);
-            return FALSE;
+            goto err;
         } else {
             g_free(buffer);
         }
     } else {
         if (FileTag->track && WavpackAppendTagItem(wpc, "track", FileTag->track, strlen(FileTag->track)) == 
0) {
-            return FALSE;
+            goto err;
         }
     }
 
@@ -363,57 +376,65 @@ gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile)
      * Genre
      */
     if (FileTag->genre && WavpackAppendTagItem(wpc, "genre", FileTag->genre, strlen(FileTag->genre)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Comment
      */
     if (FileTag->comment && WavpackAppendTagItem(wpc, "comment", FileTag->comment, strlen(FileTag->comment)) 
== 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Composer
      */
     if (FileTag->composer && WavpackAppendTagItem(wpc, "composer", FileTag->composer, 
strlen(FileTag->composer)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Original artist
      */
     if (FileTag->orig_artist && WavpackAppendTagItem(wpc, "original artist", FileTag->orig_artist, 
strlen(FileTag->orig_artist)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * Copyright
      */
     if (FileTag->copyright && WavpackAppendTagItem(wpc, "copyright", FileTag->copyright, 
strlen(FileTag->copyright)) == 0) {
-        return FALSE;
+        goto err;
     }
 
     /*
      * URL
      */
     if (FileTag->url && WavpackAppendTagItem(wpc, "copyright url", FileTag->url, strlen(FileTag->url)) == 0) 
{
-        return FALSE;
+        goto err;
     }
 
     /*
      * Encoded by
      */
     if (FileTag->encoded_by && WavpackAppendTagItem(wpc, "encoded by", FileTag->encoded_by, 
strlen(FileTag->encoded_by)) == 0) {
-        return FALSE;
+        goto err;
     }
 
-    WavpackWriteTag(wpc);
+    if (WavpackWriteTag (wpc) != 0)
+    {
+        goto err;
+    }
 
-    WavpackCloseFile(wpc);
+    WavpackCloseFile (wpc);
 
     return TRUE;
-}
 
+err:
+    g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, "%s",
+                 WavpackGetErrorMessage (wpc));
+    WavpackCloseFile (wpc);
+    return FALSE;
+}
 
 #endif /* ENABLE_WAVPACK */
diff --git a/src/tags/wavpack_tag.h b/src/tags/wavpack_tag.h
index 0f02154..0cd8607 100644
--- a/src/tags/wavpack_tag.h
+++ b/src/tags/wavpack_tag.h
@@ -25,8 +25,8 @@
 
 G_BEGIN_DECLS
 
-gboolean Wavpack_Tag_Read_File_Tag (const gchar *filename, File_Tag *FileTag);
-gboolean Wavpack_Tag_Write_File_Tag (ET_File *ETFile);
+gboolean wavpack_tag_read_file_tag (const gchar *filename, File_Tag *FileTag, GError **error);
+gboolean wavpack_tag_write_file_tag (ET_File *ETFile, GError **error);
 
 G_END_DECLS
 


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