Improve readability of media_bookmark
[platform/core/api/media-content.git] / src / media_playlist.c
index 39dbf19..40be502 100755 (executable)
@@ -84,11 +84,11 @@ static int __media_playlist_insert_playlist_record(const char *playlist_name, in
 
        select_query = sqlite3_mprintf(SELECT_PLAYLIST_ID_FROM_PLAYLIST, playlist_name);
 
-       ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
+       ret = _content_get_result(select_query, &stmt);
        SQLITE3_SAFE_FREE(select_query);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       while (sqlite3_step(stmt) == SQLITE_ROW)
+       if (sqlite3_step(stmt) == SQLITE_ROW)
                *playlist_id = (int)sqlite3_column_int(stmt, 0);
 
        SQLITE3_FINALIZE(stmt);
@@ -109,21 +109,20 @@ static int __media_playlist_insert_item_to_playlist(int playlist_id, const char
        snprintf(select_query, sizeof(select_query), SELECT_MAX_PLAY_ORDER_FROM_PLAYLIST_VIEW, playlist_id);
 
        /* get the max play_order */
-       ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
+       ret = _content_get_result(select_query, &stmt);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       while (sqlite3_step(stmt) == SQLITE_ROW)
+       if (sqlite3_step(stmt) == SQLITE_ROW)
                play_order = (int)sqlite3_column_int(stmt, 0);
 
        SQLITE3_FINALIZE(stmt);
 
        ++play_order;
 
-       query_str = sqlite3_mprintf("INSERT INTO %q (playlist_id, media_uuid, play_order) values (%d, '%q', %d);",
-                       DB_TABLE_PLAYLIST_MAP, playlist_id, media_id, play_order);
-       ret = media_svc_append_query(query_str, tzplatform_getuid(TZ_USER_NAME));
+       query_str = sqlite3_mprintf(INSERT_PLAYLIST_ITEM_TO_PLAYLIST_MAP, playlist_id, media_id, play_order);
+       ret = media_svc_append_query(query_str, _content_get_uid());
 
-       return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
+       return _content_error_capi(ret);
 }
 
 static int __media_playlist_remove_item_from_playlist(int playlist_id, int playlist_member_id)
@@ -132,9 +131,9 @@ static int __media_playlist_remove_item_from_playlist(int playlist_id, int playl
        char *query_str = NULL;
 
        query_str = sqlite3_mprintf(REMOVE_PLAYLIST_ITEM_FROM_PLAYLIST_MAP, playlist_id, playlist_member_id);
-       ret = media_svc_append_query(query_str, tzplatform_getuid(TZ_USER_NAME));
+       ret = media_svc_append_query(query_str, _content_get_uid());
 
-       return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
+       return _content_error_capi(ret);
 }
 
 static int __media_playlist_update_playlist_name(int playlist_id, const char *playlist_name)
@@ -143,9 +142,9 @@ static int __media_playlist_update_playlist_name(int playlist_id, const char *pl
        char *query_str = NULL;
 
        query_str = sqlite3_mprintf(UPDATE_PLAYLIST_NAME_FROM_PLAYLIST, playlist_name, playlist_id);
-       ret = media_svc_append_query(query_str, tzplatform_getuid(TZ_USER_NAME));
+       ret = media_svc_append_query(query_str, _content_get_uid());
 
-       return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
+       return _content_error_capi(ret);
 }
 
 static int __media_playlist_update_thumbnail_path(int playlist_id, const char *path)
@@ -154,9 +153,9 @@ static int __media_playlist_update_thumbnail_path(int playlist_id, const char *p
        char *query_str = NULL;
 
        query_str = sqlite3_mprintf(UPDATE_PLAYLIST_THUMBNAIL_FROM_PLAYLIST, path, playlist_id);
-       ret = media_svc_append_query(query_str, tzplatform_getuid(TZ_USER_NAME));
+       ret = media_svc_append_query(query_str, _content_get_uid());
 
-       return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
+       return _content_error_capi(ret);
 }
 
 static int __media_playlist_update_play_order(int playlist_id, int playlist_member_id, int play_order)
@@ -165,9 +164,9 @@ static int __media_playlist_update_play_order(int playlist_id, int playlist_memb
        char *query_str = NULL;
 
        query_str = sqlite3_mprintf(UPDATE_PLAYLIST_ORDER_FROM_PLAYLIST_MAP, play_order, playlist_id, playlist_member_id);
-       ret = media_svc_append_query(query_str, tzplatform_getuid(TZ_USER_NAME));
+       ret = media_svc_append_query(query_str, _content_get_uid());
 
-       return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
+       return _content_error_capi(ret);
 }
 
 static bool __media_playlist_media_info_cb(media_info_h media, void *user_data)
@@ -241,16 +240,24 @@ static int __media_playlist_import_item_from_file(const char* playlist_path, cha
        fp = fopen(playlist_path, "rb");
        media_content_retvm_if(fp == NULL, MEDIA_CONTENT_ERROR_INVALID_OPERATION, "fopen fail");
 
-       fseek(fp, 0, SEEK_END);
+       if (fseek(fp, 0, SEEK_END) < 0) {
+               media_content_stderror("fseek failed");
+               fclose(fp);
+               return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
+       }
        file_size = ftell(fp);
-       fseek(fp, 0 , SEEK_SET);
-
        if (file_size == 0) {
                media_content_debug("file is empty.");
                fclose(fp);
                return MEDIA_CONTENT_ERROR_NONE;
        }
 
+       if (fseek(fp, 0, SEEK_SET) < 0) {
+               media_content_stderror("fseek failed");
+               fclose(fp);
+               return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
+       }
+
        *item_list = calloc(current_max_size, sizeof(char*));
        if (*item_list == NULL) {
                fclose(fp);
@@ -499,15 +506,12 @@ int media_playlist_get_playlist_from_db(int playlist_id, media_playlist_h *playl
 
                snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_FROM_PLAYLIST, playlist_id);
 
-               ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
+               ret = _content_get_result(select_query, &stmt);
                media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
                media_playlist_s *_playlist = NULL;
 
-               while (sqlite3_step(stmt) == SQLITE_ROW) {
-                       if (_playlist)
-                               media_playlist_destroy((media_playlist_h)_playlist);
-
+               if (sqlite3_step(stmt) == SQLITE_ROW) {
                        _playlist = (media_playlist_s*)calloc(1, sizeof(media_playlist_s));
                        if (_playlist == NULL) {
                                media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
@@ -515,11 +519,14 @@ int media_playlist_get_playlist_from_db(int playlist_id, media_playlist_h *playl
                                return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
                        }
 
-                       _playlist->playlist_id = (int)sqlite3_column_int(stmt, 0);
-                       _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
-                       _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
+                       _playlist->playlist_id = playlist_id;
+                       _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
+                       _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
 
                        *playlist = (media_playlist_h)_playlist;
+               } else {
+                       media_content_error("Nonexistent playlist id[%d]", playlist_id);
+                       ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
                }
 
                SQLITE3_FINALIZE(stmt);
@@ -608,10 +615,10 @@ int media_playlist_get_play_order(media_playlist_h playlist, int playlist_member
 
        snprintf(select_query, sizeof(select_query), SELECT_PLAY_ORDER_FROM_PLAYLIST_VIEW, playlist_id, playlist_member_id);
 
-       ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
+       ret = _content_get_result(select_query, &stmt);
        media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
 
-       while (sqlite3_step(stmt) == SQLITE_ROW)
+       if (sqlite3_step(stmt) == SQLITE_ROW)
                *play_order = (int)sqlite3_column_int(stmt, 0);
 
        SQLITE3_FINALIZE(stmt);
@@ -819,13 +826,17 @@ int media_playlist_update_to_db(media_playlist_h playlist)
                        default:
                        break;
                        }
+
+                       if (ret != MEDIA_CONTENT_ERROR_NONE)
+                               media_content_error("Failed some operation[%d]", _playlist_item->function);
                }
+
        }
-       ret = media_svc_send_query(tzplatform_getuid(TZ_USER_NAME));
+       ret = media_svc_send_query(_content_get_uid());
 
        __media_playlist_item_release(_playlist);
 
-       return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
+       return _content_error_capi(ret);
 }
 
 int media_playlist_import_from_file(const char *path, const char *playlist_name, media_playlist_h *playlist)
@@ -867,7 +878,7 @@ int media_playlist_import_from_file(const char *path, const char *playlist_name,
                        media_content_error("error media_filter_create");
                        return ret;
                }
-               condition = sqlite3_mprintf("path = '%q'", import_item_list[idx]);
+               condition = sqlite3_mprintf("media_path = '%q'", import_item_list[idx]);
                ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
                if (ret != MEDIA_CONTENT_ERROR_NONE) {
                        __media_playlist_destroy_import_item(import_item_list, import_item_count);
@@ -917,7 +928,6 @@ int media_playlist_export_to_file(media_playlist_h playlist, const char* path)
        GList *item_list = NULL;
        unsigned int idx = 0;
        char repl_path[MAX_PATH_LEN] = {0, };
-       char repl_item[MAX_QUERY_SIZE] = {0, };
 
        media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path");
        media_content_retvm_if(_playlist == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid playlist");
@@ -938,14 +948,13 @@ int media_playlist_export_to_file(media_playlist_h playlist, const char* path)
 
        for (idx = 0; idx < g_list_length(item_list); idx++) {
                char *item = g_list_nth_data(item_list, idx);
-               memset(repl_item, 0, sizeof(repl_item));
-               ret = _media_content_rollback_path(item, repl_item);
-
-               ret = __media_playlist_append_to_file(repl_path, repl_item);
-               if (ret != MEDIA_CONTENT_ERROR_NONE) {
-                       g_list_free_full(item_list, __media_playlist_destroy_export_item);
-                       media_content_error("Fail to export paths into file");
-                       return ret;
+               if (STRING_VALID(item)) {
+                       ret = __media_playlist_append_to_file(repl_path, item);
+                       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+                               g_list_free_full(item_list, __media_playlist_destroy_export_item);
+                               media_content_error("Fail to export paths into file");
+                               return ret;
+                       }
                }
        }
 
@@ -953,3 +962,82 @@ int media_playlist_export_to_file(media_playlist_h playlist, const char* path)
 
        return ret;
 }
+
+int media_playlist_create(media_playlist_h *playlist)
+{
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+
+       media_content_retvm_if(playlist == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid playlist");
+
+       media_playlist_s *_playlist = (media_playlist_s*)calloc(1, sizeof(media_playlist_s));
+       media_content_retvm_if(_playlist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
+
+       _playlist->playlist_id = -1;
+       _playlist->name = NULL;
+       _playlist->thumbnail_path = NULL;
+       _playlist->item_list = NULL;
+
+       *playlist = (media_playlist_h)_playlist;
+
+       return ret;
+}
+
+int media_playlist_get_play_order_v2(int playlist_id, int playlist_member_id, int *play_order)
+{
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       sqlite3_stmt *stmt = NULL;
+       char select_query[DEFAULT_QUERY_SIZE] = {0, };
+
+       if ((playlist_id < 0) || (playlist_member_id < 0) || (play_order == NULL)) {
+               media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
+               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+       }
+
+       memset(select_query, 0x00, sizeof(select_query));
+
+       snprintf(select_query, sizeof(select_query), SELECT_PLAY_ORDER_FROM_PLAYLIST_VIEW, playlist_id, playlist_member_id);
+
+       ret = _content_get_result(select_query, &stmt);
+       media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
+
+       if (sqlite3_step(stmt) == SQLITE_ROW)
+               *play_order = (int)sqlite3_column_int(stmt, 0);
+
+       SQLITE3_FINALIZE(stmt);
+
+       return ret;
+}
+
+int media_playlist_insert_to_db_v2(media_playlist_h playlist)
+{
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       media_playlist_s *_playlist = (media_playlist_s*)playlist;
+       int playlist_id = 0;
+
+       media_content_retvm_if(_playlist == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid playlist");
+       media_content_retvm_if(_playlist->playlist_id != -1, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid playlist insert");
+
+       ret = __media_playlist_insert_playlist_record(_playlist->name, &playlist_id);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               __media_playlist_item_release(_playlist);
+               media_content_error("Insert playlist Fail");
+               return ret;
+       }
+
+       _playlist->playlist_id = playlist_id;
+
+       ret = media_playlist_update_to_db(playlist);
+
+       return ret;
+}
+
+int media_playlist_update_to_db_v2(int playlist_id, media_playlist_h playlist)
+{
+       media_playlist_s *_playlist = (media_playlist_s*)playlist;
+
+       media_content_retvm_if(_playlist == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid playlist");
+
+       _playlist->playlist_id = playlist_id;
+
+       return media_playlist_update_to_db(playlist);
+}