From ab926bb55ef31654717f9f6f7eb5a5eb530577d7 Mon Sep 17 00:00:00 2001 From: Minje Ahn Date: Mon, 26 Jun 2017 15:54:02 +0900 Subject: [PATCH] Remove parent_folder_uuid related code Change-Id: Ia1910937a50139a44f90276efd0004c3b87b041d Signed-off-by: Minje Ahn --- packaging/libmedia-service.spec | 2 +- src/common/media-svc-db-utils.c | 2 - src/common/media-svc-media-folder.c | 221 +++--------------------------------- 3 files changed, 16 insertions(+), 209 deletions(-) diff --git a/packaging/libmedia-service.spec b/packaging/libmedia-service.spec index 92a7e4b..4c9ad95 100644 --- a/packaging/libmedia-service.spec +++ b/packaging/libmedia-service.spec @@ -1,6 +1,6 @@ Name: libmedia-service Summary: Media information service library for multimedia applications -Version: 0.3.10 +Version: 0.3.11 Release: 0 Group: Multimedia/Libraries License: Apache-2.0 and PD diff --git a/src/common/media-svc-db-utils.c b/src/common/media-svc-db-utils.c index df2afab..86b242f 100755 --- a/src/common/media-svc-db-utils.c +++ b/src/common/media-svc-db-utils.c @@ -705,8 +705,6 @@ int _media_svc_init_table_query(const char *event_table_name) media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "folder_order", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "parent_folder_uuid", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "validity", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 1", USER_V4, NULL, false, false, false); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "scan_status", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false); diff --git a/src/common/media-svc-media-folder.c b/src/common/media-svc-media-folder.c index e00719f..3cb6c1a 100755 --- a/src/common/media-svc-media-folder.c +++ b/src/common/media-svc-media-folder.c @@ -32,89 +32,15 @@ extern __thread GList *g_media_svc_move_item_query_list; static __thread GList *g_media_svc_insert_folder_query_list; -static int __media_svc_is_root_path(const char *folder_path, bool *is_root, uid_t uid) -{ - media_svc_retvm_if(!STRING_VALID(folder_path), MS_MEDIA_ERR_INVALID_PARAMETER, "folder_path is NULL"); - - *is_root = FALSE; - int i = 0; - int start_len = 0; - int path_len = 0; - char *internal_path = NULL; - int ret = MS_MEDIA_ERR_NONE; - - ret = ms_user_get_internal_root_path(uid, &internal_path); - media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Fail to get root path"); - - if (STRING_VALID(internal_path) && (strcmp(folder_path, internal_path) == 0)) { - media_svc_debug("ROOT PATH [%s]", folder_path); - *is_root = TRUE; - - SAFE_FREE(internal_path); - - return MS_MEDIA_ERR_NONE; - } - SAFE_FREE(internal_path); - - if (STRING_VALID(MEDIA_ROOT_PATH_SDCARD) && strncmp(folder_path, MEDIA_ROOT_PATH_SDCARD, strlen(MEDIA_ROOT_PATH_SDCARD)) == 0) { - - start_len = strlen(MEDIA_ROOT_PATH_SDCARD); - path_len = strlen(folder_path); - - for (i = start_len; i < path_len; i++) { - if (folder_path[i] == '/') - return MS_MEDIA_ERR_NONE; - } - - media_svc_debug("ROOT PATH [%s]", folder_path); - *is_root = TRUE; - } else if (STRING_VALID(MEDIA_ROOT_PATH_DISC) && strcmp(folder_path, MEDIA_ROOT_PATH_DISC) == 0) { - media_svc_debug("ROOT PATH [%s]", folder_path); - *is_root = TRUE; - } - - return MS_MEDIA_ERR_NONE; -} - -static int __media_svc_parent_is_ext_root_path(const char *folder_path, bool *is_root) -{ - char *parent_folder_path = NULL; - - media_svc_retvm_if(!STRING_VALID(folder_path), MS_MEDIA_ERR_INVALID_PARAMETER, "folder_path is NULL"); - - *is_root = FALSE; - - parent_folder_path = g_path_get_dirname(folder_path); - - if (!STRING_VALID(parent_folder_path)) { - media_svc_error("error : g_path_get_dirname falied"); - SAFE_FREE(parent_folder_path); - return MS_MEDIA_ERR_OUT_OF_MEMORY; - } - - if (STRING_VALID(MEDIA_ROOT_PATH_EXTERNAL) && (strcmp(parent_folder_path, MEDIA_ROOT_PATH_EXTERNAL) == 0)) { - media_svc_debug("parent folder is ROOT PATH [%s]", parent_folder_path); - *is_root = TRUE; - } - - SAFE_FREE(parent_folder_path); - - return MS_MEDIA_ERR_NONE; -} - int _media_svc_get_folder_id_by_foldername(sqlite3 *handle, const char *storage_id, const char *folder_name, char *folder_id, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; sqlite3_stmt *sql_stmt = NULL; char *sql = NULL; - char parent_folder_uuid[MEDIA_SVC_UUID_SIZE+1] = {0, }; - char *temp_parent_uuid = NULL; - char *parent_folder_path = NULL; - sql = sqlite3_mprintf("SELECT folder_uuid, parent_folder_uuid FROM '%s' WHERE storage_uuid = '%q' AND path = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, storage_id, folder_name); + sql = sqlite3_mprintf("SELECT folder_uuid FROM '%s' WHERE storage_uuid = '%q' AND path = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, storage_id, folder_name); ret = _media_svc_sql_prepare_to_step(handle, sql, &sql_stmt); - if (ret != MS_MEDIA_ERR_NONE) { if (ret == MS_MEDIA_ERR_DB_NO_RECORD) media_svc_debug("there is no folder."); @@ -124,72 +50,15 @@ int _media_svc_get_folder_id_by_foldername(sqlite3 *handle, const char *storage_ return ret; } - memset(parent_folder_uuid, 0, sizeof(parent_folder_uuid)); - _strncpy_safe(folder_id, (const char *)sqlite3_column_text(sql_stmt, 0), MEDIA_SVC_UUID_SIZE + 1); - if (STRING_VALID((const char *)sqlite3_column_text(sql_stmt, 1))) /*root path can be null*/ - _strncpy_safe(parent_folder_uuid, (const char *)sqlite3_column_text(sql_stmt, 1), MEDIA_SVC_UUID_SIZE+1); SQLITE3_FINALIZE(sql_stmt); - /*root path can be null*/ - if (!STRING_VALID(parent_folder_uuid)) { - bool is_root = FALSE; - - ret = __media_svc_is_root_path(folder_name, &is_root, uid); - if (is_root) - return MS_MEDIA_ERR_NONE; - - ret = __media_svc_parent_is_ext_root_path(folder_name, &is_root); - if (is_root) - return MS_MEDIA_ERR_NONE; - } - - /* Notice : Below code is the code only for inserting parent folder uuid when upgrade the media db version 3 to 4 */ - /* Check parent folder uuid */ - if (!STRING_VALID(parent_folder_uuid)) { - /* update parent_uuid */ - media_svc_error("[No-Error] there is no parent folder uuid. PLEASE CHECK IT"); - - parent_folder_path = g_path_get_dirname(folder_name); - if (!STRING_VALID(parent_folder_path)) { - media_svc_error("error : g_path_get_dirname falied."); - return MS_MEDIA_ERR_OUT_OF_MEMORY; - } - - if (STRING_VALID(storage_id)) - sql = sqlite3_mprintf("SELECT folder_uuid FROM '%s' WHERE storage_uuid = '%q' AND path = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, storage_id, parent_folder_path); - else - sql = sqlite3_mprintf("SELECT folder_uuid FROM '%s' WHERE path = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, parent_folder_path); - - SAFE_FREE(parent_folder_path); - - ret = _media_svc_sql_prepare_to_step(handle, sql, &sql_stmt); - if (ret == MS_MEDIA_ERR_NONE) { - temp_parent_uuid = (char *)sqlite3_column_text(sql_stmt, 0); - if (temp_parent_uuid != NULL) - _strncpy_safe(parent_folder_uuid, temp_parent_uuid, MEDIA_SVC_UUID_SIZE+1); - - SQLITE3_FINALIZE(sql_stmt); - } - - if (STRING_VALID(parent_folder_uuid)) { - if (STRING_VALID(storage_id)) - sql = sqlite3_mprintf("UPDATE %q SET parent_folder_uuid = '%q' WHERE storage_uuid = '%q' AND path = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, parent_folder_uuid, storage_id, folder_name); - else - sql = sqlite3_mprintf("UPDATE %q SET parent_folder_uuid = '%q' WHERE path = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, parent_folder_uuid, folder_name); - ret = _media_svc_sql_query(sql, uid); - SQLITE3_SAFE_FREE(sql); - } else { - media_svc_error("error when get parent folder uuid"); - } - } - return ret; } static int __media_svc_append_folder(const char *storage_id, media_svc_storage_type_e storage_type, - const char *folder_id, const char *folder_path, const char *parent_folder_uuid, bool stack_query, uid_t uid) + const char *folder_id, const char *folder_path, bool stack_query, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; char *folder_name = NULL; @@ -204,9 +73,8 @@ static int __media_svc_append_folder(const char *storage_id, media_svc_storage_t _media_svc_get_pinyin_str(folder_name, &folder_name_pinyin); /* Sometime SQLITE3 returns NO_RECORD, so need to consider conflict case.. */ media_svc_debug("UNIQUE:path[%s], storage_uuid[%s]", folder_path, storage_id); - char *sql = sqlite3_mprintf("INSERT OR IGNORE INTO %s (folder_uuid, path, name, storage_uuid, storage_type, modified_time, name_pinyin, parent_folder_uuid) \ - values (%Q, %Q, %Q, %Q, '%d', '%d', %Q, %Q); ", - MEDIA_SVC_DB_TABLE_FOLDER, folder_id, folder_path, folder_name, storage_id, storage_type, folder_modified_date, folder_name_pinyin, parent_folder_uuid); + char *sql = sqlite3_mprintf("INSERT OR IGNORE INTO %s (folder_uuid, path, name, storage_uuid, storage_type, modified_time, name_pinyin) values (%Q, %Q, %Q, %Q, '%d', '%d', %Q); ", + MEDIA_SVC_DB_TABLE_FOLDER, folder_id, folder_path, folder_name, storage_id, storage_type, folder_modified_date, folder_name_pinyin); if (!stack_query) { ret = _media_svc_sql_query(sql, uid); @@ -248,11 +116,11 @@ static int __media_svc_get_and_append_parent_folder(sqlite3 *handle, const char char *dir_path = NULL; const char *token = "/"; char *folder_uuid = NULL; - char parent_folder_uuid[MEDIA_SVC_UUID_SIZE + 1] = {0, }; + char tmp_folder_uuid[MEDIA_SVC_UUID_SIZE + 1] = {0, }; bool folder_search_end = FALSE; char *internal_path = NULL; - memset(parent_folder_uuid, 0, sizeof(parent_folder_uuid)); + memset(tmp_folder_uuid, 0, sizeof(tmp_folder_uuid)); ret = ms_user_get_internal_root_path(uid, &internal_path); media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Fail to get root path"); @@ -291,7 +159,7 @@ static int __media_svc_get_and_append_parent_folder(sqlite3 *handle, const char continue; } - ret = _media_svc_get_folder_id_by_foldername(handle, storage_id, dir_path, parent_folder_uuid, uid); + ret = _media_svc_get_folder_id_by_foldername(handle, storage_id, dir_path, tmp_folder_uuid, uid); if (ret == MS_MEDIA_ERR_DB_NO_RECORD) { folder_uuid = _media_info_generate_uuid(); if (folder_uuid == NULL) { @@ -300,12 +168,11 @@ static int __media_svc_get_and_append_parent_folder(sqlite3 *handle, const char return MS_MEDIA_ERR_INTERNAL; } - ret = __media_svc_append_folder(storage_id, storage_type, folder_uuid, dir_path, parent_folder_uuid, FALSE, uid); + ret = __media_svc_append_folder(storage_id, storage_type, folder_uuid, dir_path, FALSE, uid); if (ret != MS_MEDIA_ERR_NONE) media_svc_error("__media_svc_append_folder is failed"); - media_svc_error("[No-Error] New Appended folder path [%s], folder_uuid [%s], parent_folder_uuid [%s]", dir_path, folder_uuid, parent_folder_uuid); - _strncpy_safe(parent_folder_uuid, folder_uuid, MEDIA_SVC_UUID_SIZE + 1); + media_svc_error("[No-Error] New Appended folder path [%s], folder_uuid [%s]", dir_path, folder_uuid); } else { media_svc_error("EXIST dir path : %s\n", dir_path); } @@ -533,52 +400,10 @@ int _media_svc_get_and_append_folder_id_by_folder_path(sqlite3 *handle, const ch ret = _media_svc_get_folder_id_by_foldername(handle, storage_id, path_name, folder_id, uid); if (ret == MS_MEDIA_ERR_DB_NO_RECORD) { - bool is_root = FALSE; - bool is_parent_root = FALSE; - - ret = __media_svc_is_root_path(path_name, &is_root, uid); - ret = __media_svc_parent_is_ext_root_path(path_name, &is_parent_root); - - char parent_folder_uuid[MEDIA_SVC_UUID_SIZE+1] = {0, }; - memset(parent_folder_uuid, 0x00, sizeof(parent_folder_uuid)); - - if ((is_root == FALSE) && (is_parent_root == FALSE)) { - /*get parent folder id*/ - char *parent_path_name = g_path_get_dirname(path_name); - - ret = _media_svc_get_folder_id_by_foldername(handle, storage_id, parent_path_name, parent_folder_uuid, uid); - if (ret != MS_MEDIA_ERR_NONE) { - if (ret == MS_MEDIA_ERR_DB_NO_RECORD) { - /*if No-Root directory scanning start before doing storage scanning, parent_folder_uuid can be NULL. - You can remove above logic if use below logic always. but I keep above code for the performance issue. - Most case (except No-Root directory scanning start before doing storage scanning) get parent_folder_uuid well*/ - media_svc_error("[No-Error] There is no proper parent_folder_uuid. so try to make it"); - ret = _media_svc_get_and_append_folder(handle, storage_id, path, storage_type, folder_id, uid); - } else { - media_svc_error("error when _media_svc_get_parent_folder_id_by_foldername. err = [%d]", ret); - } - - SAFE_FREE(path_name); - SAFE_FREE(parent_path_name); - - return ret; - } - } - - char *folder_uuid = _media_info_generate_uuid(); - if (folder_uuid == NULL) { - media_svc_error("Invalid UUID"); - SAFE_FREE(path_name); - return MS_MEDIA_ERR_INTERNAL; - } - - ret = __media_svc_append_folder(storage_id, storage_type, folder_uuid, path_name, parent_folder_uuid, stack_query, uid); - - _strncpy_safe(folder_id, folder_uuid, MEDIA_SVC_UUID_SIZE+1); + ret = __media_svc_get_and_append_parent_folder(handle, storage_id, path_name, storage_type, folder_id, uid); } else { sql = sqlite3_mprintf("UPDATE '%s' SET validity=1 WHERE storage_uuid = '%q' AND path = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, storage_id, path); - if (!stack_query) { ret = _media_svc_sql_query(sql, uid); SQLITE3_SAFE_FREE(sql); @@ -616,7 +441,7 @@ int _media_svc_set_folder_validity(sqlite3 *handle, const char *storage_id, cons media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "_media_svc_get_folder_id_by_foldername fail"); media_svc_retvm_if(!STRING_VALID(start_path_id), MS_MEDIA_ERR_INVALID_PARAMETER, "start_path_id is NULL"); - sql = sqlite3_mprintf("UPDATE '%s' SET validity = %d WHERE storage_uuid = '%q' AND (path LIKE '%q/%%' OR folder_uuid ='%q')", + sql = sqlite3_mprintf("UPDATE '%s' SET validity = %d WHERE storage_uuid = '%q' AND (path LIKE '%q/%%' OR folder_uuid ='%q');", MEDIA_SVC_DB_TABLE_FOLDER, validity, storage_id, start_path, start_path_id); } else { sql = sqlite3_mprintf("UPDATE '%s' SET validity = %d WHERE storage_uuid = '%q' AND path = '%q';", @@ -720,7 +545,6 @@ int _media_svc_get_null_scan_folder_list(sqlite3 *handle, const char *storage_id int idx = 0; int cnt = 0; char *sql = NULL; - char folder_id[MEDIA_SVC_UUID_SIZE+1] = {0,}; sqlite3_stmt *sql_stmt = NULL; if (path == NULL) { @@ -761,24 +585,8 @@ int _media_svc_get_null_scan_folder_list(sqlite3 *handle, const char *storage_id return ret; } } else { - sql = sqlite3_mprintf("SELECT folder_uuid FROM '%s' WHERE storage_uuid = '%q' AND path = '%q'", MEDIA_SVC_DB_TABLE_FOLDER, storage_id, path); - ret = _media_svc_sql_prepare_to_step(handle, sql, &sql_stmt); - - if (ret != MS_MEDIA_ERR_NONE) { - if (ret == MS_MEDIA_ERR_DB_NO_RECORD) - media_svc_debug("there is no folder."); - else - media_svc_error("error when get folder_id by path [%s]. err = [%d]", path, ret); - - return ret; - } - - _strncpy_safe(folder_id, (const char *)sqlite3_column_text(sql_stmt, 0), MEDIA_SVC_UUID_SIZE+1); - - SQLITE3_FINALIZE(sql_stmt); - - sql = sqlite3_mprintf("SELECT count(*) FROM '%s' WHERE path LIKE '%q%%' AND parent_folder_uuid = '%q'", MEDIA_SVC_DB_TABLE_FOLDER, path, folder_id); - + sql = sqlite3_mprintf("SELECT count(*) FROM '%s' WHERE path LIKE '%q/%%' AND name IN (select REPLACE(path,'%q/','') from '%s' WHERE path LIKE '%q/%%'); ", + MEDIA_SVC_DB_TABLE_FOLDER, path, path, MEDIA_SVC_DB_TABLE_FOLDER, path); ret = _media_svc_sql_prepare_to_step(handle, sql, &sql_stmt); if (ret != MS_MEDIA_ERR_NONE) { @@ -789,7 +597,8 @@ int _media_svc_get_null_scan_folder_list(sqlite3 *handle, const char *storage_id cnt = sqlite3_column_int(sql_stmt, 0); SQLITE3_FINALIZE(sql_stmt); if (cnt > 0) { - sql = sqlite3_mprintf("SELECT path FROM '%s' WHERE path LIKE '%q%%' AND parent_folder_uuid = '%q'", MEDIA_SVC_DB_TABLE_FOLDER, path, folder_id); + sql = sqlite3_mprintf("SELECT path FROM '%s' WHERE path LIKE '%q/%%' AND name IN (select REPLACE(path,'%q/','') from '%s' WHERE path LIKE '%q/%%'); ", + MEDIA_SVC_DB_TABLE_FOLDER, path, path, MEDIA_SVC_DB_TABLE_FOLDER, path); } else { *folder_list = NULL; *count = 0; -- 2.7.4