? =
? attachment.cgi?id=61108
? attachment.cgi?id=61108.1
? attachment.cgi?id=61476
? attachment.cgi?id=61476.1
? attachment.cgi?id=61539
? attachment.cgi?id=61735
? attachment.cgi?id=62718
? bug-23368-integrated-ripping.diff
? burner.Diff
? burner.diff
? burner.diuff
? compile
? conf11657.file
? entry-type.diff
? ipod-todo.txt
? ipod-write.diff
? ipod.diff
? malloc-overflows.diff
? patch.diff
? playbin.diff
? playlist.diff
? py-compile
? queue-set.diff
? rb-ipod-source-libgpod.diff
? rb-ipod-source.c
? rb-recorder-gst.diff
? rhythmbox-audioscrobbler-libsoup-new-files.tar.bz2
? rhythmbox-gpod.diff
? treeview.diff
? backends/Makefile
? backends/Makefile.in
? backends/gstreamer/Makefile
? backends/gstreamer/Makefile.in
? bindings/Makefile
? bindings/Makefile.in
? bindings/python/Makefile
? bindings/python/Makefile.in
? help/es/.xml2po.mo
? help/es/rhythmbox.xml
? metadata/rhythmbox-metadata
? metadata/test-metadata
? plugins/Makefile
? plugins/Makefile.in
? plugins/audioscrobbler/Makefile
? plugins/audioscrobbler/Makefile.in
? plugins/audioscrobbler/audioscrobbler.rb-plugin
? plugins/lirc/Makefile
? plugins/lirc/Makefile.in
? plugins/lirc/lirc.rb-plugin
? plugins/pythonconsole/Makefile
? plugins/pythonconsole/Makefile.in
? plugins/sample/Makefile
? plugins/sample/Makefile.in
? plugins/sample-python/Makefile
? plugins/sample-python/Makefile.in
? remote/dbus/rb-remote-dbus.loT
? shell/rb-playlist-manager-glue.h
? sources/rb-audioscrobbler.c
? sources/rb-library-source.diff
Index: configure.ac
===================================================================
RCS file: /cvs/gnome/rhythmbox/configure.ac,v
retrieving revision 1.225
diff -u -r1.225 configure.ac
--- configure.ac	2 Apr 2006 05:22:18 -0000	1.225
+++ configure.ac	5 Apr 2006 19:58:56 -0000
@@ -704,14 +704,6 @@
 	done
 	unset option
 
-	SAVE_CFLAGS="$CFLAGS"
-	CFLAGS="$CFLAGS -Wno-error"
-	AC_TRY_COMPILE([], [],
-		WNOERROR_CFALGS="-Wno-error",
-		WNOERROR_CFALGS="")
-	AC_SUBST(WNOERROR_CFLAGS)
-	unset SAVE_CFLAGS
-	unset has_wnoerror
 else
 	AC_MSG_RESULT(no)
 fi
