[rhythmbox] [audiocd] Update from sound-juicer 2.28.1
- From: Bastien Nocera <hadess src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [rhythmbox] [audiocd] Update from sound-juicer 2.28.1
- Date: Wed, 25 Nov 2009 18:01:37 +0000 (UTC)
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]