image/video db: new fields added
authorLeandro Dorileo <leandro.maciel.dorileo@intel.com>
Fri, 17 Jan 2014 12:28:31 +0000 (10:28 -0200)
committerLeandro Dorileo <leandro.maciel.dorileo@intel.com>
Tue, 28 Jan 2014 19:18:58 +0000 (17:18 -0200)
New fields were introduced, they should go through the lower layers
to be used on dlna source code, they are:

    + image:
        container: a string carrying the container information, used
 to determine which dlna set of rules should be applied.
    + video:
        packet_size: without the packet_size we can not apply the
meg1/2 rules.

src/lib/lightmediascanner_db.h
src/lib/lightmediascanner_db_image.c
src/lib/lightmediascanner_db_video.c

index 0b87b01..e5cb083 100644 (file)
@@ -81,6 +81,7 @@ extern "C" {
         unsigned short height;
         unsigned short orientation;
         struct lms_gps_info gps;
+        struct lms_string_size container;
     };
 
     typedef struct lms_db_image lms_db_image_t;
@@ -161,6 +162,7 @@ extern "C" {
         struct lms_string_size dlna_profile;
         struct lms_string_size dlna_mime;
         unsigned int length;
+        int64_t packet_size;
         struct lms_stream *streams;
     };
 
index 737a05f..b9cdf88 100644 (file)
@@ -108,9 +108,29 @@ _db_table_updater_images_1(sqlite3 *db, const char *table, unsigned int current_
     return ret;
 }
 
+static int
+_db_table_updater_images_2(sqlite3 *db, const char *table, unsigned int current_version, int is_last_run)
+{
+    int ret;
+    char *err;
+
+    ret = sqlite3_exec(
+        db, "BEGIN TRANSACTION;"
+        "ALTER TABLE images ADD COLUMN container TEXT DEFAULT NULL;"
+        "COMMIT;",
+        NULL, NULL, &err);
+    if (ret != SQLITE_OK) {
+        fprintf(stderr, "ERROR: could add columns to images table: %s\n", err);
+        sqlite3_free(err);
+    }
+
+    return ret;
+}
+
 static lms_db_table_updater_t _db_table_updater_images[] = {
     _db_table_updater_images_0,
-    _db_table_updater_images_1
+    _db_table_updater_images_1,
+    _db_table_updater_images_2
 };
 
 
@@ -191,8 +211,8 @@ lms_db_image_start(lms_db_image_t *ldi)
     ldi->insert = lms_db_compile_stmt(ldi->db,
         "INSERT OR REPLACE INTO images ("
         "id, title, artist, date, width, height, orientation, "
-        "gps_lat, gps_long, gps_alt, dlna_profile, dlna_mime) VALUES ("
-        "?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
+        "gps_lat, gps_long, gps_alt, dlna_profile, dlna_mime, container) "
+         "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
     if (!ldi->insert)
         return -2;
 
@@ -294,6 +314,10 @@ _db_insert(lms_db_image_t *ldi, const struct lms_image_info *info)
     if (ret != 0)
         goto done;
 
+    ret = lms_db_bind_text(stmt, 13, info->container.str, info->container.len);
+    if (ret != 0)
+        goto done;
+
     r = sqlite3_step(stmt);
     if (r != SQLITE_DONE) {
         fprintf(stderr, "ERROR: could not insert image info: %s\n",
index 8a7f00c..dc9b771 100644 (file)
@@ -241,10 +241,33 @@ _db_table_updater_videos_2(sqlite3 *db, const char *table,
     return 0;
 }
 
+static int
+_db_table_updater_videos_3(sqlite3 *db, const char *table,
+                           unsigned int current_version, int is_last_run)
+{
+    char *errmsg = NULL;
+    int r;
+
+    r = sqlite3_exec(
+        db, "BEGIN TRANSACTION;"
+        "ALTER TABLE videos ADD COLUMN packet_size INTEGER;"
+        "COMMIT;",
+        NULL, NULL, &errmsg);
+    if (r != SQLITE_OK) {
+        fprintf(stderr, "ERROR: could add columns to videos table: %s\n",
+                errmsg);
+        sqlite3_free(errmsg);
+        return -1;
+    }
+
+    return 0;
+}
+
 static lms_db_table_updater_t _db_table_updater_videos[] = {
     _db_table_updater_videos_0,
     _db_table_updater_videos_1,
     _db_table_updater_videos_2,
+    _db_table_updater_videos_3,
 };
 
 
@@ -324,8 +347,8 @@ lms_db_video_start(lms_db_video_t *ldv)
 
     ldv->insert = lms_db_compile_stmt(ldv->db,
         "INSERT OR REPLACE INTO videos (id, title, artist, length, "
-        "container, dlna_profile, dlna_mime) "
-        "VALUES (?, ?, ?, ?, ?, ?, ?)");
+        "container, dlna_profile, dlna_mime, packet_size) "
+        "VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
     if (!ldv->insert)
         return -2;
 
@@ -546,6 +569,10 @@ _db_insert(lms_db_video_t *ldv, const struct lms_video_info *info)
     if (ret != 0)
         goto done;
 
+    ret = lms_db_bind_int64(stmt, 8, info->packet_size);
+    if (ret != 0)
+        goto done;
+
     r = sqlite3_step(stmt);
     if (r != SQLITE_DONE) {
         fprintf(stderr, "ERROR: could not insert video info: %s\n",