Change logic of get_parent_folder_id() 71/136271/4 accepted/tizen/unified/20170703.063946 submit/tizen/20170630.083231
authorMinje Ahn <minje.ahn@samsung.com>
Thu, 29 Jun 2017 02:01:48 +0000 (11:01 +0900)
committerhj kim <backto.kim@samsung.com>
Fri, 30 Jun 2017 01:39:50 +0000 (01:39 +0000)
Usage is low. So, DB access when API is called.

Change-Id: Id35568e34805b1116fa30c5b036c20d0584c784d
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
include/media_info_private.h
include_product/media_info_private.h
src/media_db.c
src/media_folder.c

index 4c9ae65..6a06dd0 100755 (executable)
@@ -190,7 +190,6 @@ typedef struct _filter_s {
 
 typedef struct {
        char *folder_id;
-       char *parent_folder_id;
        char *path;
        char *name;
        time_t modified_time;
index 7022dfb..8a2c6d0 100755 (executable)
@@ -202,7 +202,6 @@ typedef struct _filter_s {
 
 typedef struct {
        char *folder_id;
-       char *parent_folder_id;
        char *path;
        char *name;
        time_t modified_time;
index 5b0f1f2..a88c97f 100755 (executable)
@@ -614,11 +614,9 @@ int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_d
        char *condition_query = NULL;
        char *option_query = NULL;
        sqlite3_stmt *stmt = NULL;
-       sqlite3_stmt *sub_stmt = NULL;
        attribute_h attr = NULL;
        filter_s *_filter = (filter_s*)filter;
        char *tmp_path = NULL;
-       char *parent_path = NULL;
        char repl_path[MAX_PATH_LEN] = {0, };
 
        attr = _content_get_alias_attirbute_handle();
@@ -652,32 +650,14 @@ int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_d
                tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
                _media_content_rollback_path(tmp_path, repl_path);
                _folder->path = g_strdup(repl_path);
+               SAFE_FREE(tmp_path);
+
                _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
                _folder->storage_type = (int)sqlite3_column_int(stmt, 3);
                _folder->modified_time = (int)sqlite3_column_int(stmt, 4);
                _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 5));
                _folder->folder_order = (int)sqlite3_column_int(stmt, 6);
 
-               parent_path = g_path_get_dirname(tmp_path);
-               memset(select_query, 0x00, sizeof(select_query));
-               snprintf(select_query, sizeof(select_query), SELECT_FOLDER_ID_BY_PATH, parent_path);
-
-               SAFE_FREE(tmp_path);
-               SAFE_FREE(parent_path);
-
-               ret = _content_query_prepare(&sub_stmt, select_query, NULL, NULL);
-               if (ret != MEDIA_CONTENT_ERROR_NONE) {
-                       media_content_error("_content_query_prepare failed");
-                       media_folder_destroy((media_folder_h) _folder);
-                       SQLITE3_FINALIZE(stmt);
-                       return ret;
-               }
-
-               if (sqlite3_step(sub_stmt) == SQLITE_ROW)
-                       _folder->parent_folder_id = g_strdup((const char *)sqlite3_column_text(sub_stmt, 0));
-
-               SQLITE3_FINALIZE(sub_stmt);
-
                if (callback((media_folder_h)_folder, user_data) == false) {
                        media_folder_destroy((media_folder_h) _folder);
                        break;
index abf288f..8ef419a 100755 (executable)
@@ -108,7 +108,6 @@ int media_folder_destroy(media_folder_h folder)
                SAFE_FREE(_folder->path);
                SAFE_FREE(_folder->name);
                SAFE_FREE(_folder->folder_id);
-               SAFE_FREE(_folder->parent_folder_id);
                SAFE_FREE(_folder->storage_uuid);
                SAFE_FREE(_folder);
                ret = MEDIA_CONTENT_ERROR_NONE;
@@ -137,15 +136,6 @@ int media_folder_clone(media_folder_h *dst, media_folder_h src)
                        }
                }
 
-               if (STRING_VALID(_src->parent_folder_id)) {
-                       _dst->parent_folder_id = strdup(_src->parent_folder_id);
-                       if (_dst->parent_folder_id == NULL) {
-                               media_folder_destroy((media_folder_h)_dst);
-                               media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
-                               return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-                       }
-               }
-
                if (STRING_VALID(_src->name)) {
                        _dst->name = strdup(_src->name);
                        if (_dst->name == NULL) {
@@ -214,14 +204,32 @@ int media_folder_get_parent_folder_id(media_folder_h folder, char **parent_folde
        int ret = MEDIA_CONTENT_ERROR_NONE;
        media_content_warn("DEPRECATION WARNING: media_folder_get_parent_folder_id() is deprecated and will be removed from next release.");
        media_folder_s *_folder = (media_folder_s*)folder;
+       sqlite3_stmt *stmt = NULL;
+       char tmp_path[MAX_PATH_LEN] = {0, };
+       char *parent_path = NULL;
+       char select_query[MAX_QUERY_SIZE] = {0, };
 
+       /* Usage is low. So, DB access when this fuction is called */
        if (_folder) {
-               if (STRING_VALID(_folder->parent_folder_id)) {
-                       *parent_folder_id = strdup(_folder->parent_folder_id);
-                       media_content_retvm_if(*parent_folder_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
-               } else {
+               memset(tmp_path, 0x00, sizeof(tmp_path));
+               memset(select_query, 0x00, sizeof(select_query));
+
+               _media_content_replace_path(_folder->path, tmp_path);
+
+               parent_path = g_path_get_dirname(tmp_path);
+               snprintf(select_query, sizeof(select_query), SELECT_FOLDER_ID_BY_PATH, parent_path);
+               SAFE_FREE(parent_path);
+
+               ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
+               media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+
+               if (sqlite3_step(stmt) == SQLITE_ROW)
+                       *parent_folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
+               else
                        *parent_folder_id = NULL;
-               }
+
+               SQLITE3_FINALIZE(stmt);
+
                ret = MEDIA_CONTENT_ERROR_NONE;
        } else {
                media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
@@ -355,7 +363,6 @@ int media_folder_get_folder_from_db(const char *folder_id, media_folder_h *folde
        sqlite3_stmt *stmt = NULL;
        char select_query[DEFAULT_QUERY_SIZE];
        char *tmp_path = NULL;
-       char *parent_path = NULL;
        char repl_path[MAX_PATH_LEN] = {0, };
        media_folder_s *_folder = NULL;
 
@@ -365,7 +372,6 @@ int media_folder_get_folder_from_db(const char *folder_id, media_folder_h *folde
        }
 
        memset(select_query, 0x00, sizeof(select_query));
-
        snprintf(select_query, sizeof(select_query), SELECT_FOLDER_FROM_FOLDER, folder_id);
 
        ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
@@ -384,6 +390,8 @@ int media_folder_get_folder_from_db(const char *folder_id, media_folder_h *folde
                tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
                _media_content_rollback_path(tmp_path, repl_path);
                _folder->path = g_strdup(repl_path);
+               SAFE_FREE(tmp_path);
+
                _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
                _folder->modified_time = (int)sqlite3_column_int(stmt, 3);
                _folder->storage_type = (int)sqlite3_column_int(stmt, 5);
@@ -395,24 +403,6 @@ int media_folder_get_folder_from_db(const char *folder_id, media_folder_h *folde
 
        SQLITE3_FINALIZE(stmt);
 
-       /*Get parent UUID */
-       if (STRING_VALID(tmp_path)) {
-               parent_path = g_path_get_dirname(tmp_path);
-               memset(select_query, 0x00, sizeof(select_query));
-               snprintf(select_query, sizeof(select_query), SELECT_FOLDER_ID_BY_PATH, parent_path);
-
-               SAFE_FREE(tmp_path);
-               SAFE_FREE(parent_path);
-
-               ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
-               media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
-
-               if (sqlite3_step(stmt) == SQLITE_ROW)
-                       _folder->parent_folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
-
-               SQLITE3_FINALIZE(stmt);
-       }
-
        return ret;
 }