Index: rhythmdb/rhythmdb.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb.c,v
retrieving revision 1.247
diff -u -p -r1.247 rhythmdb.c
--- rhythmdb/rhythmdb.c	4 Aug 2006 17:02:05 -0000	1.247
+++ rhythmdb/rhythmdb.c	6 Aug 2006 20:21:11 -0000
@@ -127,6 +127,7 @@ enum
 	ENTRY_ADDED,
 	ENTRY_CHANGED,
 	ENTRY_DELETED,
+	ENTRY_EXTRA_METADATA_NOTIFY,
 	LOAD_COMPLETE,
 	SAVE_COMPLETE,
 	SAVE_ERROR,
@@ -198,6 +199,16 @@ rhythmdb_class_init (RhythmDBClass *klas
 			      G_TYPE_NONE, 2,
 			      RHYTHMDB_TYPE_ENTRY, G_TYPE_POINTER);
 
+	rhythmdb_signals[ENTRY_EXTRA_METADATA_NOTIFY] =
+		g_signal_new ("entry_extra_metadata_notify",
+			      G_OBJECT_CLASS_TYPE (object_class),
+			      G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+			      G_STRUCT_OFFSET (RhythmDBClass, entry_extra_metadata_notify),
+			      NULL, NULL,
+			      rb_marshal_VOID__BOXED_BOXED,
+			      G_TYPE_NONE, 2,
+			      RHYTHMDB_TYPE_ENTRY, G_TYPE_VALUE_ARRAY);
+
 	rhythmdb_signals[LOAD_COMPLETE] =
 		g_signal_new ("load_complete",
 			      RHYTHMDB_TYPE,
@@ -3354,6 +3365,31 @@ rhythmdb_emit_entry_deleted (RhythmDB *d
 			     RhythmDBEntry *entry)
 {
 	g_signal_emit (G_OBJECT (db), rhythmdb_signals[ENTRY_DELETED], 0, entry);
+}
+
+/**
+ * rhythmdb_emit_entry_extra_metadata_notify:
+ * @db: a #RhythmDB
+ * @entry: a #RhythmDBEntry
+ * @property_name: the metadata predicate
+ * @metadata: a #GValueArray; typically only the first member is used.
+ *
+ * Emits a signal describing extra metadata for the @entry. The @property_name
+ * argument is emitted as the ::detail part of the "entry_extra_metadata"
+ * signal. It should be a namespaced RDF predicate e.g. from Dublin Core,
+ * MusicBrainz, or internal to Rhythmbox (namespace "rb:"). Listeners can
+ * ensure they only get metadata they are interested in by supplying an
+ * appropriate ::detail part when connecting to the signal. If listeners
+ * are interested in the metadata they should ref or copy the contents of
+ * @metadata and unref or free it when they are finished with it.
+ **/
+void
+rhythmdb_emit_entry_extra_metadata_notify (RhythmDB *db,
+					   RhythmDBEntry *entry,
+					   const char *property_name,
+					   GValueArray *metadata)
+{
+	g_signal_emit (G_OBJECT (db), rhythmdb_signals[ENTRY_EXTRA_METADATA_NOTIFY], g_quark_from_string (property_name), entry, metadata);
 }
 
 static gboolean
Index: rhythmdb/rhythmdb.h
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb.h,v
retrieving revision 1.95
diff -u -p -r1.95 rhythmdb.h
--- rhythmdb/rhythmdb.h	27 Jul 2006 02:11:52 -0000	1.95
+++ rhythmdb/rhythmdb.h	6 Aug 2006 20:21:12 -0000
@@ -253,6 +253,7 @@ typedef struct
 	void	(*entry_added)		(RhythmDB *db, RhythmDBEntry *entry);
 	void	(*entry_changed)	(RhythmDB *db, RhythmDBEntry *entry, GSList *changes); /* list of RhythmDBEntryChanges */
 	void	(*entry_deleted)	(RhythmDB *db, RhythmDBEntry *entry);
+	void	(*entry_extra_metadata_notify) (RhythmDB *db, RhythmDBEntry *entry, GValueArray *metadata);
 	void	(*load_complete)	(RhythmDB *db);
 	void	(*save_complete)	(RhythmDB *db);
 	void	(*load_error)		(RhythmDB *db, const char *uri, const char *msg);
@@ -392,6 +393,7 @@ int		rhythmdb_propid_from_nice_elt_name	
 
 void		rhythmdb_emit_entry_added		(RhythmDB *db, RhythmDBEntry *entry);
 void		rhythmdb_emit_entry_deleted		(RhythmDB *db, RhythmDBEntry *entry);
+void		rhythmdb_emit_entry_extra_metadata_notify (RhythmDB *db, RhythmDBEntry *entry, const char *property_name, GValueArray *metadata);
 
 gboolean	rhythmdb_is_busy			(RhythmDB *db);
 char *		rhythmdb_compute_status_normal		(gint n_songs, glong duration,
