[rhythmbox] rhythmdb: use entry changes in the default sync function
- From: Jonathan Matthew <jmatthew src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [rhythmbox] rhythmdb: use entry changes in the default sync function
- Date: Sat, 6 Feb 2010 12:55:23 +0000 (UTC)
commit 1025f471ac07ea1830f6fd9fbcd9f0bfffe58351
Author: Jonathan Matthew <jonathan d14n org>
Date: Sat Feb 6 22:31:29 2010 +1000
rhythmdb: use entry changes in the default sync function
Rather than writing all the entry properties through the metadata
backend, just write the changes. This should mean we don't write
default values for tags that weren't already present in the file.
rhythmdb/rhythmdb.c | 43 +++++++++++++++++--------------------------
rhythmdb/rhythmdb.h | 2 +-
2 files changed, 18 insertions(+), 27 deletions(-)
---
diff --git a/rhythmdb/rhythmdb.c b/rhythmdb/rhythmdb.c
index 6f3fae8..46a1d62 100644
--- a/rhythmdb/rhythmdb.c
+++ b/rhythmdb/rhythmdb.c
@@ -2956,30 +2956,6 @@ rhythmdb_entry_get (RhythmDB *db,
}
}
-static void
-entry_to_rb_metadata (RhythmDB *db,
- RhythmDBEntry *entry,
- RBMetaData *metadata)
-{
- GValue val = {0, };
- int i;
-
- for (i = RHYTHMDB_PROP_TYPE; i != RHYTHMDB_NUM_PROPERTIES; i++) {
- RBMetaDataField field;
-
- if (metadata_field_from_prop (i, &field) == FALSE) {
- continue;
- }
-
- g_value_init (&val, rhythmdb_property_type_map[i]);
- rhythmdb_entry_get (db, entry, i, &val);
- rb_metadata_set (metadata,
- field,
- &val);
- g_value_unset (&val);
- }
-}
-
typedef struct
{
RhythmDB *db;
@@ -3058,7 +3034,7 @@ action_thread_main (RhythmDB *db)
break;
entry_type = rhythmdb_entry_get_entry_type (entry);
- entry_type->sync_metadata (db, entry, &error, entry_type->sync_metadata_data);
+ entry_type->sync_metadata (db, entry, action->data.changes, &error, entry_type->sync_metadata_data);
if (error != NULL) {
RhythmDBSaveErrorData *data;
@@ -4652,16 +4628,31 @@ rhythmdb_compute_status_normal (gint n_songs,
static void
default_sync_metadata (RhythmDB *db,
RhythmDBEntry *entry,
+ GSList *changes,
GError **error,
gpointer data)
{
const char *uri;
GError *local_error = NULL;
+ GSList *t;
uri = rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_LOCATION);
rb_metadata_reset (db->priv->metadata);
- entry_to_rb_metadata (db, entry, db->priv->metadata);
+ for (t = changes; t; t = t->next) {
+ RBMetaDataField field;
+ GValue val = {0,};
+ RhythmDBEntryChange *change = (RhythmDBEntryChange *)t->data;
+
+ if (metadata_field_from_prop (change->prop, &field) == FALSE) {
+ continue;
+ }
+
+ g_value_init (&val, rhythmdb_property_type_map[change->prop]);
+ rhythmdb_entry_get (db, entry, change->prop, &val);
+ rb_metadata_set (db->priv->metadata, field, &val);
+ g_value_unset (&val);
+ }
rb_metadata_save (db->priv->metadata, uri, &local_error);
if (local_error != NULL) {
diff --git a/rhythmdb/rhythmdb.h b/rhythmdb/rhythmdb.h
index 1d61149..9b9ae1f 100644
--- a/rhythmdb/rhythmdb.h
+++ b/rhythmdb/rhythmdb.h
@@ -60,7 +60,7 @@ GType rhythmdb_entry_get_type (void);
typedef void (*RhythmDBEntryActionFunc) (RhythmDBEntry *entry, gpointer data);
typedef char* (*RhythmDBEntryStringFunc) (RhythmDBEntry *entry, gpointer data);
typedef gboolean (*RhythmDBEntryCanSyncFunc) (RhythmDB *db, RhythmDBEntry *entry, gpointer data);
-typedef void (*RhythmDBEntrySyncFunc) (RhythmDB *db, RhythmDBEntry *entry, GError **error, gpointer data);
+typedef void (*RhythmDBEntrySyncFunc) (RhythmDB *db, RhythmDBEntry *entry, GSList *changes, GError **error, gpointer data);
GType rhythmdb_entry_category_get_type (void);
#define RHYTHMDB_TYPE_ENTRY_CATEGORY (rhythmdb_entry_category_get_type ())
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]