diff options
-rwxr-xr-x | include/media-svc.h | 2 | ||||
-rwxr-xr-x | packaging/libmedia-service.spec | 2 | ||||
-rwxr-xr-x | src/common/media-svc-db-utils.c | 30 | ||||
-rwxr-xr-x | src/common/media-svc-media.c | 52 | ||||
-rwxr-xr-x | src/common/media-svc.c | 20 | ||||
-rwxr-xr-x | src/include/common/media-svc-env.h | 3 | ||||
-rwxr-xr-x | src/include/common/media-svc-media.h | 2 |
7 files changed, 90 insertions, 21 deletions
diff --git a/include/media-svc.h b/include/media-svc.h index f410671..3452c27 100755 --- a/include/media-svc.h +++ b/include/media-svc.h @@ -99,6 +99,8 @@ int media_svc_check_folder_exist_by_path(MediaSvcHandle *handle, const char *sto int media_svc_check_subfolder_by_path(MediaSvcHandle *handle, const char *storage_id, const char *folder_path, int *count); int media_svc_get_folder_id(MediaSvcHandle *handle, const char *storage_id, const char *path, char *folder_id); +int media_svc_append_query(const char *query, uid_t uid); +int media_svc_send_query(uid_t uid); #ifdef __cplusplus } diff --git a/packaging/libmedia-service.spec b/packaging/libmedia-service.spec index 3dbc066..90fb12b 100755 --- a/packaging/libmedia-service.spec +++ b/packaging/libmedia-service.spec @@ -1,6 +1,6 @@ Name: libmedia-service Summary: Media information service library for multimedia applications -Version: 0.2.60 +Version: 0.2.61 Release: 0 Group: System/Libraries License: Apache-2.0 and public domain diff --git a/src/common/media-svc-db-utils.c b/src/common/media-svc-db-utils.c index dc717a3..0cdacd8 100755 --- a/src/common/media-svc-db-utils.c +++ b/src/common/media-svc-db-utils.c @@ -1297,21 +1297,43 @@ int _media_svc_sql_query_list(sqlite3 *handle, GList **query_list, uid_t uid) int idx = 0; int length = g_list_length(*query_list); char *sql = NULL; + char query_bundle[8000] = {0, }; + int query_len = 0; + int total_len =0; media_svc_debug("query list length : [%d]", length); for (idx = 0; idx < length; idx++) { sql = (char *)g_list_nth_data(*query_list, idx); if (sql != NULL) { - /*ret = _media_svc_sql_query(handle, sql); */ - ret = media_db_request_update_db_batch(sql, uid); - if (ret != MS_MEDIA_ERR_NONE) - media_svc_error("media_db_request_update_db_batch failed : %d", ret); + query_len = strlen(sql); + if ((total_len + query_len) >= (sizeof(query_bundle) - 1)) { + ret = media_db_request_update_db_batch(query_bundle, uid); + if (ret != MS_MEDIA_ERR_NONE) + media_svc_error("media_db_request_update_db_batch failed : %d", ret); + memset(query_bundle, 0, sizeof(query_bundle)); + total_len = 0; + strncpy(query_bundle, sql, query_len); + total_len = query_len; + } else { + strncat(query_bundle, sql, query_len); + total_len += query_len; + } + sqlite3_free(sql); sql = NULL; } } + if (total_len > 0) { + ret = media_db_request_update_db_batch(query_bundle, uid); + if (ret != MS_MEDIA_ERR_NONE) + media_svc_error("media_db_request_update_db_batch failed : %d", ret); + + memset(query_bundle, 0, sizeof(query_bundle)); + total_len = 0; + } + _media_svc_sql_query_release(query_list); return MS_MEDIA_ERR_NONE; diff --git a/src/common/media-svc-media.c b/src/common/media-svc-media.c index 81366b8..da79760 100755 --- a/src/common/media-svc-media.c +++ b/src/common/media-svc-media.c @@ -32,6 +32,8 @@ #include "media-svc-db-utils.h" #include "media-svc-noti.h" +#define MEDIA_SVC_MAX_COMMIT_SIZE 200 + typedef struct { char thumbnail_path[MEDIA_SVC_PATHNAME_SIZE]; } media_svc_thumbnailpath_s; @@ -40,6 +42,8 @@ static __thread GList *g_media_svc_item_validity_query_list = NULL; static __thread GList *g_media_svc_insert_item_query_list = NULL; __thread GList *g_media_svc_move_item_query_list = NULL; static __thread GList *g_media_svc_update_item_query_list = NULL; +static __thread GList *g_media_svc_update_list = NULL; +static __thread int g_media_svc_update_list_count = 0; static int __media_svc_count_invalid_records_with_thumbnail(sqlite3 *handle, const char *storage_id, media_svc_storage_type_e storage_type, int *count); static int __media_svc_get_invalid_records_with_thumbnail(sqlite3 *handle, const char *storage_id, media_svc_storage_type_e storage_type, int count, media_svc_thumbnailpath_s *thumb_path); @@ -406,7 +410,7 @@ int _media_svc_update_meta_with_data(sqlite3 *handle, media_svc_content_info_s * char *sql = sqlite3_mprintf("UPDATE %s SET title=%Q, album=%Q, artist=%Q, album_artist=%Q, genre=%Q, composer=%Q, copyright=%Q, description=%Q, \ file_name_pinyin=%Q, title_pinyin=%Q, album_pinyin=%Q, artist_pinyin=%Q, album_artist_pinyin=%Q, genre_pinyin=%Q, composer_pinyin=%Q, copyright_pinyin=%Q, description_pinyin=%Q \ - WHERE path=%Q", + WHERE path=%Q;", MEDIA_SVC_DB_TABLE_MEDIA, content_info->media_meta.title, content_info->media_meta.album, @@ -474,7 +478,7 @@ int _media_svc_update_item_with_data(sqlite3 *handle, const char *storage_id, me size=%lld, modified_time=%d, thumbnail_path=%Q, title=%Q, album_id=%d, album=%Q, artist=%Q, album_artist=%Q, genre=%Q, \ composer=%Q, year=%Q, recorded_date=%Q, copyright=%Q, track_num=%Q, description=%Q, \ bitrate=%d, bitpersample=%d, samplerate=%d, channel=%d, duration=%d, longitude=%f, latitude=%f, altitude=%f, exposure_time=%Q, fnumber=%f, iso=%d, model=%Q, width=%d, height=%d, datetaken=%Q, \ - orientation=%d WHERE path=%Q", + orientation=%d WHERE path=%Q;", storage_id, content_info->size, content_info->modified_time, @@ -564,7 +568,7 @@ int _media_svc_get_media_type_by_path(sqlite3 *handle, const char *storage_id, c int _media_svc_delete_item_by_path(sqlite3 *handle, const char *storage_id, const char *path, bool stack_query, uid_t uid) { int ret = MS_MEDIA_ERR_NONE; - char *sql = sqlite3_mprintf("DELETE FROM '%s' WHERE path='%q'", storage_id, path); + char *sql = sqlite3_mprintf("DELETE FROM '%s' WHERE path='%q';", storage_id, path); if (!stack_query) { ret = _media_svc_sql_query(handle, sql, uid); @@ -585,7 +589,7 @@ int _media_svc_truncate_table(sqlite3 *handle, const char *storage_id, media_svc { int ret = MS_MEDIA_ERR_NONE; - char *sql = sqlite3_mprintf("DELETE FROM '%s' where storage_type=%d", storage_id, storage_type); + char *sql = sqlite3_mprintf("DELETE FROM '%s' where storage_type=%d;", storage_id, storage_type); ret = _media_svc_sql_query(handle, sql, uid); sqlite3_free(sql); @@ -622,7 +626,7 @@ int _media_svc_delete_invalid_items(sqlite3 *handle, const char *storage_id, med media_svc_debug("There is no item with thumbnail"); } - char *sql = sqlite3_mprintf("DELETE FROM '%s' WHERE validity = 0", storage_id); + char *sql = sqlite3_mprintf("DELETE FROM '%s' WHERE validity = 0;", storage_id); ret = _media_svc_sql_query(handle, sql, uid); sqlite3_free(sql); @@ -683,9 +687,9 @@ int _media_svc_delete_invalid_folder_items(sqlite3 *handle, const char *storage_ } if (is_recursive) - sql = sqlite3_mprintf("DELETE FROM '%s' WHERE validity = 0 AND path LIKE '%q/%%'", storage_id, folder_path); + sql = sqlite3_mprintf("DELETE FROM '%s' WHERE validity = 0 AND path LIKE '%q/%%';", storage_id, folder_path); else - sql = sqlite3_mprintf("DELETE FROM '%s' WHERE validity = 0 AND folder_uuid='%q'", storage_id, folder_uuid); + sql = sqlite3_mprintf("DELETE FROM '%s' WHERE validity = 0 AND folder_uuid='%q';", storage_id, folder_uuid); ret = _media_svc_sql_query(handle, sql, uid); sqlite3_free(sql); @@ -718,7 +722,7 @@ int _media_svc_update_item_validity(sqlite3 *handle, const char *storage_id, con { int ret = MS_MEDIA_ERR_NONE; - char *sql = sqlite3_mprintf("UPDATE '%s' SET validity=%d WHERE path= '%q'", storage_id, validity, path); + char *sql = sqlite3_mprintf("UPDATE '%s' SET validity=%d WHERE path= '%q';", storage_id, validity, path); if (!stack_query) { ret = _media_svc_sql_query(handle, sql, uid); @@ -734,7 +738,7 @@ int _media_svc_update_thumbnail_path(sqlite3 *handle, const char *storage_id, co { int ret = MS_MEDIA_ERR_NONE; - char *sql = sqlite3_mprintf("UPDATE '%s' SET thumbnail_path=%Q WHERE path= %Q", storage_id, thumb_path, path); + char *sql = sqlite3_mprintf("UPDATE '%s' SET thumbnail_path=%Q WHERE path= %Q;", storage_id, thumb_path, path); ret = _media_svc_sql_query(handle, sql, uid); sqlite3_free(sql); @@ -746,7 +750,7 @@ int _media_svc_update_storage_item_validity(sqlite3 *handle, const char *storage { int ret = MS_MEDIA_ERR_NONE; - char *sql = sqlite3_mprintf("UPDATE '%s' SET validity=%d WHERE storage_type=%d", storage_id, validity, storage_type); + char *sql = sqlite3_mprintf("UPDATE '%s' SET validity=%d WHERE storage_type=%d;", storage_id, validity, storage_type); ret = _media_svc_sql_query(handle, sql, uid); sqlite3_free(sql); @@ -778,7 +782,7 @@ int _media_svc_update_folder_item_validity(sqlite3 *handle, const char *storage_ SQLITE3_FINALIZE(sql_stmt); /*Update folder item validity*/ - sql = sqlite3_mprintf("UPDATE '%s' SET validity=%d WHERE folder_uuid='%q'", storage_id, validity, folder_uuid); + sql = sqlite3_mprintf("UPDATE '%s' SET validity=%d WHERE folder_uuid='%q';", storage_id, validity, folder_uuid); ret = _media_svc_sql_query(handle, sql, uid); sqlite3_free(sql); @@ -791,7 +795,7 @@ int _media_svc_update_recursive_folder_item_validity(sqlite3 *handle, const char int ret = MS_MEDIA_ERR_NONE; /*Update folder item validity*/ - char *sql = sqlite3_mprintf("UPDATE '%s' SET validity=%d WHERE (storage_type = 0 OR storage_type = 1) AND path LIKE '%q/%%'", storage_id, validity, folder_path); + char *sql = sqlite3_mprintf("UPDATE '%s' SET validity=%d WHERE (storage_type = 0 OR storage_type = 1) AND path LIKE '%q/%%';", storage_id, validity, folder_path); ret = _media_svc_sql_query(handle, sql, uid); sqlite3_free(sql); @@ -812,13 +816,13 @@ int _media_svc_update_item_by_path(sqlite3 *handle, const char *storage_id, cons sql = sqlite3_mprintf("UPDATE '%s' SET \ path=%Q, file_name=%Q, modified_time=%d, folder_uuid=%Q, thumbnail_path=%Q, storage_type=%d, \ played_count=0, last_played_time=0, last_played_position=0 \ - WHERE path=%Q", + WHERE path=%Q;", storage_id, dest_path, file_name, modified_time, folder_uuid, thumb_path, dest_storage, src_path); } else { sql = sqlite3_mprintf("UPDATE '%s' SET \ path=%Q, file_name=%Q, modified_time=%d, folder_uuid=%Q, storage_type=%d, \ played_count=0, last_played_time=0, last_played_position=0 \ - WHERE path=%Q", + WHERE path=%Q;", storage_id, dest_path, file_name, modified_time, folder_uuid, dest_storage, src_path); } @@ -849,6 +853,8 @@ int _media_svc_list_query_do(sqlite3 *handle, media_svc_query_type_e query_type, ret = _media_svc_sql_query_list(handle, &g_media_svc_update_item_query_list, uid); else if (query_type == MEDIA_SVC_QUERY_INSERT_FOLDER) ret = _media_svc_sql_query_list(handle, _media_svc_get_folder_list_ptr(), uid); + else if (query_type == MEDIA_SVC_QUERY_UPDATE_COMMON) + ret = _media_svc_sql_query_list(handle, &g_media_svc_update_list, uid); else ret = MS_MEDIA_ERR_INVALID_PARAMETER; @@ -868,6 +874,22 @@ int _media_svc_list_query_do(sqlite3 *handle, media_svc_query_type_e query_type, return MS_MEDIA_ERR_NONE; } +int _media_svc_append_query_list(const char *query, uid_t uid) +{ + int ret = MS_MEDIA_ERR_NONE; + + g_media_svc_update_list = g_list_append(g_media_svc_update_list, query); + + g_media_svc_update_list_count++; + + if (g_media_svc_update_list_count >= MEDIA_SVC_MAX_COMMIT_SIZE) { + ret = _media_svc_list_query_do(NULL, MEDIA_SVC_QUERY_UPDATE_COMMON, uid); + g_media_svc_update_list_count = 0; + } + + return ret; +} + int _media_svc_get_burst_id(sqlite3 *handle, const char *storage_id, int *id) { int ret = MS_MEDIA_ERR_NONE; @@ -1130,7 +1152,7 @@ int _media_svc_insert_item_pass2(sqlite3 *handle, const char *storage_id, media_ recorded_date=%Q, copyright=%Q, track_num=%Q, description=%Q, bitrate=%d, bitpersample=%d, samplerate=%d, channel=%d, \ duration=%d, longitude=%.6f, latitude=%.6f, altitude=%.6f, width=%d, height=%d, datetaken=%Q, orientation=%d, exposure_time=%Q,\ fnumber=%.6f, iso=%d, model=%Q, rating=%d, weather=%Q, file_name_pinyin=%Q, title_pinyin=%Q, album_pinyin=%Q, \ - artist_pinyin=%Q, album_artist_pinyin=%Q, genre_pinyin=%Q, composer_pinyin=%Q, copyright_pinyin=%Q, description_pinyin=%Q WHERE path=%Q", + artist_pinyin=%Q, album_artist_pinyin=%Q, genre_pinyin=%Q, composer_pinyin=%Q, copyright_pinyin=%Q, description_pinyin=%Q WHERE path=%Q;", storage_id, //content_info->folder_uuid, content_info->thumbnail_path, /**/ diff --git a/src/common/media-svc.c b/src/common/media-svc.c index 37c8936..8cd870d 100755 --- a/src/common/media-svc.c +++ b/src/common/media-svc.c @@ -2293,3 +2293,23 @@ int media_svc_get_folder_id(MediaSvcHandle *handle, const char *storage_id, cons return ret; } +int media_svc_append_query(const char *query, uid_t uid) +{ + int ret = MS_MEDIA_ERR_NONE; + + media_svc_retvm_if(query == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "query is NULL"); + + ret = _media_svc_append_query_list(query, uid); + + return ret; +} + +int media_svc_send_query(uid_t uid) +{ + int ret = MS_MEDIA_ERR_NONE; + + ret = _media_svc_list_query_do(NULL, MEDIA_SVC_QUERY_UPDATE_COMMON, uid); + + return ret; +} + diff --git a/src/include/common/media-svc-env.h b/src/include/common/media-svc-env.h index b21b4e2..3d7e2cf 100755 --- a/src/include/common/media-svc-env.h +++ b/src/include/common/media-svc-env.h @@ -155,7 +155,8 @@ typedef enum { MEDIA_SVC_QUERY_SET_ITEM_VALIDITY, MEDIA_SVC_QUERY_MOVE_ITEM, MEDIA_SVC_QUERY_UPDATE_ITEM, - MEDIA_SVC_QUERY_INSERT_FOLDER + MEDIA_SVC_QUERY_INSERT_FOLDER, + MEDIA_SVC_QUERY_UPDATE_COMMON, } media_svc_query_type_e; typedef enum { diff --git a/src/include/common/media-svc-media.h b/src/include/common/media-svc-media.h index 5358524..132fd99 100755 --- a/src/include/common/media-svc-media.h +++ b/src/include/common/media-svc-media.h @@ -55,4 +55,6 @@ int _media_svc_update_meta_with_data(sqlite3 *handle, media_svc_content_info_s * int _media_svc_insert_item_pass1(sqlite3 *handle, const char *storage_id, media_svc_content_info_s *content_info, int is_burst, bool stack_query, uid_t uid); int _media_svc_insert_item_pass2(sqlite3 *handle, const char *storage_id, media_svc_content_info_s *content_info, int is_burst, bool stack_query, uid_t uid); +int _media_svc_append_query_list(const char *query, uid_t uid); + #endif /*_MEDIA_SVC_MEDIA_H_*/ |