diff options
author | Hyunjun Ko <zzoon.ko@samsung.com> | 2012-02-10 14:43:37 +0900 |
---|---|---|
committer | Hyunjun Ko <zzoon.ko@samsung.com> | 2012-02-10 14:43:37 +0900 |
commit | 28aef6d6021b790ac6cda467936ed42082dfd8dd (patch) | |
tree | b8ab014a90bbe6386478dc331e4f0f7921e1653a /src/util/media-thumb-db.c | |
parent | 87d4884d38e94105cea0640175e8e70604a23638 (diff) | |
download | libmedia-thumbnail-28aef6d6021b790ac6cda467936ed42082dfd8dd.tar.gz libmedia-thumbnail-28aef6d6021b790ac6cda467936ed42082dfd8dd.tar.bz2 libmedia-thumbnail-28aef6d6021b790ac6cda467936ed42082dfd8dd.zip |
Push the laste code of libmedia-thumbnail
Diffstat (limited to 'src/util/media-thumb-db.c')
-rwxr-xr-x | src/util/media-thumb-db.c | 277 |
1 files changed, 269 insertions, 8 deletions
diff --git a/src/util/media-thumb-db.c b/src/util/media-thumb-db.c index f0e41ad..8893f0b 100755 --- a/src/util/media-thumb-db.c +++ b/src/util/media-thumb-db.c @@ -20,9 +20,253 @@ */ #include "media-thumb-db.h" -#include <media-svc.h> +//#include <media-svc.h> +//#include <visual-svc.h> #include <glib.h> #include <string.h> +#include <unistd.h> +#include <util-func.h> + +//__thread MediaSvcHandle *mb_svc_handle = NULL; +__thread sqlite3 *db_handle; +const char *MEDIA_DATABASE_NAME = "/opt/dbspace/.media.db"; +const char *SELECT_MEDIA_BY_PATH = "SELECT thumbnail_path FROM visual_media WHERE path='%q';"; +const char *UPDATE_THUMB_BY_PATH = "UPDATE visual_media SET thumbnail_path = '%q' WHERE path='%q';"; +const char *UPDATE_WH_BY_PATH = "UPDATE image_meta SET width=%d,height=%d WHERE visual_uuid=(SELECT visual_uuid FROM visual_media WHERE path='%q');"; + +static int _media_thumb_busy_handler(void *pData, int count) +{ + usleep(50000); + thumb_dbg("_media_thumb_busy_handler called : %d\n", count); + + return 100 - count; +} + +int +_media_thumb_sqlite_connect(sqlite3 **handle) +{ + int err = -1; + err = db_util_open(MEDIA_DATABASE_NAME, handle, + DB_UTIL_REGISTER_HOOK_METHOD); + + if (SQLITE_OK != err) { + *handle = NULL; + return -1; + } + + /*Register busy handler*/ + err = sqlite3_busy_handler(*handle, _media_thumb_busy_handler, NULL); + if (SQLITE_OK != err) { + if (*handle) thumb_err("[sqlite] %s\n", sqlite3_errmsg(*handle)); + + db_util_close(*handle); + *handle = NULL; + + return -1; + } + + return MEDIA_THUMB_ERROR_NONE; +} + +int +_media_thumb_sqlite_disconnect(sqlite3 *handle) +{ + int err = -1; + if (handle != NULL) { + err = db_util_close(handle); + + if (SQLITE_OK != err) { + handle = NULL; + return -1; + } + } + + return MEDIA_THUMB_ERROR_NONE; +} + +int +_media_thumb_get_thumb_path_from_db(sqlite3 *handle, + const char *origin_path, + char *thumb_path, + int max_length) +{ + thumb_dbg("Origin path : %s", origin_path); + + if (handle == NULL) { + thumb_err("DB handle is NULL"); + return -1; + } + + int err = -1; + char *path_string = NULL; + char *query_string = NULL; + sqlite3_stmt *stmt = NULL; + + path_string = sqlite3_mprintf("%s", origin_path); + query_string = sqlite3_mprintf(SELECT_MEDIA_BY_PATH, path_string); + + thumb_dbg("Query: %s", query_string); + + err = sqlite3_prepare_v2(handle, query_string, strlen(query_string), &stmt, NULL); + + sqlite3_free(query_string); + sqlite3_free(path_string); + + if (SQLITE_OK != err) { + thumb_err("prepare error [%s]\n", sqlite3_errmsg(handle)); + return -1; + } + + err = sqlite3_step(stmt); + if (err != SQLITE_ROW) { + thumb_err("end of row [%s]\n", sqlite3_errmsg(handle)); + sqlite3_finalize(stmt); + return -1; + } + + strncpy(thumb_path, (const char *)sqlite3_column_text(stmt, 0), max_length); + sqlite3_finalize(stmt); + + return MEDIA_THUMB_ERROR_NONE; +} + +int +_media_thumb_update_thumb_path_to_db(sqlite3 *handle, + const char *origin_path, + char *thumb_path) +{ + thumb_dbg(""); + int err = -1; + char *path_string = NULL; + char *thumbpath_string = NULL; + char *query_string = NULL; + char *err_msg = NULL; + + if (handle == NULL) { + thumb_err("DB handle is NULL"); + return -1; + } + + path_string = sqlite3_mprintf("%s", origin_path); + thumbpath_string = sqlite3_mprintf("%s", thumb_path); + query_string = sqlite3_mprintf(UPDATE_THUMB_BY_PATH, thumbpath_string, path_string); + + err = sqlite3_exec(handle, query_string, NULL, NULL, &err_msg); + + thumb_dbg("Query : %s", query_string); + + sqlite3_free(query_string); + sqlite3_free(thumbpath_string); + sqlite3_free(path_string); + + if (SQLITE_OK != err) { + if (err_msg) { + thumb_err("Failed to query[ %s ]", err_msg); + sqlite3_free(err_msg); + err_msg = NULL; + } + + return -1; + } + + if (err_msg) + sqlite3_free(err_msg); + + thumb_dbg("Query success"); + + return MEDIA_THUMB_ERROR_NONE; +} + +int +_media_thumb_update_wh_to_db(sqlite3 *handle, + const char *origin_path, + int width, + int height) +{ + thumb_dbg(""); + int err = -1; + char *path_string = NULL; + char *query_string = NULL; + char *err_msg = NULL; + + if (handle == NULL) { + thumb_err("DB handle is NULL"); + return -1; + } + + path_string = sqlite3_mprintf("%s", origin_path); + query_string = sqlite3_mprintf(UPDATE_WH_BY_PATH, width, height, path_string); + + err = sqlite3_exec(handle, query_string, NULL, NULL, &err_msg); + + thumb_dbg("Query : %s", query_string); + + sqlite3_free(query_string); + sqlite3_free(path_string); + + if (SQLITE_OK != err) { + if (err_msg) { + thumb_err("Failed to query[ %s ]", err_msg); + sqlite3_free(err_msg); + err_msg = NULL; + } + + return -1; + } + + if (err_msg) + sqlite3_free(err_msg); + + thumb_dbg("Query success"); + + return MEDIA_THUMB_ERROR_NONE; +} + +int +_media_thumb_db_connect() +{ + int err = -1; +/* + err = media_svc_connect(&mb_svc_handle); + if (err < 0) { + thumb_err("media_svc_connect failed: %d", err); + mb_svc_handle = NULL; + return err; + } +*/ + err = _media_thumb_sqlite_connect(&db_handle); + if (err < 0) { + thumb_err("_media_thumb_sqlite_connect failed: %d", err); + db_handle = NULL; + return err; + } + + return MEDIA_THUMB_ERROR_NONE; +} + +int +_media_thumb_db_disconnect() +{ + int err = -1; +/* + err = media_svc_disconnect(mb_svc_handle); + + if (err < 0) { + thumb_err("media_svc_disconnect failed: %d", err); + } + + mb_svc_handle = NULL; +*/ + err = _media_thumb_sqlite_disconnect(db_handle); + if (err < 0) { + thumb_err("_media_thumb_sqlite_disconnect failed: %d", err); + db_handle = NULL; + return err; + } + + db_handle = NULL; + return err; +} int _media_thumb_get_thumb_from_db(const char *origin_path, @@ -33,7 +277,8 @@ _media_thumb_get_thumb_from_db(const char *origin_path, thumb_dbg(""); int err = -1; - err = minfo_get_thumb_path(origin_path, thumb_path, max_length); + //err = minfo_get_thumb_path(mb_svc_handle, origin_path, thumb_path, max_length); + err = _media_thumb_get_thumb_path_from_db(db_handle, origin_path, thumb_path, max_length); if (err < 0) { thumb_warn("Original path doesn't exist in DB"); return -1; @@ -56,7 +301,7 @@ _media_thumb_get_thumb_from_db(const char *origin_path, thumb_dbg("This thumb path already exist"); } - return 0; + return MEDIA_THUMB_ERROR_NONE; } int @@ -67,15 +312,17 @@ _media_thumb_update_db(const char *origin_path, { thumb_dbg(""); int err = -1; + +#if 0 Mitem *item = NULL; - err = minfo_get_item(origin_path, &item); + err = minfo_get_item(mb_svc_handle, origin_path, &item); if (err < 0) { thumb_err("minfo_get_item (%s) failed: %d", origin_path, err); return MEDIA_THUMB_ERROR_DB; } - err = minfo_update_media_thumb(item->uuid, thumb_path); + err = minfo_update_media_thumb(mb_svc_handle, item->uuid, thumb_path); if (err < 0) { thumb_err("minfo_update_media_thumb (ID:%s, %s) failed: %d", item->uuid, thumb_path, err); @@ -84,8 +331,9 @@ _media_thumb_update_db(const char *origin_path, } if (item->type == MINFO_ITEM_IMAGE) { - err = minfo_update_image_meta_info_int(item->uuid, MINFO_IMAGE_META_WIDTH, width, - MINFO_IMAGE_META_HEIGHT, height, -1); + err = minfo_update_image_meta_info_int(mb_svc_handle, item->uuid, + MINFO_IMAGE_META_WIDTH, width, + MINFO_IMAGE_META_HEIGHT, height, -1); if (err < 0) { thumb_err("minfo_update_image_meta_info_int failed: %d", err); @@ -95,9 +343,22 @@ _media_thumb_update_db(const char *origin_path, } err = minfo_destroy_mtype_item(item); +#endif + + err = _media_thumb_update_thumb_path_to_db(db_handle, origin_path, thumb_path); + if (err < 0) { + thumb_err("_media_thumb_update_thumb_path_to_db (%s) failed: %d", origin_path, err); + return MEDIA_THUMB_ERROR_DB; + } + + err = _media_thumb_update_wh_to_db(db_handle, origin_path, width, height); + if (err < 0) { + thumb_err("_media_thumb_update_wh_to_db (%s) failed: %d", origin_path, err); + return MEDIA_THUMB_ERROR_DB; + } thumb_dbg("_media_thumb_update_db success"); - return 0; + return MEDIA_THUMB_ERROR_NONE; } |