[sound-juicer] Print MusicBrainz errors.



commit d2a288ad174afb12ab3aee8aa88787c018a6ad44
Author: Phillip Wood <phillip wood dunelm org uk>
Date:   Fri Jan 17 11:01:40 2014 +0000

    Print MusicBrainz errors.
    
    Add a convenience function for performing MusicBraniz queries and
    print a warning if there are any errors.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=723297

 libjuicer/sj-metadata-musicbrainz5.c |   62 ++++++++++++++++++++++++++++------
 1 files changed, 51 insertions(+), 11 deletions(-)
---
diff --git a/libjuicer/sj-metadata-musicbrainz5.c b/libjuicer/sj-metadata-musicbrainz5.c
index b9d890f..ce3030b 100644
--- a/libjuicer/sj-metadata-musicbrainz5.c
+++ b/libjuicer/sj-metadata-musicbrainz5.c
@@ -101,6 +101,49 @@ sj_mb5_album_details_dump (AlbumDetails *details)
 #define sj_mb5_album_details_dump(...)
 #endif
 
+static void
+print_musicbrainz_query_error (SjMetadataMusicbrainz5 *self,
+                               const char             *entity,
+                               const char             *id)
+{
+  SjMetadataMusicbrainz5Private *priv = GET_PRIVATE (self);
+  int len;
+  char *message;
+  int code =  mb5_query_get_lasthttpcode (priv->mb);
+  /* No error if the discid isn't found */
+  if (strcmp (entity, "discid") == 0 && code == 404)
+    return;
+  len =  mb5_query_get_lasterrormessage (priv->mb, NULL, 0) + 1;
+  message = g_malloc (len);
+  mb5_query_get_lasterrormessage (priv->mb, message, len);
+  g_warning ("No Musicbrainz metadata for %s %s, http code %d, %s",
+             entity, id, code, message);
+  g_free (message);
+}
+
+
+static Mb5Metadata
+query_musicbrainz (SjMetadataMusicbrainz5 *self,
+                   const char             *entity,
+                   const char             *id,
+                   char                   *includes)
+{
+  Mb5Metadata metadata;
+  char *inc[] = { "inc" };
+  SjMetadataMusicbrainz5Private *priv = GET_PRIVATE (self);
+
+  if (includes == NULL)
+    metadata = mb5_query_query (priv->mb, entity, id, "",
+                                0, NULL, NULL);
+  else
+    metadata = mb5_query_query (priv->mb, entity, id, "",
+                                1, inc, &includes);
+  if (metadata == NULL)
+    print_musicbrainz_query_error (self, entity, id);
+
+  return metadata;
+}
+
 static GList *
 get_artist_list (SjMetadataMusicbrainz5 *self,
                  Mb5ArtistCredit         credit)
@@ -586,8 +629,10 @@ mb5_list_albums (SjMetadata *metadata, char **url, GError **error)
 
   releases = mb5_query_lookup_discid(priv->mb, discid);
 
-  if (releases == NULL)
+  if (releases == NULL) {
+    print_musicbrainz_query_error (self, "discid", discid);
     return NULL;
+  }
 
   if (mb5_release_list_size (releases) == 0)
     return NULL;
@@ -600,19 +645,16 @@ mb5_list_albums (SjMetadata *metadata, char **url, GError **error)
       char *releaseid = NULL;
       Mb5Release full_release = NULL;
       Mb5Metadata release_md = NULL;
-      const char *query_entity = "release";
-      char *params_names[] = { "inc" };
-      char *params_values[] = { "artists artist-credits labels recordings \
+      char *includes = "artists artist-credits labels recordings \
 release-groups url-rels discids recording-level-rels work-level-rels work-rels \
-artist-rels" };
+artist-rels";
 
       releaseid = NULL;
       GET(releaseid, mb5_release_get_id, release);
       /* Inorder to get metadata from work and composer relationships
        * we need to perform a custom query
        */
-      release_md = mb5_query_query (priv->mb, query_entity, releaseid, "", 1,
-                                    params_names, params_values);
+      release_md = query_musicbrainz (self, "release", releaseid, includes);
 
       if (release_md && mb5_metadata_get_release (release_md))
         full_release = mb5_metadata_get_release (release_md);
@@ -631,12 +673,10 @@ artist-rels" };
            * release-group, so run a separate query to get these urls
            */
           char *releasegroupid = NULL;
-          char *params_names[] = { "inc" };
-          char *params_values[] = { "artists url-rels" };
+          char *includes = "artists url-rels";
 
           GET (releasegroupid, mb5_releasegroup_get_id, group);
-          metadata = mb5_query_query (priv->mb, "release-group", releasegroupid, "",
-                                      1, params_names, params_values);
+          metadata = query_musicbrainz (self, "release-group", releasegroupid, includes);
           g_free (releasegroupid);
         }
 


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