rhythmbox r5649 - in trunk: . plugins/daap plugins/generic-player shell sources



Author: jmatthew
Date: Wed Mar 26 12:09:49 2008
New Revision: 5649
URL: http://svn.gnome.org/viewvc/rhythmbox?rev=5649&view=rev

Log:
2008-03-26  Jonathan Matthew  <jonathan d14n org>

	* sources/rb-auto-playlist-source.c:
	(rb_auto_playlist_source_class_init),
	(rb_auto_playlist_source_set_property),
	(rb_auto_playlist_source_get_property):
	* sources/rb-browser-source.c: (rb_browser_source_class_init),
	(rb_browser_source_get_property):
	* sources/rb-source.c: (rb_source_class_init),
	(rb_source_get_property):
	* sources/rb-static-playlist-source.c:
	(rb_static_playlist_source_class_init),
	(rb_static_playlist_source_set_property),
	(rb_static_playlist_source_get_property):
	* sources/rb-static-playlist-source.h:
	Add new base-query-model property to RBSource to provide access to the
	unfiltered query model containing all entries for the source.
	Override this in a few places where that's actually different to the
	query-model property.
	
	* plugins/daap/rb-daap-share.c: (databases_cb):
	* plugins/generic-player/rb-generic-player-playlist-source.c:
	(save_playlist):
	* shell/rb-playlist-manager.c:
	(rb_playlist_manager_cmd_shuffle_playlist):
	Use base-query-model in a few places: sharing playlist contents,
	saving playlists to generic audio players, and shuffling playlists.
	Fixes #382980.


Modified:
   trunk/ChangeLog
   trunk/plugins/daap/rb-daap-share.c
   trunk/plugins/generic-player/rb-generic-player-playlist-source.c
   trunk/shell/rb-playlist-manager.c
   trunk/sources/rb-auto-playlist-source.c
   trunk/sources/rb-browser-source.c
   trunk/sources/rb-source.c
   trunk/sources/rb-static-playlist-source.c
   trunk/sources/rb-static-playlist-source.h

Modified: trunk/plugins/daap/rb-daap-share.c
==============================================================================
--- trunk/plugins/daap/rb-daap-share.c	(original)
+++ trunk/plugins/daap/rb-daap-share.c	Wed Mar 26 12:09:49 2008
@@ -1646,7 +1646,7 @@
 
 			mb.mlcl = rb_daap_structure_add (apso, RB_DAAP_CC_MLCL);
 
-			g_object_get (id->source, "query-model", &model, NULL);
+			g_object_get (id->source, "base-query-model", &model, NULL);
 			num_songs = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (model), NULL);
 
 			rb_daap_structure_add (apso, RB_DAAP_CC_MTCO, (gint32) num_songs);

Modified: trunk/plugins/generic-player/rb-generic-player-playlist-source.c
==============================================================================
--- trunk/plugins/generic-player/rb-generic-player-playlist-source.c	(original)
+++ trunk/plugins/generic-player/rb-generic-player-playlist-source.c	Wed Mar 26 12:09:49 2008
@@ -121,7 +121,7 @@
 
 	g_object_get (source,
 		      "name", &name,
-		      "query-model", &query_model,
+		      "base-query-model", &query_model,
 		      NULL);
 
 	/* if we don't already have a name for this playlist, make one now */

Modified: trunk/shell/rb-playlist-manager.c
==============================================================================
--- trunk/shell/rb-playlist-manager.c	(original)
+++ trunk/shell/rb-playlist-manager.c	Wed Mar 26 12:09:49 2008
@@ -1263,12 +1263,11 @@
 rb_playlist_manager_cmd_shuffle_playlist (GtkAction *action,
 					RBPlaylistManager *mgr)
 {
-	RBStaticPlaylistSource *psource;
+	RhythmDBQueryModel *base_model;
 
-	if (RB_IS_STATIC_PLAYLIST_SOURCE (mgr->priv->selected_source)) {
-		psource = RB_STATIC_PLAYLIST_SOURCE (mgr->priv->selected_source);
-		rb_static_playlist_source_shuffle_playlist (psource);
-	}
+	g_object_get (mgr->priv->selected_source, "base-query-model", &base_model, NULL);
+	rhythmdb_query_model_shuffle_entries (base_model);
+	g_object_unref (base_model);
 }
 
 static void

Modified: trunk/sources/rb-auto-playlist-source.c
==============================================================================
--- trunk/sources/rb-auto-playlist-source.c	(original)
+++ trunk/sources/rb-auto-playlist-source.c	Wed Mar 26 12:09:49 2008
@@ -58,6 +58,14 @@
 						      GObjectConstructParam *construct_properties);
 static void rb_auto_playlist_source_dispose (GObject *object);
 static void rb_auto_playlist_source_finalize (GObject *object);
