Hi all,
I found out that when rb saves songs to AS queue, later they get
scrobbled in a URI fashion encoding, like this:
Jerry%20Cantrell – Breaks%20my%20Back
instead of
Jerry Cantrell – Breaks my Back
I did some research and found out that this is due to some changes in
the libsoup API during the 2.3 cycle:
2008-01-14 Dan Winship <[EMAIL PROTECTED]>
[...]
(soup_uri_decode, soup_uri_normalize): Change these to return the
decoded/normalized string rather than modifying it in place.
[...]
So, I cooked a patch to fix this, while keeping compatibility with
libsoup 2.2. Patch is attached. It is worth noting that this also caused
some memory leaks.
Ok to commit?
Claudio
--
Claudio Saavedra <[EMAIL PROTECTED]>
Index: plugins/audioscrobbler/rb-audioscrobbler.c
===================================================================
--- plugins/audioscrobbler/rb-audioscrobbler.c (revisión: 5639)
+++ plugins/audioscrobbler/rb-audioscrobbler.c (copia de trabajo)
@@ -1456,6 +1456,22 @@ void audioscrobbler_encoded_entry_free (
g_free (entry);
}
+/* This function wraps the call to soup_decode_string(), to avoid
+ having tons of ifdef everywhere. */
+
+static gchar *
+rb_audioscrobbler_decode_string (const gchar *uri)
+{
+ gchar *decoded;
+
+#ifdef HAVE_LIBSOUP_2_2
+ decoded = g_strdup (uri);
+ soup_uri_decode (decoded);
+#else
+ decoded = soup_uri_decode (uri);
+#endif
+ return decoded;
+}
/* Queue functions: */
@@ -1477,23 +1493,19 @@ rb_audioscrobbler_load_entry_from_string
if (breaks2[0] != NULL && breaks2[1] != NULL) {
if (g_str_has_prefix (breaks2[0], "a")) {
g_free (entry->artist);
- entry->artist = g_strdup (breaks2[1]);
- soup_uri_decode (entry->artist);
+ entry->artist = rb_audioscrobbler_decode_string (breaks2[1]);
}
if (g_str_has_prefix (breaks2[0], "t")) {
g_free (entry->title);
- entry->title = g_strdup (breaks2[1]);
- soup_uri_decode (entry->title);
+ entry->title = rb_audioscrobbler_decode_string (breaks2[1]);
}
if (g_str_has_prefix (breaks2[0], "b")) {
g_free (entry->album);
- entry->album = g_strdup (breaks2[1]);
- soup_uri_decode (entry->album);
+ entry->album = rb_audioscrobbler_decode_string (breaks2[1]);
}
if (g_str_has_prefix (breaks2[0], "m")) {
g_free (entry->mbid);
- entry->mbid = g_strdup (breaks2[1]);
- soup_uri_decode (entry->mbid);
+ entry->mbid = rb_audioscrobbler_decode_string (breaks2[1]);
}
if (g_str_has_prefix (breaks2[0], "l")) {
entry->length = atoi (breaks2[1]);
Index: ChangeLog
===================================================================
--- ChangeLog (revisión: 5641)
+++ ChangeLog (copia de trabajo)
@@ -1,3 +1,11 @@
+2008-03-22 Claudio Saavedra <[EMAIL PROTECTED]>
+
+ * plugins/audioscrobbler/rb-audioscrobbler.c:
+ (+rb_audioscrobbler_decode_string),
+ (rb_audioscrobbler_load_entry_from_string): Wrap calls to
+ soup_uri_decode, depending on libsoup version, to avoid scrobbling
+ encoded strings.
+
2008-03-22 Jonathan Matthew <[EMAIL PROTECTED]>
* doc/reference/rhythmbox-sections.txt:
_______________________________________________
rhythmbox-devel mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/rhythmbox-devel