commit f64831b176d58bd1dbabbedd025c3bf2fa073a79
Author: Joel Smith <jsf-lists.gtk...@jk1.net>
Date:   Fri Sep 3 19:00:02 2010 -0600

    add chapter support for sqlite tables

 src/itdb_itunesdb.c |    3 +++
 src/itdb_sqlite.c   |   38 +++++++++++++++++++++++++++++++++++---
 2 files changed, 38 insertions(+), 3 deletions(-)
---
diff --git a/src/itdb_itunesdb.c b/src/itdb_itunesdb.c
index 84dd090..a03b029 100644
--- a/src/itdb_itunesdb.c
+++ b/src/itdb_itunesdb.c
@@ -7907,6 +7907,9 @@ gboolean itdb_init_ipod (const gchar *mountpoint,
  * @chapterdata: Itdb_Chapterdata pointer of chapter data to be encoded
  *
  * Creates an iTunesDB binary blob of chapter data from @chapterdata.
+ * This helper function is used by both mk_mhod() in itdb_itunesdb.c
+ * and mk_Extras() in itdb_sqlite.c, so take care when updating to
+ * maintain compatibility with both chapterdata blobs.
  *
  * NOTE: Caller must call g_byte_array_free(chapter_blob, TRUE) on the
  * returned chapter_blob
diff --git a/src/itdb_sqlite.c b/src/itdb_sqlite.c
index dc35f39..9b6c64f 100644
--- a/src/itdb_sqlite.c
+++ b/src/itdb_sqlite.c
@@ -361,8 +361,10 @@ static int mk_Extras(Itdb_iTunesDB *itdb, const char 
*outpath)
     int rebuild = 0;
     gchar *dbf = NULL;
     sqlite3 *db = NULL;
+    sqlite3_stmt *stmt_chapter = NULL;
     char *errmsg = NULL;
     struct stat fst;
+    GList *gl = NULL;
 
     dbf = g_build_filename(outpath, "Extras.itdb", NULL);
     printf("[%s] Processing '%s'\n", __func__, dbf);
@@ -398,10 +400,13 @@ static int mk_Extras(Itdb_iTunesDB *itdb, const char 
*outpath)
     }
 
     sqlite3_exec(db, "BEGIN;", NULL, NULL, NULL);
+    if (SQLITE_OK != sqlite3_prepare_v2(db, "INSERT INTO \"chapter\" 
VALUES(?,?);", -1, &stmt_chapter, NULL)) {
+       fprintf(stderr, "[%s] sqlite3_prepare error: %s\n", __func__, 
sqlite3_errmsg(db));
+       goto leave;
+    }
 
     /* kill all entries in 'chapter' as they will be re-inserted */
-    /* TODO: we do not support this in the moment, so don't touch this */
-    /*if (SQLITE_OK != sqlite3_exec(db, "DELETE FROM chapter;", NULL, NULL, 
&errmsg)) {
+    if (SQLITE_OK != sqlite3_exec(db, "DELETE FROM chapter;", NULL, NULL, 
&errmsg)) {
        fprintf(stderr, "[%s] sqlite3_exec error: %s\n", __func__, 
sqlite3_errmsg(db));
        if (errmsg) {
            fprintf(stderr, "[%s] additional error information: %s\n", 
__func__, errmsg);
@@ -409,7 +414,7 @@ static int mk_Extras(Itdb_iTunesDB *itdb, const char 
*outpath)
            errmsg = NULL;
        }
        goto leave;
-    }*/
+    }
 
     /* kill all entries in 'lyrics' as they will be re-inserted */
     /* TODO: we do not support this in the moment, so don't touch this */
@@ -423,11 +428,38 @@ static int mk_Extras(Itdb_iTunesDB *itdb, const char 
*outpath)
        goto leave;
     }*/
 
+    for (gl = itdb->tracks; gl; gl = gl->next) {
+       Itdb_Track *track = gl->data;
+       if (track->chapterdata) {
+           int idx = 0;
+           GByteArray *chapter_blob = 
itdb_chapterdata_build_chapter_blob(track->chapterdata, FALSE);
+           /* printf("[%s] -- inserting into \"chapter\"\n", __func__); */
+           res = sqlite3_reset(stmt_chapter);
+           if (res != SQLITE_OK) {
+               fprintf(stderr, "[%s] 1 sqlite3_reset returned %d\n", __func__, 
res);
+           }
+           /* item_pid INTEGER NOT NULL */
+           sqlite3_bind_int64(stmt_chapter, ++idx, track->dbid);
+           /* data BLOB */
+           sqlite3_bind_blob(stmt_chapter, ++idx, chapter_blob->data, 
chapter_blob->len, SQLITE_TRANSIENT);
+
+           res = sqlite3_step(stmt_chapter);
+           if (res == SQLITE_DONE) {
+               /* expected result */
+           } else {
+               fprintf(stderr, "[%s] 8 sqlite3_step returned %d\n", __func__, 
res);
+           }
+           g_byte_array_free(chapter_blob, TRUE);
+       }
+    }
     sqlite3_exec(db, "COMMIT;", NULL, NULL, NULL);
 
     res = 0;
     printf("[%s] done.\n", __func__);
 leave:
+    if (stmt_chapter) {
+       sqlite3_finalize(stmt_chapter);
+    }
     if (db) {
        sqlite3_close(db);
     }

------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
gtkpod-cvs2 mailing list
gtkpod-cvs2@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to