commit 23f0f78d8f05b87d7814c93795029765b925c107
Author: Christophe Fergeau <t...@gnome.org>
Date:   Thu Sep 30 18:46:08 2010 +0200

    remove recent playcount file after db writing
    
    Currently, when parsing an iPod database, libgpod reads the iPod
    file containing information about the recent playcounts and merges
    it with the database. However, it doesn't automatically remove this
    file, and gives no way for applications to do it, as a result,
    playcounts will be merged several times if itdb_parse is called
    several time on an iPod. To avoid that, once the database has been
    successfully written to disk, we make sure to remove the recent
    playcount files.

 src/itdb_itunesdb.c |   25 ++++++++++++++++++++++++-
 1 files changed, 24 insertions(+), 1 deletions(-)
---
diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c
index bae2844..e9dc7cd 100644
--- a/src/itdb_itunesdb.c
+++ b/src/itdb_itunesdb.c
@@ -1198,6 +1198,26 @@ static gboolean playcounts_plist_read (FImport *fimp, 
GValue *plist_data)
     return TRUE;
 }
 
+/* Delete the file containing the playcounts, once we saved the database,
+ * the recent playcounts will have been added to the database, so this
+ * file is no longer useful. */
+static void playcounts_reset (const char *mountpoint)
+{
+  const gchar *dirs[] = { "Play Counts", "iTunesStats",
+                          "PlayCounts.plist", NULL };
+  const gchar **it;
+
+  for (it = dirs; *it != NULL; it++) {
+      char *playcounts_path;
+      const gchar *components[] = { *it, NULL };
+      playcounts_path = itdb_resolve_path (mountpoint, components);
+      if (playcounts_path != NULL) {
+          g_unlink (playcounts_path);
+          g_free (playcounts_path);
+      }
+  }
+}
+
 /* Read the Play Count file (formed by adding "Play Counts" to the
  * directory component of fimp->itdb->itdb_filename) and set up the
  * GList *playcounts. If no Play Count file is present, attempt to
@@ -5972,8 +5992,11 @@ static gboolean itdb_write_file_internal (Itdb_iTunesDB 
*itdb,
 
     if (!fexp->error)
     {
-       if (!wcontents_write (cts))
+       if (wcontents_write (cts)) {
+           playcounts_reset (itdb_get_mountpoint (itdb));
+       } else {
            g_propagate_error (&fexp->error, cts->error);
+       }
     }
 err:
     if (fexp->error)

------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
gtkpod-cvs2 mailing list
gtkpod-cvs2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to