[rhythmbox] Update libjuicer code from sound-juicer



commit d8ab203e076f0d801859b554ea84e2104d4d177c
Author: Bastien Nocera <hadess hadess net>
Date:   Thu May 7 23:12:21 2009 +0100

    Update libjuicer code from sound-juicer
    
    Fixes some ownership issues for the albums GList.
---
 plugins/audiocd/sj-metadata-getter.c |    4 ++--
 plugins/audiocd/sj-metadata-gvfs.c   |   31 ++++++++++++++-----------------
 2 files changed, 16 insertions(+), 19 deletions(-)

diff --git a/plugins/audiocd/sj-metadata-getter.c b/plugins/audiocd/sj-metadata-getter.c
index 4a55ecd..9e5e6c9 100644
--- a/plugins/audiocd/sj-metadata-getter.c
+++ b/plugins/audiocd/sj-metadata-getter.c
@@ -22,6 +22,7 @@
 
 #include <glib-object.h>
 #include <glib/gi18n.h>
+#include "sj-structures.h"
 #include "sj-metadata-getter.h"
 #include "sj-metadata-marshal.h"
 #include "sj-metadata.h"
@@ -155,11 +156,10 @@ sj_metadata_getter_set_proxy_port (SjMetadataGetter *mdg, const int proxy_port)
 static gboolean
 fire_signal_idle (SjMetadataGetterSignal *signal)
 {
+  /* The callback is the sucker, and now owns the albums list */
   g_signal_emit_by_name (G_OBJECT (signal->mdg), "metadata",
   			 signal->albums, signal->error);
 
-  /* This will kill the albums, as
-   * those belong to the metadata backend */
   if (signal->metadata)
     g_object_unref (signal->metadata);
   if (signal->error != NULL)
diff --git a/plugins/audiocd/sj-metadata-gvfs.c b/plugins/audiocd/sj-metadata-gvfs.c
index fcf68c3..fc41d51 100644
--- a/plugins/audiocd/sj-metadata-gvfs.c
+++ b/plugins/audiocd/sj-metadata-gvfs.c
@@ -35,7 +35,6 @@
 struct SjMetadataGvfsPrivate {
   char *cdrom;
   char *uri;
-  GList *albums;
 };
 
 #define GET_PRIVATE(o)  \
@@ -71,9 +70,10 @@ static GList *
 gvfs_list_albums (SjMetadata *metadata, char **url, GError **error)
 {
   SjMetadataGvfsPrivate *priv;
+  GList *albums = NULL;
   AlbumDetails *album;
   GError *my_error = NULL;
-  GFile *file;
+  GFile *file = NULL;
   GFileInfo *info;
   GFileEnumerator *e;
   guint i = 0;
@@ -84,8 +84,7 @@ gvfs_list_albums (SjMetadata *metadata, char **url, GError **error)
 
   if (priv->uri == NULL) {
     g_set_error (error, SJ_ERROR, SJ_ERROR_INTERNAL_ERROR, _("Cannot access CD"));
-    priv->albums = NULL;
-    return NULL;
+    goto bail;
   }
 
   file = g_file_new_for_uri (priv->uri);
@@ -134,25 +133,26 @@ gvfs_list_albums (SjMetadata *metadata, char **url, GError **error)
     track->duration = g_file_info_get_attribute_uint64 (info, "xattr::org.gnome.audio.duration");
     album->number++;
     g_object_unref (info);
+
+    album->tracks = g_list_append (album->tracks, track);
   }
   g_object_unref (e);
 
-  priv->albums = g_list_append (NULL, album);
+  albums = g_list_append (albums, album);
 
-  return priv->albums;
+  return albums;
 
 bail:
 
-  g_object_unref (file);
-  g_set_error (error, SJ_ERROR, SJ_ERROR_INTERNAL_ERROR, _("Cannot access CD: %s"), my_error->message);
-  g_error_free (my_error);
-  g_list_foreach (priv->albums, (GFunc)album_details_free, NULL);
-  g_list_free (priv->albums);
-  priv->albums = NULL;
+  if (file)
+    g_object_unref (file);
+  if (my_error) {
+    g_set_error (error, SJ_ERROR, SJ_ERROR_INTERNAL_ERROR, _("Cannot access CD: %s"), my_error->message);
+    g_error_free (my_error);
+  }
   return NULL;
 }
 
-
 /**
  * GObject methods
  */
@@ -190,8 +190,7 @@ sj_metadata_gvfs_set_property (GObject *object, guint property_id,
 
   switch (property_id) {
   case PROP_DEVICE:
-    if (priv->cdrom)
-      g_free (priv->cdrom);
+    g_free (priv->cdrom);
     priv->cdrom = g_value_dup_string (value);
     priv->uri = device_to_cdda_uri (priv->cdrom);
     break;
@@ -210,8 +209,6 @@ sj_metadata_gvfs_finalize (GObject *object)
   SjMetadataGvfsPrivate *priv = SJ_METADATA_GVFS (object)->priv;
   g_free (priv->cdrom);
   g_free (priv->uri);
-  g_list_foreach (priv->albums, (GFunc)album_details_free, NULL);
-  g_list_free (priv->albums);
 }
 
 static void



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