[rhythmbox] [audiocd] Update from sound-juicer 2.28.1



commit f47cd2e66fa9891cf78a6621034156992280de8e
Author: Bastien Nocera <hadess hadess net>
Date:   Wed Nov 25 18:01:12 2009 +0000

    [audiocd] Update from sound-juicer 2.28.1

 plugins/audiocd/sj-metadata-getter.c       |   13 +++++--
 plugins/audiocd/sj-metadata-getter.h       |    2 +-
 plugins/audiocd/sj-metadata-gvfs.c         |   21 ++++++++----
 plugins/audiocd/sj-metadata-musicbrainz.c  |    2 +-
 plugins/audiocd/sj-metadata-musicbrainz3.c |   51 ++++++++++++++++++++--------
 5 files changed, 62 insertions(+), 27 deletions(-)
---
diff --git a/plugins/audiocd/sj-metadata-getter.c b/plugins/audiocd/sj-metadata-getter.c
index 9e5e6c9..da3f685 100644
--- a/plugins/audiocd/sj-metadata-getter.c
+++ b/plugins/audiocd/sj-metadata-getter.c
@@ -164,6 +164,7 @@ fire_signal_idle (SjMetadataGetterSignal *signal)
     g_object_unref (signal->metadata);
   if (signal->error != NULL)
     g_error_free (signal->error);
+  g_object_unref (signal->mdg);
   g_free (signal);
 
   return FALSE;
@@ -172,7 +173,6 @@ fire_signal_idle (SjMetadataGetterSignal *signal)
 static gpointer
 lookup_cd (SjMetadataGetter *mdg)
 {
-  SjMetadata *metadata;
   guint i;
   SjMetadataGetterPrivate *priv;
   GError *error = NULL;
@@ -196,6 +196,7 @@ lookup_cd (SjMetadataGetter *mdg)
   priv->url = NULL;
 
   for (i = 0; i < G_N_ELEMENTS (types); i++) {
+    SjMetadata *metadata;
     GList *albums;
 
     metadata = g_object_new (types[i],
@@ -213,8 +214,8 @@ lookup_cd (SjMetadataGetter *mdg)
 
       signal = g_new0 (SjMetadataGetterSignal, 1);
       signal->albums = albums;
-      signal->mdg = mdg;
-      signal->metadata = metadata;
+      signal->mdg = g_object_ref (mdg);
+      signal->metadata = g_object_ref (metadata);
       g_idle_add ((GSourceFunc)fire_signal_idle, signal);
       break;
     }
@@ -228,12 +229,14 @@ lookup_cd (SjMetadataGetter *mdg)
 
       signal = g_new0 (SjMetadataGetterSignal, 1);
       signal->error = error;
-      signal->mdg = mdg;
+      signal->mdg = g_object_ref (mdg);
       g_idle_add ((GSourceFunc)fire_signal_idle, signal);
       break;
     }
   }
 
+  g_object_unref (mdg);
+
   return NULL;
 }
 
@@ -242,11 +245,13 @@ sj_metadata_getter_list_albums (SjMetadataGetter *mdg, GError **error)
 {
   GThread *thread;
 
+  g_object_ref (mdg);
   thread = g_thread_create ((GThreadFunc)lookup_cd, mdg, TRUE, error);
   if (thread == NULL) {
     g_set_error (error,
                  SJ_ERROR, SJ_ERROR_INTERNAL_ERROR,
                  _("Could not create CD lookup thread"));
+    g_object_unref (mdg);
     return FALSE;
   }
 
diff --git a/plugins/audiocd/sj-metadata-getter.h b/plugins/audiocd/sj-metadata-getter.h
index 7aed0f8..621dc15 100644
--- a/plugins/audiocd/sj-metadata-getter.h
+++ b/plugins/audiocd/sj-metadata-getter.h
@@ -46,7 +46,7 @@ struct _SjMetadataGetterClass
   GObjectClass parent;
 
   /* Signals */
-  void         (*metadata) (SjMetadataGetter *mdg, GList *albums, GError *error);
+  void         (*metadata) (SjMetadataGetter *mdg, GList *albums, const GError *error);
 };
 
 GType sj_metadata_getter_get_type (void);
