Improve count query
[platform/core/api/media-content.git] / src / media_content.c
old mode 100755 (executable)
new mode 100644 (file)
index f66ffef..cf55609
@@ -36,20 +36,25 @@ uid_t _content_get_uid(void)
                return content_g_uid;
 }
 
-int _content_query_prepare(char *select_query, char *condition_query, char *option_query, sqlite3_stmt **stmt)
+int _content_query_prepare(const char *select_query, const char *condition_query, const char *option_query, sqlite3_stmt **stmt)
 {
        int ret = MEDIA_CONTENT_ERROR_NONE;
        char *query = NULL;
 
        media_content_retvm_if(!STRING_VALID(select_query), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid select_query");
 
-       if (!STRING_VALID(condition_query))
-               condition_query = (char *)" ";
-
-       if (!STRING_VALID(option_query))
-               option_query = (char *)" ";
+       if (STRING_VALID(condition_query)) {
+               if (STRING_VALID(option_query))
+                       query = sqlite3_mprintf("%s AND %s %s", select_query, condition_query, option_query);
+               else
+                       query = sqlite3_mprintf("%s AND %s", select_query, condition_query);
+       } else {
+               if (STRING_VALID(option_query))
+                       query = sqlite3_mprintf("%s %s", select_query, option_query);
+               else
+                       query = sqlite3_mprintf("%s", select_query);
+       }
 
-       query = sqlite3_mprintf("%s %s %s", select_query, condition_query, option_query);
        ret = _content_get_result(query, stmt);
        SQLITE3_SAFE_FREE(query);
 
@@ -136,45 +141,37 @@ int _content_query_prepare_by_union_select(sqlite3_stmt **stmt, char *select_que
 }
 #endif
 
-int _content_error_capi(int content_error)
+int _content_error_capi(int internal_error)
 {
-       if (content_error != MEDIA_CONTENT_ERROR_NONE)
-               media_content_error("MS Error[%d]", content_error);
-
-       /*Error None*/
-       if (content_error == MS_MEDIA_ERR_NONE)
+       if (internal_error == MS_MEDIA_ERR_NONE)
                return MEDIA_CONTENT_ERROR_NONE;
 
-       /* Internal operation error*/
-       else if ((content_error == MS_MEDIA_ERR_INVALID_PARAMETER) ||
-               (content_error == MS_MEDIA_ERR_INVALID_PATH) ||
-               (content_error == MS_MEDIA_ERR_THUMB_DUPLICATED_REQUEST))
-               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+       media_content_error("MS Error[%d]", internal_error);
 
-       else if (content_error == MS_MEDIA_ERR_OUT_OF_MEMORY)
+       switch (internal_error) {
+       case MS_MEDIA_ERR_INVALID_PARAMETER:
+               return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
+       case MS_MEDIA_ERR_OUT_OF_MEMORY:
                return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
-
-       /* DB operation error*/
-       else if (content_error == MS_MEDIA_ERR_DB_BUSY_FAIL)
+       case MS_MEDIA_ERR_DB_BUSY_FAIL:
                return MEDIA_CONTENT_ERROR_DB_BUSY;
-
-       else if ((content_error <= MS_MEDIA_ERR_DB_CONNECT_FAIL) && (content_error >= MS_MEDIA_ERR_DB_INTERNAL))
+       case MS_MEDIA_ERR_DB_CONSTRAINT_FAIL:
+       case MS_MEDIA_ERR_DB_NO_RECORD:
+       case MS_MEDIA_ERR_DB_CORRUPT:
+       case MS_MEDIA_ERR_DB_FULL_FAIL:
+       case MS_MEDIA_ERR_DB_RESET:
+       case MS_MEDIA_ERR_DB_INTERNAL:
                return MEDIA_CONTENT_ERROR_DB_FAILED;
-
-       /* IPC operation error*/
-       else if ((content_error <= MS_MEDIA_ERR_SOCKET_CONN) && (content_error >= MS_MEDIA_ERR_SOCKET_INTERNAL))
+       case MS_MEDIA_ERR_IPC:
                return MEDIA_CONTENT_ERROR_NETWORK;
-
-       /* MEDIA SERVER error*/
-       else if (content_error == MS_MEDIA_ERR_PERMISSION_DENIED)
+       case MS_MEDIA_ERR_PERMISSION_DENIED:
                return MEDIA_CONTENT_ERROR_PERMISSION_DENIED;
-
-       /* Thumbnail error*/
-       else if ((content_error == MS_MEDIA_ERR_THUMB_TOO_BIG) || (content_error == MS_MEDIA_ERR_THUMB_UNSUPPORTED))
-                       return MEDIA_CONTENT_ERROR_UNSUPPORTED_CONTENT;
-
-       /*ETC*/
-       return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
+       case MS_MEDIA_ERR_THUMB_TOO_BIG:
+       case MS_MEDIA_ERR_THUMB_UNSUPPORTED:
+               return MEDIA_CONTENT_ERROR_UNSUPPORTED_CONTENT;
+       default:
+               return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
+       }
 }
 
 int _content_query_sql(char *query_str)
@@ -283,7 +280,7 @@ int media_content_scan_file(const char *path)
                /* This means this path has to be inserted or refreshed */
                folder_path = g_path_get_dirname(repl_path);
                ret = _media_util_check_ignore_dir(folder_path, &ignore_dir);
-               SAFE_FREE(folder_path);
+               g_free(folder_path);
 
                media_content_retvm_if(ignore_dir == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid folder path");
                /* check feature */
@@ -351,7 +348,8 @@ void _media_content_scan_cb(media_request_result_s* result, void *user_data)
        err = _content_error_capi(result->result);
 #ifdef _USE_TVPD_MODE
        if (result->request_type != MEDIA_REQUEST_SCAN_COMPLETE &&
-               result->request_type != MEDIA_REQUEST_SCAN_PARTIAL) {
+               result->request_type != MEDIA_REQUEST_SCAN_PARTIAL &&
+               result->request_type != MEDIA_RECURSIVE_START) {
                if (cb_data && cb_data->callback) {
                        media_content_debug("begin:User callback is being called now, result=%d", err);
                        cb_data->callback(err, cb_data->user_data);
@@ -389,6 +387,8 @@ void _media_content_scan_cb_v2(media_request_result_s* result, void *user_data)
                complete_phase = MEDIA_CONTENT_SCAN_COMPLETE;
        else if (result->request_type == MEDIA_REQUEST_EXTRACT_COMPLETE)
                complete_phase = MEDIA_CONTENT_EXTRACT_COMPLETE;
+       else if (result->request_type == MEDIA_RECURSIVE_START)
+               complete_phase = MEDIA_CONTENT_RECURSIVE_START;
 
        if (cb_data && cb_data->callback)
                cb_data->callback(err, complete_phase, cb_data->user_data);
@@ -396,7 +396,8 @@ void _media_content_scan_cb_v2(media_request_result_s* result, void *user_data)
                media_content_debug("run error");
 
        if ((result->request_type != MEDIA_REQUEST_SCAN_COMPLETE) &&
-       (result->request_type != MEDIA_REQUEST_SCAN_PARTIAL))
+       (result->request_type != MEDIA_REQUEST_SCAN_PARTIAL) &&
+       (result->request_type != MEDIA_RECURSIVE_START))
                SAFE_FREE(cb_data);
 
        return;
@@ -552,10 +553,21 @@ int media_content_add_db_updated_cb(media_content_db_update_cb callback, void *u
        noti_info->user_data = user_data;
 
        ret = media_db_update_subscribe_internal((MediaNotiHandle*)noti_handle, _media_content_db_update_noti_cb, (void *)noti_info);
+       if (ret != MS_MEDIA_ERR_NONE)
+               SAFE_FREE(noti_info);
 
        return _content_error_capi(ret);
 }
 
+#ifdef TIZEN_FEATURE_COMPATIBILITY
+int media_content_set_db_updated_cb(media_content_db_update_cb callback, void *user_data)
+{
+       media_content_warn("DEPRECATION WARNING: media_content_set_db_updated_cb() is removed from 5.0.");
+
+       return MEDIA_CONTENT_ERROR_NONE;
+}
+#endif
+
 void __media_content_clear_user_data(void *user_data)
 {
        media_noti_cb_s *noti_info = user_data;