X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fmedia_folder.c;h=60917986ce853a71240d07ff04f18b900ec8c5fc;hb=f54faf3f54cd50adced5de846dc41e67a14c7743;hp=bb1cda5e13e51484762ce7430753140dac0bc824;hpb=a12b274131f416da6f825507c1fd48647da86c02;p=platform%2Fcore%2Fapi%2Fmedia-content.git diff --git a/src/media_folder.c b/src/media_folder.c index bb1cda5..6091798 100755 --- a/src/media_folder.c +++ b/src/media_folder.c @@ -15,50 +15,33 @@ */ -#include #include #include +#ifdef _USE_TVPD_MODE +#include +#endif +#ifdef _USE_TVPD_MODE static char *g_src_path = NULL; - -static char *__media_folder_get_update_folder_sql(media_folder_h folder); - -static char *__media_folder_get_update_folder_sql(media_folder_h folder) -{ - media_folder_s *_folder = (media_folder_s*)folder; - char *return_sql = NULL; - char *name_pinyin = NULL; - bool pinyin_support = FALSE; - - /*Update Pinyin If Support Pinyin*/ - media_svc_check_pinyin_support(&pinyin_support); - if(pinyin_support) - media_svc_get_pinyin(_content_get_db_handle(), _folder->name, &name_pinyin); - - return_sql = sqlite3_mprintf("%q='%q', %q='%q', %q=%d, %q='%q'", - DB_FIELD_FOLDER_PATH, _folder->path, - DB_FIELD_FOLDER_NAME, _folder->name, - DB_FIELD_FOLDER_MODIFIED_TIME, _folder->modified_time, - DB_FIELD_FOLDER_NAME_PINYIN, name_pinyin); - - SAFE_FREE(name_pinyin); - return return_sql; -} +#endif int media_folder_get_folder_count_from_db(filter_h filter, int *folder_count) { int ret = MEDIA_CONTENT_ERROR_NONE; - media_content_debug_func(); + content_retip_if_fail(folder_count); - if(!folder_count) - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } +#ifdef _USE_TVPD_MODE + g_mutex_lock(_content_get_db_mutex()); +#endif ret = _media_db_get_group_count(filter, MEDIA_GROUP_FOLDER, folder_count); +#ifdef _USE_TVPD_MODE + g_mutex_unlock(_content_get_db_mutex()); +#endif + + return ret; } @@ -66,16 +49,18 @@ int media_folder_foreach_folder_from_db(filter_h filter, media_folder_cb callbac { int ret = MEDIA_CONTENT_ERROR_NONE; - media_content_debug_func(); + content_retip_if_fail(callback); - if(callback == NULL) - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } +#ifdef _USE_TVPD_MODE + g_mutex_lock(_content_get_db_mutex()); +#endif ret = _media_db_get_folder(filter, callback, user_data); +#ifdef _USE_TVPD_MODE + g_mutex_unlock(_content_get_db_mutex()); +#endif + return ret; } @@ -83,17 +68,18 @@ int media_folder_get_media_count_from_db(const char *folder_id, filter_h filter, { int ret = MEDIA_CONTENT_ERROR_NONE; - media_content_debug_func(); + content_retip_if_fail(STRING_VALID(folder_id)); + content_retip_if_fail(media_count); - if(STRING_VALID(folder_id) && media_count) - { - ret = _media_db_get_group_item_count(folder_id, filter, MEDIA_GROUP_FOLDER, media_count); - } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } +#ifdef _USE_TVPD_MODE + g_mutex_lock(_content_get_db_mutex()); +#endif + + ret = _media_db_get_group_item_count(folder_id, filter, MEDIA_GROUP_FOLDER, media_count); + +#ifdef _USE_TVPD_MODE + g_mutex_unlock(_content_get_db_mutex()); +#endif return ret; } @@ -102,376 +88,209 @@ int media_folder_foreach_media_from_db(const char *folder_id, filter_h filter, m { int ret = MEDIA_CONTENT_ERROR_NONE; - media_content_debug_func(); + content_retip_if_fail(STRING_VALID(folder_id)); + content_retip_if_fail(callback); - if((callback != NULL) && STRING_VALID(folder_id)) - { - ret = _media_db_get_group_item(folder_id, filter, callback, user_data, MEDIA_GROUP_FOLDER); - } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } +#ifdef _USE_TVPD_MODE + g_mutex_lock(_content_get_db_mutex()); +#endif + + ret = _media_db_get_group_item(folder_id, filter, callback, user_data, MEDIA_GROUP_FOLDER); + +#ifdef _USE_TVPD_MODE + g_mutex_unlock(_content_get_db_mutex()); +#endif return ret; } int media_folder_destroy(media_folder_h folder) { - int ret = MEDIA_CONTENT_ERROR_NONE; media_folder_s *_folder = (media_folder_s*)folder; - if(_folder) - { - SAFE_FREE(_folder->path); - SAFE_FREE(_folder->name); - SAFE_FREE(_folder->folder_id); - SAFE_FREE(_folder); - ret = MEDIA_CONTENT_ERROR_NONE; - } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } - return ret; + content_retip_if_fail(folder); + + g_free(_folder->path); + g_free(_folder->name); + g_free(_folder->folder_id); + g_free(_folder->storage_uuid); + g_free(_folder); + + return MEDIA_CONTENT_ERROR_NONE; } int media_folder_clone(media_folder_h *dst, media_folder_h src) { - int ret = MEDIA_CONTENT_ERROR_NONE; media_folder_s *_src = (media_folder_s*)src; - if(_src != NULL) - { - media_folder_s *_dst = (media_folder_s*)calloc(1, sizeof(media_folder_s)); - if(_dst == NULL) - { - 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->folder_id)) - { - _dst->folder_id = strdup(_src->folder_id); - if(_dst->folder_id == NULL) - { - SAFE_FREE(_dst); - media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); - return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; - } - } - - _dst->storage_type = _src->storage_type; - - if(STRING_VALID(_src->name)) - { - _dst->name = strdup(_src->name); - if(_dst->name == NULL) - { - media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); - media_folder_destroy((media_folder_h)_dst); - return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; - } - } - - if(STRING_VALID(_src->path)) - { - _dst->path = strdup(_src->path); - if(_dst->path == NULL) - { - media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); - media_folder_destroy((media_folder_h)_dst); - return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; - } - } - - *dst = (media_folder_h)_dst; - - ret = MEDIA_CONTENT_ERROR_NONE; - } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + content_retip_if_fail(dst); + content_retip_if_fail(src); - return ret; + media_folder_s *_dst = g_new0(media_folder_s, 1); + + _dst->folder_id = g_strdup(_src->folder_id); + _dst->name = g_strdup(_src->name); + _dst->path = g_strdup(_src->path); + _dst->storage_uuid = g_strdup(_src->storage_uuid); + + *dst = (media_folder_h)_dst; + + return MEDIA_CONTENT_ERROR_NONE; } int media_folder_get_folder_id(media_folder_h folder, char **folder_id) { - int ret = MEDIA_CONTENT_ERROR_NONE; media_folder_s *_folder = (media_folder_s*)folder; - if(_folder) - { - if(STRING_VALID(_folder->folder_id)) - { - *folder_id = strdup(_folder->folder_id); - if(*folder_id == NULL) - { - media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); - return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; - } - } - else - { - *folder_id = NULL; - } - ret = MEDIA_CONTENT_ERROR_NONE; - } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + content_retip_if_fail(folder); + content_retip_if_fail(folder_id); - return ret; + *folder_id = g_strdup(_folder->folder_id); + + return MEDIA_CONTENT_ERROR_NONE; } int media_folder_get_path(media_folder_h folder, char **path) { - int ret = MEDIA_CONTENT_ERROR_NONE; media_folder_s *_folder = (media_folder_s*)folder; - if(_folder) - { - if(STRING_VALID(_folder->path)) - { - *path = strdup(_folder->path); - if(*path == NULL) - { - media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); - return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; - } - } - else - { - *path = NULL; - } - ret = MEDIA_CONTENT_ERROR_NONE; - } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + content_retip_if_fail(folder); + content_retip_if_fail(path); - return ret; + *path = g_strdup(_folder->path); + return MEDIA_CONTENT_ERROR_NONE; } int media_folder_get_name(media_folder_h folder, char **name) { - int ret = MEDIA_CONTENT_ERROR_NONE; media_folder_s *_folder = (media_folder_s*)folder; - if(_folder) - { - if(STRING_VALID(_folder->name)) - { - *name = strdup(_folder->name); - if(*name == NULL) - { - media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); - return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; - } - } - else - { - *name = NULL; - } - ret = MEDIA_CONTENT_ERROR_NONE; - } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + content_retip_if_fail(folder); + content_retip_if_fail(name); - return ret; + *name = g_strdup(_folder->name); + + return MEDIA_CONTENT_ERROR_NONE; } -int media_folder_get_modified_time(media_folder_h folder, time_t* time) +int media_folder_get_folder_from_db(const char *folder_id, media_folder_h *folder) { int ret = MEDIA_CONTENT_ERROR_NONE; - media_folder_s *_folder = (media_folder_s*)folder; - if(_folder) - { - *time = _folder->modified_time; - ret = MEDIA_CONTENT_ERROR_NONE; - } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + sqlite3_stmt *stmt = NULL; + char select_query[DEFAULT_QUERY_SIZE] = {0, }; + media_folder_s *_folder = NULL; - return ret; -} + content_retip_if_fail(STRING_VALID(folder_id)); + content_retip_if_fail(folder); -int media_folder_get_storage_type(media_folder_h folder, media_content_storage_e* storage_type) -{ - int ret = MEDIA_CONTENT_ERROR_NONE; - media_folder_s *_folder = (media_folder_s*)folder; - if(_folder) - { - *storage_type = _folder->storage_type; - ret = MEDIA_CONTENT_ERROR_NONE; - } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + snprintf(select_query, sizeof(select_query), SELECT_FOLDER_FROM_FOLDER, folder_id); + + ret = _content_get_result(select_query, &stmt); + content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + if (sqlite3_step(stmt) == SQLITE_ROW) { + _folder = g_new0(media_folder_s, 1); + + _folder->folder_id = g_strdup(folder_id); + _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 0)); + _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 1)); + _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 3)); + + *folder = (media_folder_h)_folder; } + SQLITE3_FINALIZE(stmt); + return ret; } - -int media_folder_get_folder_from_db(const char *folder_id, media_folder_h *folder) +#ifdef _USE_TVPD_MODE +int media_folder_update_to_db(media_folder_h folder) { int ret = MEDIA_CONTENT_ERROR_NONE; - int ret_view = MEDIA_CONTENT_ERROR_NONE; - sqlite3_stmt *stmt = NULL; - char select_query[DEFAULT_QUERY_SIZE]; + content_warn("DEPRECATION WARNING: media_folder_update_to_db() is deprecated and will be removed from next release."); + media_folder_s *_folder = (media_folder_s*)folder; - if(!STRING_VALID(folder_id)) - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + content_retip_if_fail(folder); + content_retip_if_fail(STRING_VALID(_folder->folder_id)); - memset(select_query, 0x00, sizeof(select_query)); + if (!g_src_path) + return ret; - snprintf(select_query, sizeof(select_query), SELECT_FOLDER_FROM_FOLDER, folder_id); + ret = media_svc_rename_folder(_content_get_db_handle(), _folder->storage_uuid, g_src_path, _folder->path, _content_get_uid()); + SAFE_FREE(g_src_path); - ret = _content_query_prepare(&stmt, select_query, NULL, NULL); - media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + return _content_error_capi(ret); +} - while(sqlite3_step(stmt) == SQLITE_ROW) - { - media_folder_s *_folder = (media_folder_s*)calloc(1, sizeof(media_folder_s)); +int media_folder_set_name(media_folder_h folder, const char *name) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + content_warn("DEPRECATION WARNING: media_folder_set_name() is deprecated and will be removed from next release."); + media_folder_s *_folder = (media_folder_s*)folder; + char *parent_folder_path = NULL; - if(_folder == NULL) - { - media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); - SQLITE3_FINALIZE(stmt); - return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; - } + content_retip_if_fail(folder); + content_retip_if_fail(STRING_VALID(name)); + content_retip_if_fail(name[0] != '.'); + content_retip_if_fail(STRING_VALID(_folder->path)); + content_retip_if_fail(STRING_VALID(_folder->name)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) - _folder->folder_id = strdup((const char *)sqlite3_column_text(stmt, 0)); + // Change name.. + g_free(_folder->name); + _folder->name = g_strdup(name); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1))) - _folder->path = strdup((const char *)sqlite3_column_text(stmt, 1)); + // Change path.. + g_free(g_src_path); + g_src_path = g_strdup(_folder->path); + g_free(_folder->path); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 2))) - _folder->name = strdup((const char *)sqlite3_column_text(stmt, 2)); + parent_folder_path = g_path_get_dirname(g_src_path); + _folder->path = g_strdup_printf("%s/%s", parent_folder_path, name); + g_free(parent_folder_path); - *folder = (media_folder_h)_folder; - } + content_sec_debug("Old[%s] New[%s]", g_src_path, _folder->path); - SQLITE3_FINALIZE(stmt); return ret; } -int media_folder_update_to_db(media_folder_h folder) +int media_folder_get_scan_status(const char *storage_uuid, char* path, media_folder_scan_status_e *scan_status) { int ret = MEDIA_CONTENT_ERROR_NONE; - int len = 0; - media_folder_s *_folder = (media_folder_s*)folder; - - char sql[MAX_QUERY_SIZE]; - memset(sql, '\0', sizeof(sql)); - char *set_sql = NULL; - char *where_sql = NULL; - - if((_folder != NULL) && STRING_VALID(_folder->folder_id) && g_src_path) - { - /* Set modified time */ - time_t date; - time(&date); - _folder->modified_time = date; - - set_sql = __media_folder_get_update_folder_sql((media_folder_h)_folder); - if(set_sql == NULL) - { - media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); - return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; - } - - where_sql = sqlite3_mprintf("folder_uuid='%q'", _folder->folder_id); - - len = snprintf(sql, sizeof(sql), UPDATE_SQL, DB_TABLE_FOLDER, set_sql, where_sql); - if (len > 0) { - sql[len] = '\0'; - } else { - media_content_error("snprintf failed"); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } - - ret = _content_query_sql(sql); - - sqlite3_free(set_sql); - sqlite3_free(where_sql); - - /* Do folder rename operation using libmedia-service */ - ret = media_svc_rename_folder(_content_get_db_handle(), g_src_path, _folder->path, tzplatform_getuid(TZ_USER_NAME)); - return _content_error_capi(MEDIA_CONTENT_TYPE, ret); - } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + int status = MEDIA_DIR_SCAN_NONE; + + content_retip_if_fail(STRING_VALID(storage_uuid)); + content_retip_if_fail(STRING_VALID(path)); + content_retip_if_fail(scan_status); + + ret = media_svc_get_folder_scan_status(_content_get_db_handle(), storage_uuid, path, &status); + if (ret != MS_MEDIA_ERR_NONE) { + content_error("media_svc_get_folder_scan_status failed"); + ret = _content_error_capi(ret); + } else { + *scan_status = status; } return ret; } -int media_folder_set_name(media_folder_h folder, const char *name) +int media_folder_reset_scan_status(const char *storage_uuid, const char* path) { int ret = MEDIA_CONTENT_ERROR_NONE; - media_folder_s *_folder = (media_folder_s*)folder; - if(_folder != NULL && STRING_VALID(name)) - { - if (STRING_VALID(_folder->path) && STRING_VALID(_folder->name)) { - char *folder_path = NULL; - char new_folder_path[MAX_QUERY_SIZE] = {0,}; - - folder_path = g_path_get_dirname(_folder->path); - media_content_debug("Existed Folder Path : %s", _folder->path); - snprintf(new_folder_path, sizeof(new_folder_path), "%s/%s", folder_path, name); - media_content_debug("New Path : %s", new_folder_path); - - SAFE_FREE(g_src_path); - g_src_path = strdup(_folder->path); - - SAFE_FREE(_folder->path); - SAFE_FREE(_folder->name); - SAFE_FREE(folder_path); - _folder->path = strdup(new_folder_path); - - if(_folder->path == NULL) - { - media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); - return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; - } - } - - _folder->name = strdup(name); - if(_folder->name == NULL) - { - media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); - return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; - } + content_retip_if_fail(STRING_VALID(path)); + + ret = media_svc_set_folder_validity(FALSE, storage_uuid, path, 0, TRUE, _content_get_uid()); + if (ret != MS_MEDIA_ERR_NONE) { + content_error("set folder validity failed"); + return _content_error_capi(ret); } - else - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + + ret = media_svc_set_folder_scan_status(storage_uuid, path, MEDIA_DIR_SCAN_NONE, false, _content_get_uid()); + if (ret != MS_MEDIA_ERR_NONE) { + content_error("media_folder_reset_scan_status failed"); + return _content_error_capi(ret); } return ret; } +#endif