+static void rb_auto_playlist_source_set_property (GObject *object,
+						  guint prop_id,
+						  const GValue *value,
+						  GParamSpec *pspec);
+static void rb_auto_playlist_source_get_property (GObject *object,
+						  guint prop_id,
+						  GValue *value,
+						  GParamSpec *pspec);
 
 /* source methods */
 static gboolean impl_show_popup (RBSource *source);
@@ -95,6 +103,12 @@
 	{ "AutoPlaylistSearchTitles", NULL, N_("Titles"), NULL, N_("Search titles"), 3 }
 };
 
+enum
+{
+	PROP_0,
+	PROP_BASE_QUERY_MODEL
+};
+
 #define AUTO_PLAYLIST_SOURCE_POPUP_PATH "/AutoPlaylistSourcePopup"
 
 typedef struct _RBAutoPlaylistSourcePrivate RBAutoPlaylistSourcePrivate;
@@ -135,6 +149,8 @@
 	object_class->constructor = rb_auto_playlist_source_constructor;
 	object_class->dispose = rb_auto_playlist_source_dispose;
 	object_class->finalize = rb_auto_playlist_source_finalize;
+	object_class->set_property = rb_auto_playlist_source_set_property;
+	object_class->get_property = rb_auto_playlist_source_get_property;
 
 	source_class->impl_can_cut = (RBSourceFeatureFunc) rb_false_function;
 	source_class->impl_can_delete = (RBSourceFeatureFunc) rb_false_function;
@@ -300,6 +316,39 @@
 					NULL));
 }
 
+static void
+rb_auto_playlist_source_set_property (GObject *object,
+				      guint prop_id,
+				      const GValue *value,
+				      GParamSpec *pspec)
+{
+	/*RBAutoPlaylistSourcePrivate *priv = RB_AUTO_PLAYLIST_SOURCE_GET_PRIVATE (source);*/
+
+	switch (prop_id) {
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+rb_auto_playlist_source_get_property (GObject *object,
+				      guint prop_id,
+				      GValue *value,
+				      GParamSpec *pspec)
+{
+	RBAutoPlaylistSourcePrivate *priv = RB_AUTO_PLAYLIST_SOURCE_GET_PRIVATE (object);
+
+	switch (prop_id) {
+	case PROP_BASE_QUERY_MODEL:
+		g_value_set_object (value, priv->cached_all_query);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
 /**
  * rb_auto_playlist_source_new_from_xml:
  * @shell: the #RBShell instance

Modified: trunk/sources/rb-browser-source.c
==============================================================================
--- trunk/sources/rb-browser-source.c	(original)
+++ trunk/sources/rb-browser-source.c	Wed Mar 26 12:09:49 2008
@@ -164,7 +164,8 @@
 enum
 {
 	PROP_0,
-	PROP_SORTING_KEY
+	PROP_SORTING_KEY,
+	PROP_BASE_QUERY_MODEL
 };
 
 G_DEFINE_ABSTRACT_TYPE (RBBrowserSource, rb_browser_source, RB_TYPE_SOURCE)
@@ -212,6 +213,10 @@
 							      NULL,
 							      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
+	g_object_class_override_property (object_class,
+					  PROP_BASE_QUERY_MODEL,
+					  "base-query-model");
+
 	g_type_class_add_private (klass, sizeof (RBBrowserSourcePrivate));
 }
 
@@ -526,6 +531,9 @@
 	case PROP_SORTING_KEY:
 		g_value_set_string (value, source->priv->sorting_key);
 		break;
+	case PROP_BASE_QUERY_MODEL:
+		g_value_set_object (value, source->priv->cached_all_query);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;

Modified: trunk/sources/rb-source.c
==============================================================================
--- trunk/sources/rb-source.c	(original)
+++ trunk/sources/rb-source.c	Wed Mar 26 12:09:49 2008
@@ -129,7 +129,8 @@
 	PROP_HIDDEN_WHEN_EMPTY,
 	PROP_SOURCE_GROUP,
 	PROP_ENTRY_TYPE,
-	PROP_PLUGIN
+	PROP_PLUGIN,
+	PROP_BASE_QUERY_MODEL
 };
 
 enum
@@ -315,6 +316,13 @@
 							      "RBPlugin instance for the plugin that created the source",
 							      RB_TYPE_PLUGIN,
 							      G_PARAM_READWRITE));
+	g_object_class_install_property (object_class,
+					 PROP_BASE_QUERY_MODEL,
+					 g_param_spec_object ("base-query-model",
+						 	      "RhythmDBQueryModel",
+							      "RhythmDBQueryModel object (unfiltered)",
+							      RHYTHMDB_TYPE_QUERY_MODEL,
+							      G_PARAM_READABLE));
 
 	/**
 	 * RBSource::deleted:
@@ -634,6 +642,12 @@
 	case PROP_PLUGIN:
 		g_value_set_object (value, priv->plugin);
 		break;
+	case PROP_BASE_QUERY_MODEL:
+		/* unless the subclass overrides it, just assume the
+		 * current query model is the base model.
+		 */
+		g_value_set_object (value, priv->query_model);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;

Modified: trunk/sources/rb-static-playlist-source.c
==============================================================================
--- trunk/sources/rb-static-playlist-source.c	(original)
+++ trunk/sources/rb-static-playlist-source.c	Wed Mar 26 12:09:49 2008
@@ -40,6 +40,14 @@
 						       GObjectConstructParam *construct_properties);
 static void rb_static_playlist_source_dispose (GObject *object);
 static void rb_static_playlist_source_finalize (GObject *object);
+static void rb_static_playlist_source_set_property (GObject *object,
+						    guint prop_id,
+						    const GValue *value,
+						    GParamSpec *pspec);
+static void rb_static_playlist_source_get_property (GObject *object,
+						    guint prop_id,
+						    GValue *value,
+						    GParamSpec *pspec);
 
 /* source methods */
 static GList * impl_cut (RBSource *source);
@@ -98,6 +106,12 @@
 	{ "StaticPlaylistSearchTitles", NULL, N_("Titles"), NULL, N_("Search titles"), 3 }
 };
 
+enum
+{
+	PROP_0,
+	PROP_BASE_QUERY_MODEL
+};
+
 G_DEFINE_TYPE (RBStaticPlaylistSource, rb_static_playlist_source, RB_TYPE_PLAYLIST_SOURCE)
 #define RB_STATIC_PLAYLIST_SOURCE_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), \
 								RB_TYPE_STATIC_PLAYLIST_SOURCE, \
@@ -131,6 +145,8 @@
 	object_class->constructor = rb_static_playlist_source_constructor;
 	object_class->dispose = rb_static_playlist_source_dispose;
 	object_class->finalize = rb_static_playlist_source_finalize;
+	object_class->set_property = rb_static_playlist_source_set_property;
+	object_class->get_property = rb_static_playlist_source_get_property;
 
 	source_class->impl_can_cut = (RBSourceFeatureFunc) rb_true_function;
 	source_class->impl_can_paste = (RBSourceFeatureFunc) rb_true_function;
@@ -150,6 +166,10 @@
 
 	playlist_class->impl_save_contents_to_xml = impl_save_contents_to_xml;
 
+	g_object_class_override_property (object_class,
+					  PROP_BASE_QUERY_MODEL,
+					  "base-query-model");
+
 	g_type_class_add_private (klass, sizeof (RBStaticPlaylistSourcePrivate));
 }
 
@@ -311,6 +331,39 @@
 					NULL));
 }
 
