X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fcommon%2Fmedia-svc.c;h=c8837f0b93cd9bd4ba15a99b83cc9995d6225569;hb=f64c28a18827b4995b8cd73d98ea8b875205895f;hp=2b8231e90968249c826fecd2f2f7c758804875f1;hpb=2aa0a851bf3e2cb03c5481040fad9ea0a0ff8d1c;p=platform%2Fcore%2Fmultimedia%2Flibmedia-service.git diff --git a/src/common/media-svc.c b/src/common/media-svc.c index 2b8231e..c8837f0 100755 --- a/src/common/media-svc.c +++ b/src/common/media-svc.c @@ -3,8 +3,6 @@ * * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. * - * Contact: Hyunjun Ko , Haejeong Kim - * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -186,22 +184,20 @@ int media_svc_insert_item_end(uid_t uid) return ret; } -int media_svc_insert_item_bulk(sqlite3 *handle, const char *storage_id, ms_user_storage_type_e storage_type, const char *path, uid_t uid) +int media_svc_insert_item_bulk(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; - char folder_uuid[MEDIA_SVC_UUID_SIZE + 1] = {0, }; + long long int folder_id = 0; media_svc_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Handle is NULL"); media_svc_retvm_if(!STRING_VALID(storage_id), MS_MEDIA_ERR_INVALID_PARAMETER, "storage_id is NULL"); media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL"); - media_svc_retvm_if(!_media_svc_is_valid_storage_type(storage_type), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid storage_type"); media_svc_content_info_s content_info; memset(&content_info, 0, sizeof(media_svc_content_info_s)); /*Set media info*/ - /* if drm_contentinfo is not NULL, the file is OMA DRM.*/ - ret = _media_svc_set_media_info(&content_info, storage_id, storage_type, path, false); + ret = _media_svc_set_media_info(&content_info, storage_id, path, false); if (ret != MS_MEDIA_ERR_NONE) return ret; @@ -210,34 +206,31 @@ int media_svc_insert_item_bulk(sqlite3 *handle, const char *storage_id, ms_user_ ret = _media_svc_extract_image_metadata(&content_info); break; case MEDIA_SVC_MEDIA_TYPE_VIDEO: + ret = _media_svc_extract_video_metadata(&content_info); + break; case MEDIA_SVC_MEDIA_TYPE_SOUND: case MEDIA_SVC_MEDIA_TYPE_MUSIC: - ret = _media_svc_extract_media_metadata(handle, true, &content_info, uid); + _media_svc_extract_audio_metadata(handle, true, &content_info, uid); break; case MEDIA_SVC_MEDIA_TYPE_BOOK: ret = _media_svc_extract_book_metadata(&content_info); - /* The 'TITLE' should always be filled in */ - if (!content_info.media_meta.title || strlen(content_info.media_meta.title) == 0) { - g_free(content_info.media_meta.title); - content_info.media_meta.title = _media_svc_get_title_by_path(content_info.path); - } break; default: /* The 'TITLE' should always be filled in */ - content_info.media_meta.title = _media_svc_get_title_by_path(content_info.path); + content_info.media_meta.title = _media_svc_get_title_from_filename(content_info.file_name); break; } media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info); /*Set or Get folder id*/ - ret = _media_svc_get_and_append_folder_id_by_path(handle, true, storage_id, path, storage_type, folder_uuid, uid); + ret = _media_svc_get_and_append_folder_id_by_path(handle, true, storage_id, path, &folder_id, uid); media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info); - content_info.folder_uuid = g_strdup(folder_uuid); - media_svc_retv_del_if(content_info.folder_uuid == NULL, MS_MEDIA_ERR_INTERNAL, &content_info); + content_info.folder_id = folder_id; + media_svc_retv_del_if(content_info.folder_id <= 0, MS_MEDIA_ERR_INTERNAL, &content_info); - ret = _media_svc_insert_item_with_data(true, &content_info, true, uid); + ret = _media_svc_insert_item_stack(&content_info); media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info); if (g_insert_with_noti) @@ -259,21 +252,20 @@ int media_svc_insert_item_bulk(sqlite3 *handle, const char *storage_id, ms_user_ return MS_MEDIA_ERR_NONE; } -int media_svc_insert_item_immediately(sqlite3 *handle, const char *storage_id, ms_user_storage_type_e storage_type, const char *path, uid_t uid) +int media_svc_insert_item_immediately(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; - char folder_uuid[MEDIA_SVC_UUID_SIZE + 1] = {0, }; + long long int folder_id = 0; media_svc_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Handle is NULL"); media_svc_retvm_if(!STRING_VALID(storage_id), MS_MEDIA_ERR_INVALID_PARAMETER, "storage_id is NULL"); media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL"); - media_svc_retvm_if(!_media_svc_is_valid_storage_type(storage_type), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid storage_type"); media_svc_content_info_s content_info; memset(&content_info, 0, sizeof(media_svc_content_info_s)); /*Set media info*/ - ret = _media_svc_set_media_info(&content_info, storage_id, storage_type, path, false); + ret = _media_svc_set_media_info(&content_info, storage_id, path, false); if (ret != MS_MEDIA_ERR_NONE) return ret; @@ -282,32 +274,29 @@ int media_svc_insert_item_immediately(sqlite3 *handle, const char *storage_id, m ret = _media_svc_extract_image_metadata(&content_info); break; case MEDIA_SVC_MEDIA_TYPE_VIDEO: + ret = _media_svc_extract_video_metadata(&content_info); + break; case MEDIA_SVC_MEDIA_TYPE_SOUND: case MEDIA_SVC_MEDIA_TYPE_MUSIC: - ret = _media_svc_extract_media_metadata(handle, false, &content_info, uid); + _media_svc_extract_audio_metadata(handle, false, &content_info, uid); break; case MEDIA_SVC_MEDIA_TYPE_BOOK: ret = _media_svc_extract_book_metadata(&content_info); - /* The 'TITLE' should always be filled in */ - if (!content_info.media_meta.title || strlen(content_info.media_meta.title) == 0) { - g_free(content_info.media_meta.title); - content_info.media_meta.title = _media_svc_get_title_by_path(content_info.path); - } break; default: /* The 'TITLE' should always be filled in */ - content_info.media_meta.title = _media_svc_get_title_by_path(content_info.path); + content_info.media_meta.title = _media_svc_get_title_from_filename(content_info.file_name); break; } media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info); /*Set or Get folder id*/ - ret = _media_svc_get_and_append_folder_id_by_path(handle, false, storage_id, path, storage_type, folder_uuid, uid); + ret = _media_svc_get_and_append_folder_id_by_path(handle, false, storage_id, path, &folder_id, uid); media_svc_retv_del_if(ret != MS_MEDIA_ERR_NONE, ret, &content_info); - content_info.folder_uuid = g_strdup(folder_uuid); - media_svc_retv_del_if(content_info.folder_uuid == NULL, MS_MEDIA_ERR_INTERNAL, &content_info); + content_info.folder_id = folder_id; + media_svc_retv_del_if(content_info.folder_id <= 0, MS_MEDIA_ERR_INTERNAL, &content_info); /* Extracting thumbnail */ if (content_info.thumbnail_path == NULL) { @@ -320,8 +309,7 @@ int media_svc_insert_item_immediately(sqlite3 *handle, const char *storage_id, m } } - ret = _media_svc_insert_item_with_data(false, &content_info, false, uid); - + ret = _media_svc_insert_item(&content_info, uid); if (ret == MS_MEDIA_ERR_NONE) { media_svc_debug("Insertion is successful. Sending noti for this"); _media_svc_publish_noti(MS_MEDIA_ITEM_INSERT, content_info.path, content_info.media_type, content_info.media_uuid, content_info.mime_type); @@ -345,11 +333,9 @@ int media_svc_move_item(sqlite3 *handle, char *file_name = NULL; char *folder_path = NULL; int modified_time = 0; - char folder_uuid[MEDIA_SVC_UUID_SIZE + 1] = {0, }; + long long int folder_id = 0; char old_thumb_path[MEDIA_SVC_PATHNAME_SIZE] = {0, }; char dst_stg_id[MEDIA_SVC_UUID_SIZE + 1] = {0, }; - ms_user_storage_type_e org_stg_type = MS_USER_STORAGE_INTERNAL; - ms_user_storage_type_e dst_stg_type = MS_USER_STORAGE_INTERNAL; media_svc_debug_fenter(); @@ -362,14 +348,9 @@ int media_svc_move_item(sqlite3 *handle, /* Get storage_id */ ret = _media_svc_get_storage_uuid(handle, dest_path, dst_stg_id, uid); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - /* Get storage_type */ - ret = ms_user_get_storage_type(uid, src_path, &org_stg_type); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); - ret = ms_user_get_storage_type(uid, dest_path, &dst_stg_type); - media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); /*check and update folder*/ - ret = _media_svc_get_and_append_folder_id_by_path(handle, false, dst_stg_id, dest_path, dst_stg_type, folder_uuid, uid); + ret = _media_svc_get_and_append_folder_id_by_path(handle, false, dst_stg_id, dest_path, &folder_id, uid); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); /*get filename*/ @@ -389,7 +370,7 @@ int media_svc_move_item(sqlite3 *handle, _media_svc_remove_file(old_thumb_path); /*move item*/ - ret = _media_svc_update_item_by_path(src_path, dst_stg_id, dst_stg_type, dest_path, file_name, modified_time, folder_uuid, uid); + ret = _media_svc_update_item_by_path(src_path, dst_stg_id, dest_path, file_name, modified_time, folder_id, uid); g_free(file_name); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); @@ -459,7 +440,7 @@ int media_svc_delete_item_by_path(sqlite3 *handle, const char *storage_id, const return MS_MEDIA_ERR_NONE; } -int media_svc_refresh_item(sqlite3 *handle, bool is_direct, const char *storage_id, ms_user_storage_type_e storage_type, const char *path, uid_t uid) +int media_svc_refresh_item(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; char thumb_path[MEDIA_SVC_PATHNAME_SIZE + 1] = {0, }; @@ -469,10 +450,9 @@ int media_svc_refresh_item(sqlite3 *handle, bool is_direct, const char *storage_ media_svc_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Handle is NULL"); media_svc_retvm_if(!STRING_VALID(storage_id), MS_MEDIA_ERR_INVALID_PARAMETER, "storage_id is NULL"); media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL"); - media_svc_retvm_if(!_media_svc_is_valid_storage_type(storage_type), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid storage_type"); /*Set media info*/ - ret = _media_svc_set_media_info(&content_info, storage_id, storage_type, path, true); + ret = _media_svc_set_media_info(&content_info, storage_id, path, true); media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret); /* Initialize thumbnail information to remake thumbnail. */ @@ -480,7 +460,7 @@ int media_svc_refresh_item(sqlite3 *handle, bool is_direct, const char *storage_ if (ret != MS_MEDIA_ERR_NONE && ret != MS_MEDIA_ERR_DB_NO_RECORD) goto REFRESH_FINALIZE; - if (STRING_VALID(thumb_path)) { + if (strlen(thumb_path) > 0) { _media_svc_remove_file(thumb_path); ret = _media_svc_update_thumbnail_path(path, NULL, uid); @@ -501,21 +481,18 @@ int media_svc_refresh_item(sqlite3 *handle, bool is_direct, const char *storage_ ret = _media_svc_extract_image_metadata(&content_info); break; case MEDIA_SVC_MEDIA_TYPE_VIDEO: + ret = _media_svc_extract_video_metadata(&content_info); + break; case MEDIA_SVC_MEDIA_TYPE_SOUND: case MEDIA_SVC_MEDIA_TYPE_MUSIC: - ret = _media_svc_extract_media_metadata(handle, is_direct, &content_info, uid); + _media_svc_extract_audio_metadata(handle, is_direct, &content_info, uid); break; case MEDIA_SVC_MEDIA_TYPE_BOOK: ret = _media_svc_extract_book_metadata(&content_info); - /* The 'TITLE' should always be filled in */ - if (!content_info.media_meta.title || strlen(content_info.media_meta.title) == 0) { - g_free(content_info.media_meta.title); - content_info.media_meta.title = _media_svc_get_title_by_path(content_info.path); - } break; default: /* The 'TITLE' should always be filled in */ - content_info.media_meta.title = _media_svc_get_title_by_path(content_info.path); + content_info.media_meta.title = _media_svc_get_title_from_filename(content_info.file_name); break; } @@ -561,110 +538,21 @@ REFRESH_FINALIZE: return ret; } -int media_svc_send_dir_update_noti(const char *dir_path, const char *folder_id, media_item_update_type_e update_type, int pid) +int media_svc_send_dir_update_noti(const char *dir_path, const char *folder_id, int update_type, int pid) { media_svc_retvm_if(!STRING_VALID(dir_path), MS_MEDIA_ERR_INVALID_PARAMETER, "dir_path is NULL"); - return _media_svc_publish_dir_noti(update_type, dir_path, folder_id, pid); -} - -static void __media_svc_noti_all_storage(sqlite3 *handle, uid_t uid) -{ - int ret = MS_MEDIA_ERR_NONE; - char *root_path = NULL; - GPtrArray *path_list = NULL; - guint i = 0; - - ret = ms_user_get_internal_root_path(uid, &root_path); - media_svc_retm_if(ret != MS_MEDIA_ERR_NONE, "Fail to get root path"); - - ret = _media_svc_publish_dir_noti(MS_MEDIA_ITEM_UPDATE, root_path, NULL, 0); - if (ret != MS_MEDIA_ERR_NONE) - media_svc_error("Fail to send noti"); - - g_free(root_path); - - path_list = g_ptr_array_new_with_free_func(g_free); - _media_svc_get_storage_path(handle, &path_list); - - for (i = 0; i < path_list->len; i++) { - root_path = g_ptr_array_index(path_list, i); - - ret = _media_svc_publish_dir_noti(MS_MEDIA_ITEM_UPDATE, root_path, NULL, 0); - if (ret != MS_MEDIA_ERR_NONE) - media_svc_error("Fail to send noti"); - } - - g_ptr_array_free(path_list, TRUE); -} - -static void __media_svc_foreach_update_media(gpointer data, gpointer user_data) -{ - media_svc_content_info_s content_info = {0, }; - - if (_media_svc_extract_music_metadata_for_update(&content_info, (const char *)data) != MS_MEDIA_ERR_NONE) { - media_svc_error("Fail to extract metadata"); - _media_svc_destroy_content_info(&content_info); - return; - } - - if (_media_svc_update_meta_with_data(&content_info) != MS_MEDIA_ERR_NONE) - media_svc_error("Fail to append item[%s]", content_info.path); - - _media_svc_destroy_content_info(&content_info); -} - -int media_svc_update_item_meta(sqlite3 *handle, uid_t uid) -{ - int ret = MS_MEDIA_ERR_NONE; - char *sql = NULL; - GList *path_list = NULL; - - sql = sqlite3_mprintf("SELECT media_path FROM %q WHERE media_type=3 AND validity=1", DB_TABLE_MEDIA); - ret = _media_svc_get_media(handle, sql, &path_list); - media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Fail to get media list"); - - if (path_list) { - g_list_foreach(path_list, __media_svc_foreach_update_media, NULL); - g_list_free_full(path_list, g_free); - - ret = _media_svc_list_query_do(MEDIA_SVC_QUERY_SCANNER, uid); - media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "_media_svc_list_query_do failed"); - } - - /* Noti for this */ - __media_svc_noti_all_storage(handle, uid); - - return ret; -} - -int media_svc_publish_noti(media_item_update_type_e update_type, const char *path, media_type_e media_type, const char *uuid, const char *mime_type) -{ - return _media_svc_publish_noti(update_type, path, media_type, uuid, mime_type); -} - -int media_svc_get_pinyin(const char *src_str, char **pinyin_str) -{ - return _media_svc_get_pinyin_str(src_str, pinyin_str); + return _media_svc_publish_dir_noti((media_item_update_type_e)update_type, dir_path, folder_id, pid); } -int media_svc_check_pinyin_support(bool *support) +int media_svc_publish_update_noti(const char *path, int media_type, const char *uuid, const char *mime_type) { - *support = _media_svc_check_pinyin_support(); - - return MS_MEDIA_ERR_NONE; + return _media_svc_publish_noti(MS_MEDIA_ITEM_UPDATE, path, media_type, uuid, mime_type); } -int media_svc_set_storage_validity(sqlite3 *handle, const char *storage_id, int validity, uid_t uid) +int media_svc_set_storage_validity(const char *storage_id, int validity, uid_t uid) { - int ret = MS_MEDIA_ERR_NONE; - - media_svc_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Handle is NULL"); - - ret = _media_svc_update_storage_validity(storage_id, validity, uid); - media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "update storage validity failed: %d", ret); - - return ret; + return _media_svc_update_storage_validity(storage_id, validity, uid); } int media_svc_get_storage_id(sqlite3 *handle, const char *path, char *storage_id, uid_t uid) @@ -682,16 +570,15 @@ int media_svc_update_storage(sqlite3 *handle, const char *storage_id, const char return _media_svc_update_storage_path(handle, storage_id, storage_path, uid); } -int media_svc_insert_storage(sqlite3 *handle, const char *storage_id, const char *storage_path, ms_user_storage_type_e storage_type, uid_t uid) +int media_svc_insert_storage(sqlite3 *handle, const char *storage_id, const char *storage_path, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; media_svc_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Handle is NULL"); media_svc_retvm_if(storage_id == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "storage_id is NULL"); media_svc_retvm_if(storage_path == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "storage_path is NULL"); - media_svc_retvm_if(!_media_svc_is_valid_storage_type(storage_type), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid storage_type"); - ret = _media_svc_append_storage(storage_id, storage_path, storage_type, uid); + ret = _media_svc_append_storage(storage_id, storage_path, uid); media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "append storage failed : %d", ret); /* Remove external storage that validity is 0 */ @@ -701,14 +588,13 @@ int media_svc_insert_storage(sqlite3 *handle, const char *storage_id, const char return ret; } -int media_svc_insert_folder(sqlite3 *handle, const char *storage_id, ms_user_storage_type_e storage_type, const char *path, uid_t uid) +int media_svc_insert_folder(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid) { media_svc_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Handle is NULL"); media_svc_retvm_if(!STRING_VALID(storage_id), MS_MEDIA_ERR_INVALID_PARAMETER, "storage_id is NULL"); media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL"); - media_svc_retvm_if(!_media_svc_is_valid_storage_type(storage_type), MS_MEDIA_ERR_INVALID_PARAMETER, "Invalid storage_type"); - return _media_svc_get_and_append_folder_id_by_folder_path(handle, storage_id, path, storage_type, uid); + return _media_svc_append_by_folder_path(handle, storage_id, path, uid); } int media_svc_set_folder_validity(const char *start_path, int validity, bool is_recursive, uid_t uid) @@ -743,7 +629,7 @@ int media_svc_create_thumbnail(const char *file_path, int media_type, uid_t uid, char *sql = NULL; // 1. Check media type - if (media_type != MS_MEDIA_IMAGE && media_type != MS_MEDIA_VIDEO) + if (media_type != MEDIA_SVC_MEDIA_TYPE_IMAGE && media_type != MEDIA_SVC_MEDIA_TYPE_VIDEO) return MS_MEDIA_ERR_THUMB_UNSUPPORTED; // 2. try to create thumbnail @@ -826,3 +712,18 @@ int media_svc_get_book_by_keyword(sqlite3 *handle, const char *keyword, uid_t ui return ret; } + +int media_svc_check_db(sqlite3 *handle, uid_t uid) +{ + int ret = MS_MEDIA_ERR_NONE; + bool exist = false; + + ret = media_svc_check_table_exist(handle, &exist); + if (ret != MS_MEDIA_ERR_NONE) + return ret; + + if (!exist) + ret = media_svc_create_table(uid); + + return ret; +} \ No newline at end of file