diff --git a/plugins/audiocd/sj-metadata-gvfs.c b/plugins/audiocd/sj-metadata-gvfs.c
index fc41d51..6e77fb4 100644
--- a/plugins/audiocd/sj-metadata-gvfs.c
+++ b/plugins/audiocd/sj-metadata-gvfs.c
@@ -76,7 +76,7 @@ gvfs_list_albums (SjMetadata *metadata, char **url, GError **error)
   GFile *file = NULL;
   GFileInfo *info;
   GFileEnumerator *e;
-  guint i = 0;
+  guint i = 1;
 
   g_return_val_if_fail (SJ_IS_METADATA_GVFS (metadata), NULL);
 
@@ -89,7 +89,7 @@ gvfs_list_albums (SjMetadata *metadata, char **url, GError **error)
 
   file = g_file_new_for_uri (priv->uri);
 
-  info = g_file_query_info (file, "xattr::org.gnome.audio",
+  info = g_file_query_info (file, "xattr::*",
   			    G_FILE_QUERY_INFO_NONE, NULL, &my_error);
   if (info == NULL)
     goto bail;
@@ -112,24 +112,30 @@ gvfs_list_albums (SjMetadata *metadata, char **url, GError **error)
   g_object_unref (info);
 
   /* Get tracks metadata */
-  e = g_file_enumerate_children (file, "xattr::org.gnome.audio",
+  e = g_file_enumerate_children (file, "xattr::*",
   				 G_FILE_QUERY_INFO_NONE, NULL, &my_error);
   if (e == NULL)
     goto bail;
+  g_object_unref (file);
 
   for (info = g_file_enumerator_next_file (e, NULL, NULL) ;
        info != NULL ;
-       info = g_file_enumerator_next_file (e, NULL, NULL)) {
+       info = g_file_enumerator_next_file (e, NULL, NULL), i++) {
     TrackDetails *track;
 
     track = g_new0 (TrackDetails, 1);
-    track->number = i++;
+    track->number = i;
+    track->album = album;
     track->title = g_strdup (g_file_info_get_attribute_string (info, "xattr::org.gnome.audio.title"));
     if (track->title == NULL)
       track->title = g_strdup_printf (_("Track %d"), i);
     track->artist = g_strdup (g_file_info_get_attribute_string (info, "xattr::org.gnome.audio.artist"));
-    if (track->artist == NULL)
-      track->artist = g_strdup (_("Unknown Artist"));
+    if (track->artist == NULL || track->artist[0] == '\0') {
+      if (album->artist == NULL)
+        track->artist = g_strdup (_("Unknown Artist"));
+      else
+        track->artist = g_strdup (album->artist);
+    }
     track->duration = g_file_info_get_attribute_uint64 (info, "xattr::org.gnome.audio.duration");
     album->number++;
     g_object_unref (info);
@@ -192,6 +198,7 @@ sj_metadata_gvfs_set_property (GObject *object, guint property_id,
   case PROP_DEVICE:
     g_free (priv->cdrom);
     priv->cdrom = g_value_dup_string (value);
+    g_free (priv->uri);
     priv->uri = device_to_cdda_uri (priv->cdrom);
     break;
   case PROP_PROXY_HOST:
diff --git a/plugins/audiocd/sj-metadata-musicbrainz.c b/plugins/audiocd/sj-metadata-musicbrainz.c
index 59721ff..fa7cf2f 100644
--- a/plugins/audiocd/sj-metadata-musicbrainz.c
+++ b/plugins/audiocd/sj-metadata-musicbrainz.c
@@ -274,7 +274,7 @@ mb_list_albums (SjMetadata *metadata, char **url, GError **error)
   SjMetadataMusicbrainzPrivate *priv;
   GList *albums = NULL;
   GList *al, *tl;
-  char data[256];
+  char data[1024];
   int num_albums, i, j;
 
   g_return_val_if_fail (metadata != NULL, NULL);
diff --git a/plugins/audiocd/sj-metadata-musicbrainz3.c b/plugins/audiocd/sj-metadata-musicbrainz3.c
index 2f785fa..5845e0a 100644
--- a/plugins/audiocd/sj-metadata-musicbrainz3.c
+++ b/plugins/audiocd/sj-metadata-musicbrainz3.c
@@ -44,6 +44,27 @@
 		field = g_strdup (buffer);					\
 }
 
+#if HAVE_MB_EXTRACT_UUID
+#define GET_ID(field, function, obj) {						\
+	char uuid_buffer[37];							\
+        function (obj, buffer, sizeof (buffer));				\
+	mb_extract_uuid (buffer, uuid_buffer, sizeof (uuid_buffer));		\
+	if (field)								\
+		g_free (field);							\
+	if (*uuid_buffer == '\0')						\
+		field = NULL;							\
+	else									\
+		field = g_strdup (uuid_buffer);					\
+}
+#else
+#define GET_ID(field, function, obj) {						\
+	if (field)								\
+		g_free (field);							\
+	field = NULL;								\
+}
+#endif /* HAVE_MB_EXTRACT_UUID */
+
+#define GCONF_MUSICBRAINZ_SERVER "/apps/sound-juicer/musicbrainz_server"
 #define GCONF_PROXY_USE_PROXY "/system/http_proxy/use_http_proxy"
 #define GCONF_PROXY_HOST "/system/http_proxy/host"
 #define GCONF_PROXY_PORT "/system/http_proxy/port"
@@ -97,15 +118,7 @@ make_album_from_release (MbRelease *release)
 
   album = g_new0 (AlbumDetails, 1);
 
-   /* Some versions of libmusicbrainz3 seem to forget the trailing .html in the URL */
-  GET (album->album_id, mb_release_get_id, release);
-  if (album->album_id && g_str_has_suffix (album->album_id, ".html") == FALSE) {
-    char *tmp;
-    tmp = g_strdup_printf ("%s.html", album->album_id);
-    g_free (album->album_id);
-    album->album_id = tmp;
-  }
-
+  GET_ID (album->album_id, mb_release_get_id, release);
   GET (album->title, mb_release_get_title, release);
   new_title = sj_metadata_helper_scan_disc_number (album->title, &album->disc_number);
   if (new_title) {
@@ -114,7 +127,7 @@ make_album_from_release (MbRelease *release)
   }
 
   artist = mb_release_get_artist (release);
-  GET (album->artist_id, mb_artist_get_id, artist);
+  GET_ID (album->artist_id, mb_artist_get_id, artist);
   GET (album->artist, mb_artist_get_name, artist);
   GET (album->artist_sortname, mb_artist_get_sortname, artist);
 
@@ -167,7 +180,7 @@ make_album_from_release (MbRelease *release)
     track->album = album;
 
     track->number = i + 1;
-    GET (track->track_id, mb_track_get_id, mbt);
+    GET_ID (track->track_id, mb_track_get_id, mbt);
 
     GET (track->title, mb_track_get_title, mbt);
     track->duration = mb_track_get_duration (mbt) / 1000;
@@ -175,7 +188,7 @@ make_album_from_release (MbRelease *release)
     artist = mb_track_get_artist (mbt);
     if (artist == NULL)
       artist = mb_release_get_artist (release);
-    GET (track->artist_id, mb_artist_get_id, artist);
+    GET_ID (track->artist_id, mb_artist_get_id, artist);
     GET (track->artist, mb_artist_get_name, artist);
     GET (track->artist_sortname, mb_artist_get_sortname, artist);
 
@@ -220,7 +233,7 @@ mb_list_albums (SjMetadata *metadata, char **url, GError **error)
   MbResultList results;
   MbRelease release;
   char *id = NULL;
-  char buffer[512];
+  char buffer[1024];
   int i;
   g_return_val_if_fail (SJ_IS_METADATA_MUSICBRAINZ3 (metadata), NULL);
 
@@ -302,14 +315,24 @@ static void
 sj_metadata_musicbrainz3_init (SjMetadataMusicbrainz3 *self)
 {
   GConfClient *gconf_client;
+  gchar *server_name;
+
   SjMetadataMusicbrainz3Private *priv;
 
   priv = GET_PRIVATE (self);
 
-  priv->mb = mb_webservice_new();
+  priv->mb = mb_webservice_new ();
 
   gconf_client = gconf_client_get_default ();
 
+  server_name = gconf_client_get_string (gconf_client, GCONF_MUSICBRAINZ_SERVER, NULL);
+
+  if (server_name && strcmp (server_name, "") != 0) {
+    mb_webservice_set_host (priv->mb, server_name);
+  }
+
+  g_free (server_name);
+
   /* Set the HTTP proxy */
   if (gconf_client_get_bool (gconf_client, GCONF_PROXY_USE_PROXY, NULL)) {
     char *proxy_host;



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