+static void
+rb_static_playlist_source_set_property (GObject *object,
+					guint prop_id,
+					const GValue *value,
+					GParamSpec *pspec)
+{
+	/*RBStaticPlaylistSourcePrivate *priv = RB_STATIC_PLAYLIST_SOURCE_GET_PRIVATE (object);*/
+
+	switch (prop_id) {
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
+static void
+rb_static_playlist_source_get_property (GObject *object,
+					guint prop_id,
+					GValue *value,
+					GParamSpec *pspec)
+{
+	RBStaticPlaylistSourcePrivate *priv = RB_STATIC_PLAYLIST_SOURCE_GET_PRIVATE (object);
+
+	switch (prop_id) {
+	case PROP_BASE_QUERY_MODEL:
+		g_value_set_object (value, priv->base_model);
+		break;
+	default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+		break;
+	}
+}
+
 void
 rb_static_playlist_source_load_from_xml (RBStaticPlaylistSource *source, xmlNodePtr node)
 {
@@ -884,12 +937,3 @@
 	return 0;
 }
 
-void
-rb_static_playlist_source_shuffle_playlist(RBStaticPlaylistSource *source) 
-{
-	RBStaticPlaylistSourcePrivate *priv = RB_STATIC_PLAYLIST_SOURCE_GET_PRIVATE (source);
-
-	rhythmdb_query_model_shuffle_entries (priv->base_model);
-
-	rb_playlist_source_mark_dirty (RB_PLAYLIST_SOURCE (source));
-}

Modified: trunk/sources/rb-static-playlist-source.h
==============================================================================
--- trunk/sources/rb-static-playlist-source.h	(original)
+++ trunk/sources/rb-static-playlist-source.h	Wed Mar 26 12:09:49 2008
@@ -79,7 +79,7 @@
 void		rb_static_playlist_source_move_entry	(RBStaticPlaylistSource *source,
 							 RhythmDBEntry *entry,
 							 gint index);
-void		rb_static_playlist_source_shuffle_playlist (RBStaticPlaylistSource *source);
+
 G_END_DECLS
 
 #endif /* __RB_STATIC_PLAYLIST_SOURCE_H */



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