Index: daapsharing/rb-daap-connection.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/daapsharing/rb-daap-connection.c,v
retrieving revision 1.21
diff -u -r1.21 rb-daap-connection.c
--- daapsharing/rb-daap-connection.c	27 Mar 2006 11:57:50 -0000	1.21
+++ daapsharing/rb-daap-connection.c	5 Apr 2006 19:58:56 -0000
@@ -654,11 +654,11 @@
 							       G_PARAM_READWRITE));
 	g_object_class_install_property (object_class,
 					 PROP_ENTRY_TYPE,
-					 g_param_spec_uint ("entry-type",
-							    "entry type",
-							    "RhythmDBEntryType",
-							    0, G_MAXINT, 0,
-							    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+					 g_param_spec_pointer ("entry-type",
+							       "entry type",
+							       "RhythmDBEntryType",
+							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
 	g_object_class_install_property (object_class,
 					 PROP_PASSWORD_PROTECTED,
 					 g_param_spec_boolean ("password-protected",
@@ -723,6 +723,7 @@
 	connection->priv = RB_DAAP_CONNECTION_GET_PRIVATE (connection);
 
 	connection->priv->username = g_strdup_printf ("Rhythmbox_%s", VERSION);
+	connection->priv->db_type = RHYTHMDB_ENTRY_TYPE_INVALID;
 }
 
 
@@ -1944,7 +1945,7 @@
 		priv->password_protected = g_value_get_boolean (value);
 		break;
 	case PROP_ENTRY_TYPE:
-		priv->db_type = g_value_get_uint (value);
+		priv->db_type = g_value_get_pointer (value);
 		break;
 	case PROP_CALLBACK:
 		priv->callback = g_value_get_pointer (value);
@@ -1987,7 +1988,7 @@
 		g_value_set_pointer (value, priv->callback_user_data);
 		break;
 	case PROP_ENTRY_TYPE:
-		g_value_set_uint (value, priv->db_type);
+		g_value_set_pointer (value, priv->db_type);
 		break;
 	case PROP_PASSWORD_PROTECTED:
 		g_value_set_boolean (value, priv->password_protected);
Index: daapsharing/rb-daap-share.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/daapsharing/rb-daap-share.c,v
retrieving revision 1.19
diff -u -r1.19 rb-daap-share.c
--- daapsharing/rb-daap-share.c	18 Feb 2006 13:12:02 -0000	1.19
+++ daapsharing/rb-daap-share.c	5 Apr 2006 19:58:57 -0000
@@ -1472,7 +1472,7 @@
 		   RhythmDBEntry *entry,
 		   RBDAAPShare *share)
 {
-	RhythmDBEntryType type = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE);
+	RhythmDBEntryType type = rhythmdb_entry_get_entry_type (entry);
 	gboolean hidden = rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN);
 
 	if (type == rhythmdb_entry_song_get_type () && !hidden && g_hash_table_lookup (share->priv->entry_to_id, entry) == NULL) {
Index: podcast/rb-podcast-manager.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/podcast/rb-podcast-manager.c,v
retrieving revision 1.39
diff -u -r1.39 rb-podcast-manager.c
--- podcast/rb-podcast-manager.c	4 Apr 2006 21:15:53 -0000	1.39
+++ podcast/rb-podcast-manager.c	5 Apr 2006 19:58:57 -0000
@@ -435,9 +435,8 @@
 {
 	gulong status;
 	const gchar *file_name;
-	gulong type;
+	RhythmDBEntryType type = rhythmdb_entry_get_entry_type (entry);
 
-	type = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE);
 	g_assert (type == RHYTHMDB_ENTRY_TYPE_PODCAST_POST);
 
 	status = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_STATUS);
@@ -698,7 +697,7 @@
 
 	RhythmDBEntry *entry = rhythmdb_entry_lookup_by_location (pd->priv->db, valid_url);
 	if (entry) {
-		if (rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE) != RHYTHMDB_ENTRY_TYPE_PODCAST_FEED) {
+		if (rhythmdb_entry_get_entry_type (entry) != RHYTHMDB_ENTRY_TYPE_PODCAST_FEED) {
 			/* added as something else, probably iradio */
 			rb_error_dialog (NULL, _("URL already added"),
 					 _("The URL \"%s\" has already been added as a radio station. "
@@ -901,8 +900,8 @@
 static void
 rb_podcast_manager_db_entry_added_cb (RBPodcastManager *pd, RhythmDBEntry *entry)
 {
+	RhythmDBEntryType type = rhythmdb_entry_get_entry_type (entry);
 
-	gulong type = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE);
 	if (type != RHYTHMDB_ENTRY_TYPE_PODCAST_POST)
 		return;
 	
@@ -1211,8 +1210,7 @@
 rb_podcast_manager_db_entry_deleted_cb (RBPodcastManager *pd,
 					RhythmDBEntry *entry)
 {
-
-	gulong type = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE);
+	RhythmDBEntryType type = rhythmdb_entry_get_entry_type (entry);
 
 	if ((type == RHYTHMDB_ENTRY_TYPE_PODCAST_POST) && (pd->priv->remove_files == TRUE)) {
 		const char *file_name;
@@ -1383,7 +1381,7 @@
 	/* processing podcast head */
 	entry = rhythmdb_entry_lookup_by_location (db, (gchar *)data->url);
 	if (entry) {
-		if (rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE) != RHYTHMDB_ENTRY_TYPE_PODCAST_FEED)
+		if (rhythmdb_entry_get_entry_type (entry) != RHYTHMDB_ENTRY_TYPE_PODCAST_FEED)
 			return;
 			
 		rb_debug ("Head found");
Index: rhythmdb/rhythmdb-private.h
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb-private.h,v
retrieving revision 1.5
diff -u -r1.5 rhythmdb-private.h
--- rhythmdb/rhythmdb-private.h	29 Mar 2006 10:12:28 -0000	1.5
+++ rhythmdb/rhythmdb-private.h	5 Apr 2006 19:58:57 -0000
@@ -54,7 +54,7 @@
 	gboolean inserted;
 	gint refcount;
 	void *data;
-	gulong type;
+	RhythmDBEntryType type;
 	
 	/* metadata */
 	RBRefString *title;
@@ -98,6 +98,9 @@
 
 	/*Podcast*/
 	RhythmDBPodcastFields *podcast;
+
+        /* Source-specific data */
+        gpointer custom_data;
 };
 
 G_END_DECLS
Index: rhythmdb/rhythmdb-tree.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb-tree.c,v
retrieving revision 1.100
diff -u -r1.100 rhythmdb-tree.c
--- rhythmdb/rhythmdb-tree.c	19 Mar 2006 11:30:39 -0000	1.100
+++ rhythmdb/rhythmdb-tree.c	5 Apr 2006 19:58:57 -0000
@@ -260,7 +260,7 @@
 	case RHYTHMDB_TREE_PARSER_STATE_RHYTHMDB:
 	{
 		if (!strcmp (name, "entry")) {
-			RhythmDBEntryType type = -1;
+			RhythmDBEntryType type = RHYTHMDB_ENTRY_TYPE_INVALID;
 			gboolean type_set = FALSE;
 			for (; *attrs; attrs +=2) {
 				if (!strcmp (*attrs, "type")) {
@@ -528,6 +528,7 @@
 		case RHYTHMDB_PROP_LAST_SEEN_STR:
 		case RHYTHMDB_PROP_SEARCH_MATCH:
 		case RHYTHMDB_PROP_YEAR:
+		case RHYTHMDB_PROP_CUSTOM_DATA:
 		case RHYTHMDB_NUM_PROPERTIES:
 			g_assert_not_reached ();
 			break;
@@ -896,6 +897,7 @@
 		case RHYTHMDB_PROP_LAST_SEEN_STR:
 		case RHYTHMDB_PROP_SEARCH_MATCH:
 		case RHYTHMDB_PROP_YEAR:
+		case RHYTHMDB_PROP_CUSTOM_DATA:
 		case RHYTHMDB_NUM_PROPERTIES:
 			break;
 		}
@@ -1432,7 +1434,13 @@
 				    g_value_get_double (data->val)) \
 					return FALSE; \
 				break; \
+                        case G_TYPE_POINTER: \
+                                if (rhythmdb_entry_get_pointer (entry, data->propid) OP \
+                                    g_value_get_pointer (data->val)) \
+                                        return FALSE; \
+                                break; \
 			default: \
+                                g_warning ("Unexpected type: %s", g_type_name (rhythmdb_get_property_type (db, data->propid))); \
 				g_assert_not_reached (); \
 			}
 
@@ -1791,7 +1799,7 @@
 		
 		g_ptr_array_remove_index_fast (query, type_query_idx);
 		
-		etype = g_value_get_ulong (qdata->val);
+		etype = g_value_get_pointer (qdata->val);
 		genres = get_genres_hash_for_type (db, etype);
 		if (genres != NULL) {
 			conjunctive_query_genre (db, genres, traversal_data);
Index: rhythmdb/rhythmdb.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb.c,v
retrieving revision 1.196
diff -u -r1.196 rhythmdb.c
--- rhythmdb/rhythmdb.c	31 Mar 2006 09:18:46 -0000	1.196
+++ rhythmdb/rhythmdb.c	5 Apr 2006 19:58:57 -0000
@@ -73,6 +73,10 @@
 
 GType rhythmdb_property_type_map[RHYTHMDB_NUM_PROPERTIES];
 
+struct RhythmDBEntryType_ {
+	void (*custom_data_destroy_func) (gpointer data);
+};
+
 struct RhythmDBPrivate
 {
 	char *name;
@@ -863,7 +867,7 @@
 static void
 sync_entry_changed (RhythmDBEntry *entry, GSList *changes, RhythmDB *db)
 {
-	if (rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE) == RHYTHMDB_ENTRY_TYPE_SONG) {
+	if (rhythmdb_entry_get_entry_type (entry) == RHYTHMDB_ENTRY_TYPE_SONG) {
 		GSList *t;
 		for (t = changes; t; t = t->next) {
 			RBMetaDataField field;
@@ -914,7 +918,7 @@
 		if (!g_str_has_prefix (uri, "file://"))
 			entry->hidden = TRUE;
 
-		queue_stat_uri (uri, data->db, -1);
+		queue_stat_uri (uri, data->db, RHYTHMDB_ENTRY_TYPE_INVALID);
 	}
 
 	data->entries = g_list_prepend (data->entries, entry);
@@ -1197,6 +1201,10 @@
 		g_free (entry->podcast);
 		entry->podcast = NULL;
 	}
+
+	if ((entry->custom_data) && (entry->type->custom_data_destroy_func)) {
+		entry->type->custom_data_destroy_func (entry->custom_data);
+	}
 }
 
 static void
@@ -1566,7 +1574,7 @@
 	if (entry) {
 		time_t mtime = (time_t) entry->mtime;
 
-		if ((event->entry_type != -1) && (entry->type != event->entry_type))
+		if ((event->entry_type != RHYTHMDB_ENTRY_TYPE_INVALID) && (entry->type != event->entry_type))
 			g_warning ("attempt to use same location in multiple entry types");
 
 		if (entry->type == RHYTHMDB_ENTRY_TYPE_IGNORE)
@@ -1669,7 +1677,7 @@
 	
 	entry = rhythmdb_entry_lookup_by_location (db, event->real_uri);
 	if (entry) {
-		RhythmDBEntryType entry_type = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE);
+		RhythmDBEntryType entry_type = rhythmdb_entry_get_entry_type (entry);
 		if (entry_type != RHYTHMDB_ENTRY_TYPE_IMPORT_ERROR &&
 		    entry_type != RHYTHMDB_ENTRY_TYPE_IGNORE) {
 			/* FIXME we've successfully read this file before.. so what should we do? */
@@ -1758,7 +1766,7 @@
 	entry = rhythmdb_entry_lookup_by_location (db, event->real_uri);
 
 	if (entry) {
-		if (rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE) != event->entry_type) {
+		if (rhythmdb_entry_get_entry_type (entry) != event->entry_type){
 			/* switching from IGNORE to SONG or vice versa, recreate the entry */
 			rhythmdb_entry_delete (db, entry);
 			rhythmdb_add_timeout_commit (db, FALSE);
@@ -1767,7 +1775,7 @@
 	}
 	
 	if (!entry) {
-		if (event->entry_type == -1)
+		if (event->entry_type == RHYTHMDB_ENTRY_TYPE_INVALID)
 			event->entry_type = RHYTHMDB_ENTRY_TYPE_SONG;
 		entry = rhythmdb_entry_new (db, event->entry_type, event->real_uri);
 		if (entry == NULL) {
@@ -1795,7 +1803,7 @@
 		g_value_unset (&value);
 	}
 
-	if ((event->entry_type != -1) && (entry->type != event->entry_type))
+	if ((event->entry_type != RHYTHMDB_ENTRY_TYPE_INVALID) && (entry->type != event->entry_type))
 		g_warning ("attempt to use same location in multiple entry types");
 
 	/* mtime */
@@ -1855,7 +1863,7 @@
 	action = g_new0 (RhythmDBAction, 1);
 	action->type = RHYTHMDB_ACTION_LOAD;
 	action->uri = g_strdup (event->uri);
-	action->entry_type = -1;
+	action->entry_type = RHYTHMDB_ENTRY_TYPE_INVALID;
 	g_async_queue_push (db->priv->action_queue, action);
 }
 
@@ -2313,7 +2321,7 @@
 				load_action = g_new0 (RhythmDBAction, 1);
 				load_action->type = RHYTHMDB_ACTION_LOAD;
 				load_action->uri = g_strdup (action->uri);
-				load_action->entry_type = -1;
+				load_action->entry_type = RHYTHMDB_ENTRY_TYPE_INVALID;
 				g_async_queue_push (db->priv->action_queue, load_action);
 				
 				data = g_new0 (RhythmDBSaveErrorData, 1);
@@ -2357,7 +2365,7 @@
 void
 rhythmdb_add_uri (RhythmDB *db, const char *uri)
 {
-	rhythmdb_add_uri_with_type (db, uri, -1);
+	rhythmdb_add_uri_with_type (db, uri, RHYTHMDB_ENTRY_TYPE_INVALID);
 }
 
 void
@@ -2820,6 +2828,9 @@
 		case RHYTHMDB_PROP_POST_TIME:
 			entry->podcast->post_time = g_value_get_ulong (value);
 			break;	
+		case RHYTHMDB_PROP_CUSTOM_DATA:
+			entry->custom_data = g_value_get_pointer (value);
+			break;
 		case RHYTHMDB_NUM_PROPERTIES:
 			g_assert_not_reached ();
 			break;
@@ -3297,6 +3308,40 @@
 	return -1;
 }
 
+static char *
+entry_type_to_string (RhythmDBEntryType type)
+{
+	if (type == RHYTHMDB_ENTRY_TYPE_SONG) {
+		return g_strdup ("0");
+	} else if (type == RHYTHMDB_ENTRY_TYPE_IRADIO_STATION) {
+		return g_strdup ("1");
+	} else if (type == RHYTHMDB_ENTRY_TYPE_PODCAST_POST) {
+		return g_strdup ("2");
+	} else if (type == RHYTHMDB_ENTRY_TYPE_PODCAST_FEED) {
+		return g_strdup ("3");
+	}
+	g_assert_not_reached ();
+}
+
+static RhythmDBEntryType
+entry_type_from_uint (unsigned int type) 
+{
+	switch (type) {
+	case 0:
+		return RHYTHMDB_ENTRY_TYPE_SONG;
+	case 1:
+		return RHYTHMDB_ENTRY_TYPE_IRADIO_STATION;
+	case 2:
+		return RHYTHMDB_ENTRY_TYPE_PODCAST_POST;
+	case 3:
+		return RHYTHMDB_ENTRY_TYPE_PODCAST_FEED;
+	default:
+		g_assert_not_reached ();
+	}
+
+	return RHYTHMDB_ENTRY_TYPE_INVALID;
+}
+
 static void
 write_encoded_gvalue (xmlNodePtr node,
 		      GValue *val)
@@ -3329,6 +3374,9 @@
 	case G_TYPE_DOUBLE:
 		strval = g_strdup_printf ("%f", g_value_get_double (val));
 		break;
+	case G_TYPE_POINTER:
+		strval = entry_type_to_string (g_value_get_pointer (val));
+		break;
 	default:
 		g_assert_not_reached ();
 		strval = NULL;
@@ -3369,7 +3417,25 @@
 	case G_TYPE_DOUBLE:
 		g_value_set_double (val, g_ascii_strtod (content, NULL));
 		break;
+	case G_TYPE_POINTER:
+		if (propid == RHYTHMDB_PROP_TYPE) {
+			RhythmDBEntryType entry_type;
+			entry_type = entry_type_from_uint (g_ascii_strtoull (content, NULL, 10));
+			if (entry_type != RHYTHMDB_ENTRY_TYPE_INVALID) {
+				g_value_set_pointer (val, entry_type);
+				break;
+			} else {
+				g_warning ("Unexpected entry type");
+				/* Fall through */
+			}
+		}
+		/* Falling through on purpose to get an assert for unexpected 
+		 * cases 
+		 */
 	default:
+		g_warning ("Attempt to read '%s' of unhandled type %s", 
+			   rhythmdb_nice_elt_name_from_propid (db, propid),
+			   g_type_name (G_VALUE_TYPE (val)));
 		g_assert_not_reached ();
 		break;
 	}
@@ -3788,7 +3854,7 @@
 			* parenthesis.
 			* Finally, there is the XML element name in brackets.
 			*/
-			ENUM_ENTRY (RHYTHMDB_PROP_TYPE, "Type of entry (gulong) [type]"),
+			ENUM_ENTRY (RHYTHMDB_PROP_TYPE, "Type of entry (gpointer) [type]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_TITLE, "Title (gchararray) [title]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_GENRE, "Genre (gchararray) [genre]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_ARTIST, "Artist (gchararray) [artist]"),
@@ -3838,6 +3904,7 @@
 			ENUM_ENTRY (RHYTHMDB_PROP_COPYRIGHT, "Podcast copyright (gchararray) [copyright]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_IMAGE, "Podcast image(gchararray) [image]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_POST_TIME, "Podcast time of post (gulong) [post-time]"),
+			ENUM_ENTRY (RHYTHMDB_PROP_CUSTOM_DATA, "Opaque pointer to store entry-type or source specific data (gpointer) [custom-data]"),
 			{ 0, 0, 0 }
 		};
 		g_assert ((sizeof (values) / sizeof (values[0]) - 1) == RHYTHMDB_NUM_PROPERTIES);
@@ -3964,8 +4031,6 @@
 	return ret;
 }
 
-static gint last_entry_type = 0;
-
 /**
  * rhythmdb_entry_register_type:
  *
@@ -3977,7 +4042,7 @@
 RhythmDBEntryType
 rhythmdb_entry_register_type (void)
 {
-	return g_atomic_int_exchange_and_add (&last_entry_type, 1);		
+	return g_new0(struct RhythmDBEntryType_, 1);
 }
 
 static GStaticMutex entry_type_mutex = G_STATIC_MUTEX_INIT;
@@ -3985,10 +4050,10 @@
 RhythmDBEntryType 
 rhythmdb_entry_song_get_type (void) 
 {
-	static RhythmDBEntryType song_type = -1;
+	static RhythmDBEntryType song_type = RHYTHMDB_ENTRY_TYPE_INVALID;
 
 	g_static_mutex_lock (&entry_type_mutex);
-	if (song_type == -1) {
+	if (song_type == RHYTHMDB_ENTRY_TYPE_INVALID) {
 		song_type = rhythmdb_entry_register_type ();
 	}
 	g_static_mutex_unlock (&entry_type_mutex);
@@ -3999,10 +4064,10 @@
 RhythmDBEntryType 
 rhythmdb_entry_ignore_get_type (void) 
 {
-	static RhythmDBEntryType ignore_type = -1;
+	static RhythmDBEntryType ignore_type = RHYTHMDB_ENTRY_TYPE_INVALID;
 
 	g_static_mutex_lock (&entry_type_mutex);
-	if (ignore_type == -1) {
+	if (ignore_type == RHYTHMDB_ENTRY_TYPE_INVALID) {
 		ignore_type = rhythmdb_entry_register_type ();
 	}
 	g_static_mutex_unlock (&entry_type_mutex);
@@ -4012,10 +4077,10 @@
 
 RhythmDBEntryType rhythmdb_entry_iradio_get_type (void) 
 {
-	static RhythmDBEntryType iradio_type = -1;
+	static RhythmDBEntryType iradio_type = RHYTHMDB_ENTRY_TYPE_INVALID;
        
 	g_static_mutex_lock (&entry_type_mutex);
-	if (iradio_type == -1) {
+	if (iradio_type == RHYTHMDB_ENTRY_TYPE_INVALID) {
 		iradio_type = rhythmdb_entry_register_type ();
 	}
 	g_static_mutex_unlock (&entry_type_mutex);
@@ -4025,10 +4090,10 @@
 
 RhythmDBEntryType rhythmdb_entry_podcast_post_get_type (void) 
 {
-	static RhythmDBEntryType podcast_post_type = -1;
+	static RhythmDBEntryType podcast_post_type = RHYTHMDB_ENTRY_TYPE_INVALID;
        
 	g_static_mutex_lock (&entry_type_mutex);
-	if (podcast_post_type == -1) {
+	if (podcast_post_type == RHYTHMDB_ENTRY_TYPE_INVALID) {
 		podcast_post_type = rhythmdb_entry_register_type ();
 	}
 	g_static_mutex_unlock (&entry_type_mutex);
@@ -4038,10 +4103,10 @@
 
 RhythmDBEntryType rhythmdb_entry_podcast_feed_get_type (void) 
 {
-	static RhythmDBEntryType podcast_feed_type = -1;
+	static RhythmDBEntryType podcast_feed_type = RHYTHMDB_ENTRY_TYPE_INVALID;
        
 	g_static_mutex_lock (&entry_type_mutex);
-	if (podcast_feed_type == -1) {
+	if (podcast_feed_type == RHYTHMDB_ENTRY_TYPE_INVALID) {
 		podcast_feed_type = rhythmdb_entry_register_type ();
 	}
 	g_static_mutex_unlock (&entry_type_mutex);
@@ -4051,10 +4116,10 @@
 
 RhythmDBEntryType rhythmdb_entry_import_error_get_type (void) 
 {
-	static RhythmDBEntryType import_error_type = -1;
+	static RhythmDBEntryType import_error_type = RHYTHMDB_ENTRY_TYPE_INVALID;
        
 	g_static_mutex_lock (&entry_type_mutex);
-	if (import_error_type == -1) {
+	if (import_error_type == RHYTHMDB_ENTRY_TYPE_INVALID) {
 		import_error_type = rhythmdb_entry_register_type ();
 	}
 	g_static_mutex_unlock (&entry_type_mutex);
@@ -4602,12 +4667,30 @@
 	}
 }
 
-gulong
-rhythmdb_entry_get_ulong (RhythmDBEntry *entry, RhythmDBPropType propid)
+RhythmDBEntryType
+rhythmdb_entry_get_entry_type (RhythmDBEntry *entry)
+{
+	return entry->type;
+}
+
+gpointer
+rhythmdb_entry_get_pointer (RhythmDBEntry *entry, RhythmDBPropType propid)
 {
 	switch (propid) {
 	case RHYTHMDB_PROP_TYPE:
 		return entry->type;
+	case RHYTHMDB_PROP_CUSTOM_DATA:
+		return entry->custom_data;
+	default:
+		g_assert_not_reached ();
+		return NULL;
+	}
+}
+
+gulong
+rhythmdb_entry_get_ulong (RhythmDBEntry *entry, RhythmDBPropType propid)
+{
+	switch (propid) {
 	case RHYTHMDB_PROP_TRACK_NUMBER:
 		return entry->tracknum;
 	case RHYTHMDB_PROP_DISC_NUMBER:
Index: rhythmdb/rhythmdb.h
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb.h,v
retrieving revision 1.77
diff -u -r1.77 rhythmdb.h
--- rhythmdb/rhythmdb.h	31 Mar 2006 09:18:46 -0000	1.77
+++ rhythmdb/rhythmdb.h	5 Apr 2006 19:58:57 -0000
@@ -53,8 +53,7 @@
 #define RHYTHMDB_QUERY(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), RHYTHMDB_TYPE_QUERY, RhythmDBQuery))
 #define RHYTHMDB_IS_QUERY(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), RHYTHMDB_TYPE_QUERY))
 
-
-typedef gint32 RhythmDBEntryType;
+typedef struct RhythmDBEntryType_* RhythmDBEntryType;
 
 #define RHYTHMDB_ENTRY_TYPE_SONG (rhythmdb_entry_song_get_type ())
 #define RHYTHMDB_ENTRY_TYPE_IRADIO_STATION (rhythmdb_entry_iradio_get_type ())
@@ -62,6 +61,7 @@
 #define RHYTHMDB_ENTRY_TYPE_PODCAST_FEED (rhythmdb_entry_podcast_feed_get_type ())
 #define RHYTHMDB_ENTRY_TYPE_IMPORT_ERROR (rhythmdb_entry_import_error_get_type ())
 #define RHYTHMDB_ENTRY_TYPE_IGNORE (rhythmdb_entry_ignore_get_type ())
+#define RHYTHMDB_ENTRY_TYPE_INVALID (GINT_TO_POINTER (-1))
 
 typedef enum
 {
@@ -145,6 +145,9 @@
 	RHYTHMDB_PROP_IMAGE,
 	RHYTHMDB_PROP_POST_TIME,
 	
+        /* Source specific data */
+        RHYTHMDB_PROP_CUSTOM_DATA,
+
 	RHYTHMDB_NUM_PROPERTIES
 } RhythmDBPropType;
 
@@ -178,9 +181,13 @@
 const char *rhythmdb_entry_get_string	(RhythmDBEntry *entry, RhythmDBPropType propid);
 char *rhythmdb_entry_dup_string	(RhythmDBEntry *entry, RhythmDBPropType propid);
 gboolean rhythmdb_entry_get_boolean	(RhythmDBEntry *entry, RhythmDBPropType propid);
-guint64 rhythmdb_entry_get_uint64		(RhythmDBEntry *entry, RhythmDBPropType propid);
+guint64 rhythmdb_entry_get_uint64	(RhythmDBEntry *entry, RhythmDBPropType propid);
 gulong rhythmdb_entry_get_ulong		(RhythmDBEntry *entry, RhythmDBPropType propid);
-double rhythmdb_entry_get_double		(RhythmDBEntry *entry, RhythmDBPropType propid);
+double rhythmdb_entry_get_double	(RhythmDBEntry *entry, RhythmDBPropType propid);
+gpointer rhythmdb_entry_get_pointer     (RhythmDBEntry *entry, RhythmDBPropType propid);
+
+RhythmDBEntryType rhythmdb_entry_get_entry_type (RhythmDBEntry *entry);
+
 
 
 typedef enum
Index: shell/rb-audioscrobbler.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/shell/rb-audioscrobbler.c,v
retrieving revision 1.16
diff -u -r1.16 rb-audioscrobbler.c
--- shell/rb-audioscrobbler.c	25 Mar 2006 03:37:22 -0000	1.16
+++ shell/rb-audioscrobbler.c	5 Apr 2006 19:58:57 -0000
@@ -933,7 +933,7 @@
 				   RhythmDBEntry *entry,
 				   RBAudioscrobbler *audioscrobbler)
 {
-	gulong type;
+	RhythmDBEntryType type;
 	gchar *old_artist;
 	gchar *old_album;
 	gchar *old_title;
@@ -941,7 +941,7 @@
 	if (entry == NULL)
 		return;
 
-	type = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE);
+	type = rhythmdb_entry_get_entry_type (entry);
 	if (type == RHYTHMDB_ENTRY_TYPE_IRADIO_STATION ||
 	    type == RHYTHMDB_ENTRY_TYPE_PODCAST_POST ||
 	    type == RHYTHMDB_ENTRY_TYPE_PODCAST_FEED)
Index: shell/rb-playlist-manager.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/shell/rb-playlist-manager.c,v
retrieving revision 1.94
diff -u -r1.94 rb-playlist-manager.c
--- shell/rb-playlist-manager.c	3 Mar 2006 00:33:37 -0000	1.94
+++ shell/rb-playlist-manager.c	5 Apr 2006 19:58:58 -0000
@@ -588,12 +588,12 @@
 			  const char *genre, RBPlaylistManager *mgr)
 {
 	char *uri = rb_canonicalise_uri (uri_maybe);
-	gint entry_type;
+	RhythmDBEntryType entry_type;
 
 	g_return_if_fail (uri != NULL);
 
 	entry_type = rb_shell_guess_type_for_uri (mgr->priv->shell, uri);
-	if (entry_type < 0) {
+	if (entry_type == RHYTHMDB_ENTRY_TYPE_INVALID) {
 		return;
 	}
 
Index: shell/rb-shell-player.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/shell/rb-shell-player.c,v
retrieving revision 1.232
diff -u -r1.232 rb-shell-player.c
--- shell/rb-shell-player.c	3 Apr 2006 21:31:08 -0000	1.232
+++ shell/rb-shell-player.c	5 Apr 2006 19:58:58 -0000
@@ -1003,10 +1003,10 @@
 static gboolean
 rb_shell_player_open_entry (RBShellPlayer *player, RhythmDBEntry *entry, GError **error)
 {
-	gulong type;
+	RhythmDBEntryType type;
 	const char *location;
 
-	type = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE);
+	type = rhythmdb_entry_get_entry_type (entry);
 	if (type == RHYTHMDB_ENTRY_TYPE_PODCAST_POST)
 		location = rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_MOUNTPOINT);
 	else
@@ -1853,6 +1853,7 @@
 	RhythmDBEntry *prev_entry = NULL;
 	GError *error = NULL;
 	gboolean source_set = FALSE;
+	RhythmDBEntryType entry_type;
 
 	g_return_if_fail (entry != NULL);
 
@@ -1862,12 +1863,14 @@
 	if (rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN))
 		return;
 
+	entry_type = rhythmdb_entry_get_entry_type (entry);
+
 	/* don't play import error entries */
-	if (rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE) == RHYTHMDB_ENTRY_TYPE_IMPORT_ERROR)
+	if (entry_type == RHYTHMDB_ENTRY_TYPE_IMPORT_ERROR)
 		return;
 
 	/* ensure the podcast has been downloaded */
-	if (rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE) == RHYTHMDB_ENTRY_TYPE_PODCAST_POST) {
+	if (entry_type == RHYTHMDB_ENTRY_TYPE_PODCAST_POST) {
 		if (!rb_podcast_manager_entry_downloaded (entry))
 			return;
 	}
@@ -2482,7 +2485,7 @@
         RhythmDBPropType entry_field = 0;
         gboolean changed = FALSE;
         gboolean set_field = FALSE;
-	gulong type;
+	RhythmDBEntryType type;
 	
         rb_debug ("info: %d", field);
 
@@ -2502,7 +2505,7 @@
                 goto out_unlock;
         }
 
-	type = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE);
+	type = rhythmdb_entry_get_entry_type (entry);
 	if (type != RHYTHMDB_ENTRY_TYPE_IRADIO_STATION) {
 		rb_debug ("Got info_available but entry isn't an iradio station");
 		goto out_unlock;
Index: shell/rb-shell.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/shell/rb-shell.c,v
retrieving revision 1.421
diff -u -r1.421 rb-shell.c
--- shell/rb-shell.c	1 Apr 2006 03:24:04 -0000	1.421
+++ shell/rb-shell.c	5 Apr 2006 19:58:58 -0000
@@ -2854,19 +2854,19 @@
 	rb_shell_load_uri (shell, uri, play, NULL);
 }
 
-gint
+RhythmDBEntryType
 rb_shell_guess_type_for_uri (RBShell *shell,
 			     const char *uri)
 {
 	GnomeVFSURI *vfs_uri;
 
 	if (uri == NULL)
-		return -1;
+		return RHYTHMDB_ENTRY_TYPE_INVALID;
 
 	vfs_uri = gnome_vfs_uri_new (uri);
 	if (vfs_uri == NULL) {
 		rb_debug ("Invalid uri: %s", uri);
-		return -1;
+		return RHYTHMDB_ENTRY_TYPE_INVALID;
 	}
 
 	if (strncmp ("http", uri, 4) == 0) {
@@ -2889,7 +2889,7 @@
  */
 gboolean
 rb_shell_add_uri (RBShell *shell,
-		  gint entrytype,
+		  RhythmDBEntryType entrytype,
 		  const char *uri,
 		  const char *title,
 		  const char *genre,
@@ -2924,7 +2924,7 @@
 				       const char *title,
 				       const char *genre)
 {
-	gint entrytype;
+	RhythmDBEntryType entrytype;
 
 	entrytype = rb_shell_guess_type_for_uri (shell, uri);
 	if (entrytype < 0)
Index: shell/rb-shell.h
===================================================================
RCS file: /cvs/gnome/rhythmbox/shell/rb-shell.h,v
retrieving revision 1.26
diff -u -r1.26 rb-shell.h
--- shell/rb-shell.h	1 Apr 2006 03:24:05 -0000	1.26
+++ shell/rb-shell.h	5 Apr 2006 19:58:58 -0000
@@ -71,10 +71,10 @@
 
 gboolean        rb_shell_present        (RBShell *shell, guint32 timestamp, GError **error);
 
-gint            rb_shell_guess_type_for_uri (RBShell *shell, const char *uri);
+RhythmDBEntryType rb_shell_guess_type_for_uri (RBShell *shell, const char *uri);
 
 gboolean        rb_shell_add_uri        (RBShell *shell,
-					 gint entry_type,
+					 RhythmDBEntryType entry_type,
 					 const char *uri,
 					 const char *title,
 					 const char *genre,
Index: sources/rb-auto-playlist-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-auto-playlist-source.c,v
retrieving revision 1.10
diff -u -r1.10 rb-auto-playlist-source.c
--- sources/rb-auto-playlist-source.c	22 Mar 2006 11:35:45 -0000	1.10
+++ sources/rb-auto-playlist-source.c	5 Apr 2006 19:58:58 -0000
@@ -442,7 +442,7 @@
 		GPtrArray *query;
 		
 		g_object_get (G_OBJECT (source), "entry-type", &qtype, NULL);
-		if (qtype == -1)
+		if (qtype == RHYTHMDB_ENTRY_TYPE_INVALID)
 			qtype = RHYTHMDB_ENTRY_TYPE_SONG;
 
 		query = rhythmdb_query_parse (db,
Index: sources/rb-browser-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-browser-source.c,v
retrieving revision 1.1
diff -u -r1.1 rb-browser-source.c
--- sources/rb-browser-source.c	31 Mar 2006 03:14:58 -0000	1.1
+++ sources/rb-browser-source.c	5 Apr 2006 19:58:58 -0000
@@ -211,13 +211,10 @@
 
 	g_object_class_install_property (object_class,
 					 PROP_ENTRY_TYPE,
-					 g_param_spec_uint ("entry-type",
-							    "Entry type",
-							    "Type of the entries which should be displayed by this source",
-							    0,
-							    G_MAXINT,
-							    RHYTHMDB_ENTRY_TYPE_SONG,
-							    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+					 g_param_spec_pointer ("entry-type",
+							       "Entry type",
+							       "Type of the entries which should be displayed by this source",
+							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
 	g_object_class_install_property (object_class,
 					 PROP_SORTING_KEY,
@@ -238,6 +235,12 @@
 	source->priv->search_prop = RHYTHMDB_PROP_SEARCH_MATCH;
 
 	source->priv->vbox = gtk_vbox_new (FALSE, 5);
+
+	/* Default value, should be overridden at object construction by the 
+	 * "entry-type" property
+	 */
+	source->priv->entry_type = RHYTHMDB_ENTRY_TYPE_SONG;
+
 	gtk_container_add (GTK_CONTAINER (source), source->priv->vbox);
 }
 
@@ -474,7 +477,7 @@
 
 	switch (prop_id) {
 	case PROP_ENTRY_TYPE:
-		source->priv->entry_type = g_value_get_uint (value);
+		source->priv->entry_type = g_value_get_pointer (value);
 		break;
 	case PROP_SORTING_KEY:
 		g_free (source->priv->sorting_key);
@@ -496,7 +499,7 @@
 
 	switch (prop_id) {
 	case PROP_ENTRY_TYPE:
-		g_value_set_uint (value, source->priv->entry_type);
+		g_value_set_pointer (value, source->priv->entry_type);
 		break;
 	case PROP_SORTING_KEY:
 		g_value_set_string (value, source->priv->sorting_key);
Index: sources/rb-iradio-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-iradio-source.c,v
retrieving revision 1.114
diff -u -r1.114 rb-iradio-source.c
--- sources/rb-iradio-source.c	1 Apr 2006 01:34:22 -0000	1.114
+++ sources/rb-iradio-source.c	5 Apr 2006 19:58:58 -0000
@@ -195,13 +195,11 @@
 
 	g_object_class_install_property (object_class,
 					 PROP_ENTRY_TYPE,
-					 g_param_spec_uint ("entry-type",
-							    "Entry type",
-							    "Type of the entries which should be displayed by this source",
-							    0,
-							    G_MAXINT,
-							    RHYTHMDB_ENTRY_TYPE_IRADIO_STATION,
-							    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+					 g_param_spec_pointer ("entry-type",
+							       "Entry type",
+							       "Type of the entries which should be displayed by this source",
+							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
 
 	g_type_class_add_private (klass, sizeof (RBIRadioSourcePrivate));
 }
@@ -227,6 +225,7 @@
 	if (pixbuf != NULL) {
 		g_object_unref (pixbuf);
 	}
+	source->priv->entry_type = RHYTHMDB_ENTRY_TYPE_IRADIO_STATION;
 }
 
 static void
@@ -371,7 +370,7 @@
 
 	switch (prop_id) {
 	case PROP_ENTRY_TYPE:
-		source->priv->entry_type = g_value_get_uint (value);
+		source->priv->entry_type = g_value_get_pointer (value);
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -389,7 +388,7 @@
 
 	switch (prop_id) {
 	case PROP_ENTRY_TYPE:
-		g_value_set_uint (value, source->priv->entry_type);
+		g_value_set_pointer (value, source->priv->entry_type);
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Index: sources/rb-library-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-library-source.c,v
retrieving revision 1.160
diff -u -r1.160 rb-library-source.c
--- sources/rb-library-source.c	1 Apr 2006 01:34:22 -0000	1.160
+++ sources/rb-library-source.c	5 Apr 2006 19:58:58 -0000
@@ -1094,7 +1094,7 @@
 
 		rb_debug ("pasting entry %s", rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_LOCATION));
 
-		entry_type = rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE);
+		entry_type = rhythmdb_entry_get_entry_type (entry);
 		/* see if the responsible source lets us copy */
 		if (!rb_source_can_copy (rb_shell_get_source_by_entry_type (shell, entry_type)))
 			continue;
Index: sources/rb-missing-files-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-missing-files-source.c,v
retrieving revision 1.1
diff -u -r1.1 rb-missing-files-source.c
--- sources/rb-missing-files-source.c	22 Feb 2006 13:07:24 -0000	1.1
+++ sources/rb-missing-files-source.c	5 Apr 2006 19:58:58 -0000
@@ -109,15 +109,13 @@
 	source_class->impl_have_url = (RBSourceFeatureFunc) rb_false_function;
 	source_class->impl_get_status = impl_get_status;
 	
+
 	g_object_class_install_property (object_class,
 					 PROP_ENTRY_TYPE,
-					 g_param_spec_uint ("entry-type",
-							    "Entry type",
-							    "Type of the entries which should be displayed by this source",
-							    0,
-							    G_MAXINT,
-							    RHYTHMDB_ENTRY_TYPE_SONG,
-							    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+					 g_param_spec_pointer ("entry-type",
+							       "Entry type",
+							       "Type of the entries which should be displayed by this source",
+							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 	
 	g_type_class_add_private (klass, sizeof (RBMissingFilesSourcePrivate));
 }
@@ -139,6 +137,8 @@
 	if (pixbuf != NULL) {
 		g_object_unref (pixbuf);
 	}
+
+	source->priv->entry_type = RHYTHMDB_ENTRY_TYPE_SONG;
 }
 
 static GObject *
@@ -247,7 +247,7 @@
 	switch (prop_id)
 	{
 	case PROP_ENTRY_TYPE:
-		source->priv->entry_type = g_value_get_uint (value);
+		source->priv->entry_type = g_value_get_pointer (value);
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -266,7 +266,7 @@
 	switch (prop_id)
 	{
 	case PROP_ENTRY_TYPE:
-		g_value_set_uint (value, source->priv->entry_type);
+		g_value_set_pointer (value, source->priv->entry_type);
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Index: sources/rb-playlist-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-playlist-source.c,v
retrieving revision 1.112
diff -u -r1.112 rb-playlist-source.c
--- sources/rb-playlist-source.c	22 Feb 2006 13:06:02 -0000	1.112
+++ sources/rb-playlist-source.c	5 Apr 2006 19:58:58 -0000
@@ -185,13 +185,13 @@
 							       "whether this playlist is attached to the local library",
 							       TRUE,
 							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
 	g_object_class_install_property (object_class,
 					 PROP_ENTRY_TYPE,
-					 g_param_spec_int ("entry-type",
-							   "entry-type",
-							   "The entry type this playlist accepts",
-							   -1, G_MAXINT, -1,
-							   G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+					 g_param_spec_pointer ("entry-type",
+							       "Entry type",
+							       "Type of the entries which should be displayed by this playlist",
+							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
 	g_type_class_add_private (klass, sizeof (RBPlaylistSourcePrivate));
 }
@@ -200,6 +200,11 @@
 rb_playlist_source_init (RBPlaylistSource *source)
 {
 	source->priv = RB_PLAYLIST_SOURCE_GET_PRIVATE (source);
+
+	/* Default value, should be overridden at object construction by the 
+	 * "entry-type" property
+	 */
+	source->priv->entry_type = RHYTHMDB_ENTRY_TYPE_INVALID;
 }
 
 static GObject *
@@ -322,7 +327,7 @@
 		source->priv->is_local = g_value_get_boolean (value);
 		break;
 	case PROP_ENTRY_TYPE:
-		source->priv->entry_type = g_value_get_int (value);
+		source->priv->entry_type = g_value_get_pointer (value);
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -350,7 +355,7 @@
 		g_value_set_boolean (value, source->priv->is_local);
 		break;
 	case PROP_ENTRY_TYPE:
-		g_value_set_int (value, source->priv->entry_type);
+		g_value_set_pointer (value, source->priv->entry_type);
 		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Index: sources/rb-podcast-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-podcast-source.c,v
retrieving revision 1.61
diff -u -r1.61 rb-podcast-source.c
--- sources/rb-podcast-source.c	1 Apr 2006 14:28:25 -0000	1.61
+++ sources/rb-podcast-source.c	5 Apr 2006 19:58:58 -0000
@@ -368,13 +368,10 @@
 	
 	g_object_class_install_property (object_class,
 					 PROP_ENTRY_TYPE,
-					 g_param_spec_uint ("entry-type",
-							    "Entry type",
-							    "Type of the entries which should be displayed by this source",
-							    0,
-							    G_MAXINT,
-							    RHYTHMDB_ENTRY_TYPE_PODCAST_POST,
-							    G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+					 g_param_spec_pointer ("entry-type",
+							       "Entry type",
+							       "Type of the entries which should be displayed by this source",
+							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
 	g_object_class_install_property (object_class,
 					 PROP_PODCAST_MANAGER,
@@ -414,6 +411,8 @@
 	}
 
 	gtk_widget_destroy (dummy);
+
+	source->priv->entry_type = RHYTHMDB_ENTRY_TYPE_PODCAST_POST;
 }
 
 static void
@@ -772,7 +771,7 @@
 
 	switch (prop_id) {
 	case PROP_ENTRY_TYPE:
-		source->priv->entry_type = g_value_get_uint (value);
+		source->priv->entry_type = g_value_get_pointer (value);
 		break;
 	case PROP_PODCAST_MANAGER:
 		source->priv->podcast_mg = g_value_get_object (value);
@@ -793,7 +792,7 @@
 
 	switch (prop_id) {
 	case PROP_ENTRY_TYPE:
-		g_value_set_uint (value, source->priv->entry_type);
+		g_value_set_pointer (value, source->priv->entry_type);
 		break;
 	case PROP_PODCAST_MANAGER:
 		g_value_set_object (value, source->priv->podcast_mg);
Index: sources/rb-static-playlist-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-static-playlist-source.c,v
retrieving revision 1.17
diff -u -r1.17 rb-static-playlist-source.c
--- sources/rb-static-playlist-source.c	31 Mar 2006 09:18:49 -0000	1.17
+++ sources/rb-static-playlist-source.c	5 Apr 2006 19:58:58 -0000
@@ -562,8 +562,8 @@
 		RhythmDBEntryType entry_type;
 
 		g_object_get (G_OBJECT (source), "entry-type", &entry_type, NULL);
-		if (entry_type != -1 &&
-		    rhythmdb_entry_get_ulong (entry, RHYTHMDB_PROP_TYPE) != entry_type) {
+		if (entry_type != RHYTHMDB_ENTRY_TYPE_INVALID &&
+		    rhythmdb_entry_get_entry_type (entry) != entry_type) {
 			rb_debug ("attempting to add an entry of the wrong type to playlist");
 			return;
 		}
