X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fmedia_db.c;h=b69774d2591c7a4758af499aaf02a494b8a478d0;hb=f4fcdcd1b064f219b7bb99f5a01705c6976af4fb;hp=6dde85ecaf3ea73cebe47a169e802a5428ccbb75;hpb=3214648f800f5a8f6e9c3045612e95d0c41c124e;p=platform%2Fcore%2Fapi%2Fmedia-content.git diff --git a/src/media_db.c b/src/media_db.c index 6dde85e..b69774d 100755 --- a/src/media_db.c +++ b/src/media_db.c @@ -17,112 +17,200 @@ #include #include +#include -static char * __media_db_get_group_name(media_group_e group); -static int __media_db_make_query(filter_h filter, attribute_h attr, char *select_query, int select_query_size, char **condition_query, char **option_query); +static int __media_db_make_query(filter_h filter, char *select_query, int select_query_size, char **condition_query, char **option_query); static char * __media_db_get_group_name(media_group_e group) { - switch(group) - { - case MEDIA_CONTENT_GROUP_DISPLAY_NAME: - return (char *)DB_FIELD_MEDIA_DISPLAY_NAME; - case MEDIA_CONTENT_GROUP_TYPE: - return (char *)DB_FIELD_MEDIA_TYPE; - case MEDIA_CONTENT_GROUP_MIME_TYPE: - return (char *) DB_FIELD_MEDIA_MIME_TYPE; - case MEDIA_CONTENT_GROUP_SIZE: - return (char *) DB_FIELD_MEDIA_SIZE; - case MEDIA_CONTENT_GROUP_ADDED_TIME: - return (char *) DB_FIELD_MEDIA_ADDED_TIME; - case MEDIA_CONTENT_GROUP_MODIFIED_TIME: - return (char *) DB_FIELD_MEDIA_MODIFIED_TIME; - case MEDIA_CONTENT_GROUP_TITLE: - return (char *) DB_FIELD_MEDIA_TITLE; - case MEDIA_CONTENT_GROUP_ARTIST: - return (char *) DB_FIELD_MEDIA_ARTIST; - case MEDIA_CONTENT_GROUP_ALBUM_ARTIST: - return (char *) DB_FIELD_MEDIA_ALBUM_ARTIST; - case MEDIA_CONTENT_GROUP_GENRE: - return (char *) DB_FIELD_MEDIA_GENRE; - case MEDIA_CONTENT_GROUP_COMPOSER: - return (char *) DB_FIELD_MEDIA_COMPOSER; - case MEDIA_CONTENT_GROUP_YEAR: - return (char *) DB_FIELD_MEDIA_YEAR; - case MEDIA_CONTENT_GROUP_RECORDED_DATE: - return (char *) DB_FIELD_MEDIA_RECORDED_DATE; - case MEDIA_CONTENT_GROUP_COPYRIGHT: - return (char *) DB_FIELD_MEDIA_COPYRIGHT; - case MEDIA_CONTENT_GROUP_TRACK_NUM: - return (char *) DB_FIELD_MEDIA_TRACK_NUM; - case MEDIA_CONTENT_GROUP_DESCRIPTION: - return (char *) DB_FIELD_MEDIA_DESCRIPTION; - case MEDIA_CONTENT_GROUP_LONGITUDE: - return (char *) DB_FIELD_MEDIA_LONGITUDE; - case MEDIA_CONTENT_GROUP_LATITUDE: - return (char *) DB_FIELD_MEDIA_LATITUDE; - case MEDIA_CONTENT_GROUP_ALTITUDE: - return (char *) DB_FIELD_MEDIA_ALTITUDE; - case MEDIA_CONTENT_GROUP_BURST_IMAGE: - return (char *) DB_FIELD_MEDIA_BURST_ID; - case MEDIA_CONTENT_GROUP_RATING: - return (char *) DB_FIELD_MEDIA_RATING; - case MEDIA_CONTENT_GROUP_AUTHOR: - return (char *) DB_FIELD_MEDIA_AUTHOR; - case MEDIA_CONTENT_GROUP_PROVIDER: - return (char *) DB_FIELD_MEDIA_PROVIDER; - case MEDIA_CONTENT_GROUP_CONTENT_NAME: - return (char *) DB_FIELD_MEDIA_CONTENT_NAME; - case MEDIA_CONTENT_GROUP_CATEGORY: - return (char *) DB_FIELD_MEDIA_CATEGORY; - case MEDIA_CONTENT_GROUP_LOCATION_TAG: - return (char *) DB_FIELD_MEDIA_LOCATION_TAG; - case MEDIA_CONTENT_GROUP_AGE_RATING: - return (char *) DB_FIELD_MEDIA_AGE_RATING; - case MEDIA_CONTENT_GROUP_KEYWORD: - return (char *) DB_FIELD_MEDIA_KEYWORD; - case MEDIA_CONTENT_GROUP_WEATHER: - return (char *) DB_FIELD_MEDIA_WEATHER; - default: - return NULL; + switch (group) { + case MEDIA_CONTENT_GROUP_DISPLAY_NAME: + return (char *)DB_FIELD_MEDIA_DISPLAY_NAME; + case MEDIA_CONTENT_GROUP_TYPE: + return (char *)DB_FIELD_MEDIA_TYPE; + case MEDIA_CONTENT_GROUP_MIME_TYPE: + return (char *) DB_FIELD_MEDIA_MIME_TYPE; + case MEDIA_CONTENT_GROUP_SIZE: + return (char *) DB_FIELD_MEDIA_SIZE; + case MEDIA_CONTENT_GROUP_ADDED_TIME: + return (char *) DB_FIELD_MEDIA_ADDED_TIME; + case MEDIA_CONTENT_GROUP_MODIFIED_TIME: + return (char *) DB_FIELD_MEDIA_MODIFIED_TIME; + case MEDIA_CONTENT_GROUP_TITLE: + return (char *) DB_FIELD_MEDIA_TITLE; + case MEDIA_CONTENT_GROUP_ARTIST: + return (char *) DB_FIELD_MEDIA_ARTIST; + case MEDIA_CONTENT_GROUP_ALBUM_ARTIST: + return (char *) DB_FIELD_MEDIA_ALBUM_ARTIST; + case MEDIA_CONTENT_GROUP_GENRE: + return (char *) DB_FIELD_MEDIA_GENRE; + case MEDIA_CONTENT_GROUP_COMPOSER: + return (char *) DB_FIELD_MEDIA_COMPOSER; + case MEDIA_CONTENT_GROUP_YEAR: + return (char *) DB_FIELD_MEDIA_YEAR; + case MEDIA_CONTENT_GROUP_RECORDED_DATE: + return (char *) DB_FIELD_MEDIA_RECORDED_DATE; + case MEDIA_CONTENT_GROUP_COPYRIGHT: + return (char *) DB_FIELD_MEDIA_COPYRIGHT; + case MEDIA_CONTENT_GROUP_TRACK_NUM: + return (char *) DB_FIELD_MEDIA_TRACK_NUM; + case MEDIA_CONTENT_GROUP_DESCRIPTION: + return (char *) DB_FIELD_MEDIA_DESCRIPTION; + case MEDIA_CONTENT_GROUP_LONGITUDE: + return (char *) DB_FIELD_MEDIA_LONGITUDE; + case MEDIA_CONTENT_GROUP_LATITUDE: + return (char *) DB_FIELD_MEDIA_LATITUDE; + case MEDIA_CONTENT_GROUP_ALTITUDE: + return (char *) DB_FIELD_MEDIA_ALTITUDE; + case MEDIA_CONTENT_GROUP_RATING: + return (char *) DB_FIELD_MEDIA_RATING; +#ifdef _USE_TVPD_MODE + case MEDIA_CONTENT_GROUP_MODIFIED_MONTH: + return (char *) DB_FIELD_MEDIA_MODIFIED_DATE; + case MEDIA_CONTENT_GROUP_MODIFIED_DATE: + return (char *) DB_FIELD_MEDIA_MODIFIED_DATE; +#endif +#ifdef _USE_SENIOR_MODE + case MEDIA_CONTENT_GROUP_CONTACT: + return (char *) DB_FIELD_MEDIA_CONTACT; +#endif +#ifdef _USE_TVPD_MODE + case MEDIA_CONTENT_GROUP_ALBUM: + return (char *) DB_FIELD_MEDIA_ALBUM; + case MEDIA_PVR_GROUP_DURATION: + return (char *) DB_FIELD_PVR_DURATION; + case MEDIA_PVR_GROUP_TIME_ZONE: + return (char *) DB_FIELD_PVR_TIME_ZONE; + case MEDIA_PVR_GROUP_PTC: + return (char *) DB_FIELD_PVR_PTC; + case MEDIA_PVR_GROUP_MAJOR: + return (char *) DB_FIELD_PVR_MAJOR; + case MEDIA_PVR_GROUP_MINOR: + return (char *) DB_FIELD_PVR_MINOR; + case MEDIA_PVR_GROUP_CHANNEL_TYPE: + return (char *) DB_FIELD_PVR_CHANNEL_TYPE; + case MEDIA_PVR_GROUP_CHANNEL_NAME: + return (char *) DB_FIELD_PVR_CHANNEL_NAME; + case MEDIA_PVR_GROUP_CHANNEL_NUM: + return (char *) DB_FIELD_PVR_CHANNEL_NUM; + case MEDIA_PVR_GROUP_PROGRAM_TITLE: + return (char *) DB_FIELD_PVR_PROGRAM_TITLE; + case MEDIA_PVR_GROUP_PROGRAM_NUM: + return (char *) DB_FIELD_PVR_PROGRAM_NUM; + case MEDIA_PVR_GROUP_PROGRAM_CRID: + return (char *) DB_FIELD_PVR_PROGRAM_CRID; + case MEDIA_PVR_GROUP_GUIDANCE: + return (char *) DB_FIELD_PVR_GUIDANCE; + case MEDIA_PVR_GROUP_SYNOPSIS: + return (char *) DB_FIELD_PVR_SYNOPSIS; + case MEDIA_PVR_GROUP_GENRE: + return (char *) DB_FIELD_PVR_GENRE; + case MEDIA_PVR_GROUP_LANGUAGE: + return (char *) DB_FIELD_PVR_LANGUAGE; + case MEDIA_PVR_GROUP_EMBARGO_TIME: + return (char *) DB_FIELD_PVR_EMBARGO_TIME; + case MEDIA_PVR_GROUP_EXPIRY_TIME: + return (char *) DB_FIELD_PVR_EXPIRY_TIME; + case MEDIA_PVR_GROUP_START_TIME: + return (char *) DB_FIELD_PVR_START_TIME; + case MEDIA_PVR_GROUP_PROGRAM_START_TIME: + return (char *) DB_FIELD_PVR_PROGRAM_START_TIME; + case MEDIA_PVR_GROUP_PROGRAM_END_TIME: + return (char *) DB_FIELD_PVR_PROGRAM_END_TIME; + case MEDIA_PVR_GROUP_PROGRAM_DATE: + return (char *) DB_FIELD_PVR_PROGRAM_DATE; + case MEDIA_PVR_GROUP_PARENTAL_RATING: + return (char *) DB_FIELD_PVR_PARENTAL_RATING; + case MEDIA_PVR_GROUP_TIMER_RECORD: + return (char *) DB_FIELD_PVR_TIMER_RECORD; + case MEDIA_PVR_GROUP_SERIES_RECORD: + return (char *) DB_FIELD_PVR_SERIES_RECORD; + case MEDIA_PVR_GROUP_HD: + return (char *) DB_FIELD_PVR_HD; + case MEDIA_PVR_GROUP_SUBTITLE: + return (char *) DB_FIELD_PVR_SUBTITLE; + case MEDIA_PVR_GROUP_TTX: + return (char *) DB_FIELD_PVR_TTX; + case MEDIA_PVR_GROUP_AD: + return (char *) DB_FIELD_PVR_AD; + case MEDIA_PVR_GROUP_HARDOF_HEARINGRADIO: + return (char *) DB_FIELD_PVR_HARDOF_HEARINGRADIO; + case MEDIA_PVR_GROUP_DATA_SERVICE: + return (char *) DB_FIELD_PVR_DATA_SERVICE; + case MEDIA_PVR_GROUP_CONTENT_LOCK: + return (char *) DB_FIELD_PVR_CONTENT_LOCK; + case MEDIA_PVR_GROUP_CONTENT_WATCH: + return (char *) DB_FIELD_PVR_CONTENT_WATCH; + case MEDIA_PVR_GROUP_HAS_AUDIO_ONLY: + return (char *) DB_FIELD_PVR_HAS_AUDIO_ONLY; + case MEDIA_PVR_GROUP_IS_LOCAL_RECORDED: + return (char *) DB_FIELD_PVR_IS_LOCAL_RECORD; + case MEDIA_PVR_GROUP_RESOLUTION: + return (char *) DB_FIELD_PVR_RESOLUTION; + case MEDIA_PVR_GROUP_ASPECTRATIO: + return (char *) DB_FIELD_PVR_ASPECTRATIO; + case MEDIA_PVR_GROUP_MODIFIED_MONTH: + return (char *) DB_FIELD_PVR_MODIFIED_DATE; + case MEDIA_PVR_GROUP_MODIFIED_DATE: + return (char *) DB_FIELD_PVR_MODIFIED_DATE; + case MEDIA_PVR_GROUP_SPORTS_TYPE: + return (char *) DB_FIELD_PVR_SPORTS_TYPE; + case MEDIA_PVR_GROUP_GUIDANCE_LENGTH: + return (char *) DB_FIELD_PVR_GUIDANCE_LENGTH; + case MEDIA_PVR_GROUP_TVMODE: + return (char *) DB_FIELD_PVR_TVMODE; + case MEDIA_PVR_GROUP_PLAY_COUNT: + return (char *) DB_FIELD_PVR_PLAY_COUNT; + case MEDIA_PVR_GROUP_PRIVATE_DATA: + return (char *) DB_FIELD_PVR_PRIVATE_DATA; + case MEDIA_UHD_GROUP_CONTENT_TITLE: + return (char *) DB_FIELD_UHD_CONTENT_TITLE; + case MEDIA_UHD_GROUP_RELEASE_DATE: + return (char *) DB_FIELD_UHD_RELEASE_DATE; + case MEDIA_UHD_GROUP_SUB_TYPE: + return (char *) DB_FIELD_UHD_SUB_TYPE; + case MEDIA_UHD_GROUP_FILE_NAME: + return (char *) DB_FIELD_UHD_FILE_NAME; + case MEDIA_UHD_GROUP_PLAYED_COUNT: + return (char *) DB_FIELD_UHD_PLAYED_COUNT; +#endif + default: + return NULL; } return NULL; } -static int __media_db_make_query(filter_h filter, attribute_h attr, char *select_query, int select_query_size, char **condition_query, char **option_query) +static int __media_db_make_query(filter_h filter, char *select_query, int select_query_size, char **condition_query, char **option_query) { int ret = MEDIA_CONTENT_ERROR_NONE; filter_s *_filter = NULL; - if(filter != NULL) - { + if (filter != NULL) { _filter = (filter_s*)filter; - if(STRING_VALID(_filter->condition)) - { - /*bracket should be added to condition. If application use "OR" condition, F/W restriction condition like "validity=1" is disregared - ex) select path from media where validity=1 and media_type=3 or media_type=1;*/ - char bracket_added_condition[MAX_QUERY_SIZE] = {0, }; - memset(bracket_added_condition, 0x00, sizeof(bracket_added_condition)); - - SAFE_STRLCAT(bracket_added_condition, QUERY_KEYWORD_OPEN_BRACKET, MAX_QUERY_SIZE); - SAFE_STRLCAT(bracket_added_condition, _filter->condition, MAX_QUERY_SIZE); - SAFE_STRLCAT(bracket_added_condition, QUERY_KEYWORD_BRACKET, MAX_QUERY_SIZE); - - ret = _media_filter_attribute_generate(attr, bracket_added_condition, _filter->condition_collate_type, condition_query); + if (STRING_VALID(_filter->condition)) { + ret = _media_filter_attribute_generate(filter, condition_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); } - ret = _media_filter_attribute_option_generate(attr, filter, option_query); - if(ret != MEDIA_CONTENT_ERROR_NONE) - { - SAFE_FREE(*condition_query); - return ret; + if (_filter->is_full_order == false) { + /* Process for filter v1 */ + ret = _media_filter_attribute_option_generate(filter, option_query); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SAFE_FREE(*condition_query); + return ret; + } + } else { + /* Process for filter v2 */ + ret = _media_filter_attribute_option_generate_with_full_query(filter, option_query); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SAFE_FREE(*condition_query); + return ret; + } } - if(STRING_VALID(*condition_query)) - { + if (STRING_VALID(*condition_query)) { SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, select_query_size); SAFE_STRLCAT(select_query, QUERY_KEYWORD_AND, select_query_size); } @@ -131,6 +219,7 @@ static int __media_db_make_query(filter_h filter, attribute_h attr, char *select return ret; } +#ifdef _USE_TVPD_MODE int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count) { int ret = MEDIA_CONTENT_ERROR_NONE; @@ -138,94 +227,344 @@ int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *gro char select_query[MAX_QUERY_SIZE] = {0, }; char *condition_query = NULL; char *option_query = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - switch(group_type) { - case MEDIA_GROUP_NONE: - case MEDIA_GROUP_TAG_BY_MEDIA_ID: - case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID: - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } - break; - case MEDIA_GROUP_ALBUM: - attr = _content_get_alias_attirbute_handle(); + switch (group_type) { + case MEDIA_GROUP_NONE: + case MEDIA_GROUP_TAG_BY_MEDIA_ID: + case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID: + case MEDIA_GROUP_FACE_BY_MEDIA_ID: + { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + break; + case MEDIA_GROUP_ALBUM: + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_VIEW_MEDIA); - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id); - else - snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_TABLE_MEDIA_VIEW); + break; + case MEDIA_GROUP_FOLDER: + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_VIEW_MEDIA); - break; - case MEDIA_GROUP_FOLDER: - attr = _content_get_alias_attirbute_handle(); - if(!SAFE_STRLCPY(select_query, SELECT_FOLDER_COUNT, sizeof(select_query))) - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + break; + case MEDIA_GROUP_PLAYLIST: + if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + break; + case MEDIA_GROUP_TAG: + if (!SAFE_STRLCPY(select_query, SELECT_TAG_COUNT, sizeof(select_query))) { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + break; + case MEDIA_GROUP_BOOKMARK: + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_VIEW_MEDIA); - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id); - else - snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_TABLE_MEDIA_VIEW); + break; + case MEDIA_GROUP_STORAGE: + if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + break; + case MEDIA_GROUP_FACE: + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, DB_VIEW_MEDIA); + break; + case MEDIA_GROUP_PVR: + case MEDIA_GROUP_UHD: + default: + { + media_content_error("Invalid group type [%d]", group_type); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + break; + } - break; - case MEDIA_GROUP_PLAYLIST: - if(!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } - break; - case MEDIA_GROUP_TAG: - if(!SAFE_STRLCPY(select_query, SELECT_TAG_COUNT, sizeof(select_query))) - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } - break; - case MEDIA_GROUP_BOOKMARK: - attr = _content_get_alias_attirbute_handle(); + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id); - else - snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_TABLE_MEDIA_VIEW); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); + SAFE_FREE(condition_query); + SAFE_FREE(option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + if (sqlite3_step(stmt) == SQLITE_ROW) + *group_count = (int)sqlite3_column_int(stmt, 0); + + SQLITE3_FINALIZE(stmt); + + return ret; +} + +int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + sqlite3_stmt *stmt = NULL; + char select_query[MAX_QUERY_SIZE] = {0, }; + char *condition_query = NULL; + char *option_query = NULL; + filter_s *_filter = (filter_s*)filter; + + memset(select_query, 0x00, sizeof(select_query)); + if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/ + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_VIEW_MEDIA); + } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content*/ + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT, __media_db_get_group_name(group)); + } else { /*uhd content*/ + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group)); + } + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query)); + if (STRING_VALID(condition_query)) + SAFE_STRLCAT(select_query, condition_query, sizeof(select_query)); + if (STRING_VALID(option_query)) + SAFE_STRLCAT(select_query, option_query, sizeof(select_query)); + SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query)); + + SAFE_FREE(condition_query); + SAFE_FREE(option_query); + + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); + SAFE_FREE(condition_query); + SAFE_FREE(option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + if (sqlite3_step(stmt) == SQLITE_ROW) + *group_count = (int)sqlite3_column_int(stmt, 0); + + SQLITE3_FINALIZE(stmt); + + return ret; +} + +int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + char select_query[MAX_QUERY_SIZE] = {0, }; + char *condition_query = NULL; + char *option_query = NULL; + char *name = NULL; + sqlite3_stmt *stmt = NULL; + filter_s *_filter = (filter_s*)filter; + memset(select_query, 0x00, sizeof(select_query)); + if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */ + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_VIEW_MEDIA); + } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content */ + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST, __media_db_get_group_name(group)); + } else { /* uhd content */ + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group)); + } + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); + SAFE_FREE(condition_query); + SAFE_FREE(option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + while (sqlite3_step(stmt) == SQLITE_ROW) { + name = g_strdup((const char *)sqlite3_column_text(stmt, 0)); + + if (callback(name, user_data) == false) { + SAFE_FREE(name); break; - case MEDIA_GROUP_STORAGE: - if(!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) - { - media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } - break; - default : - { - media_content_error("Invalid group type [%d]", group_type); - return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; - } + } + + SAFE_FREE(name); + } + + SQLITE3_FINALIZE(stmt); + + return ret; +} + +int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, media_group_and_count_cb callback, void *user_data) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + char select_query[DEFAULT_QUERY_SIZE] = {0, }; + char group_query[DEFAULT_QUERY_SIZE] = {0, }; + char *condition_query = NULL; + char *option_query = NULL; + char *name = NULL; + sqlite3_stmt *stmt = NULL; + filter_s *_filter = (filter_s*)filter; + + memset(select_query, 0x00, sizeof(select_query)); + memset(group_query, 0x00, sizeof(group_query)); + + char* group_name = __media_db_get_group_name(group); + if (!STRING_VALID(group_name)) { + ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + } + + if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/ + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, DB_VIEW_MEDIA); + } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/ + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT, group_name); + } else {/*uhd content*/ + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name); + } + + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + if (STRING_VALID(option_query)) + snprintf(group_query, sizeof(group_query), "GROUP BY %s %s", group_name, option_query); + else + snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name); + + ret = _content_query_prepare(select_query, condition_query, group_query, &stmt); + SAFE_FREE(condition_query); + SAFE_FREE(option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + while (sqlite3_step(stmt) == SQLITE_ROW) { + if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) + name = strdup((const char *)sqlite3_column_text(stmt, 0)); + + if (callback(name, sqlite3_column_int(stmt, 1), user_data) == false) { + SAFE_FREE(name); break; + } + + SAFE_FREE(name); + } + + SQLITE3_FINALIZE(stmt); + + return ret; +} +#else +int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + sqlite3_stmt *stmt = NULL; + char select_query[MAX_QUERY_SIZE] = {0, }; + char *condition_query = NULL; + char *option_query = NULL; + filter_s *_filter = (filter_s*)filter; + + memset(select_query, 0x00, sizeof(select_query)); + + switch (group_type) { + case MEDIA_GROUP_NONE: + case MEDIA_GROUP_TAG_BY_MEDIA_ID: + case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID: + case MEDIA_GROUP_FACE_BY_MEDIA_ID: + { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + break; + case MEDIA_GROUP_ALBUM: + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT_BY_STORAGE_ID, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT); + + break; + case MEDIA_GROUP_FOLDER: + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT); + + break; + case MEDIA_GROUP_PLAYLIST: + if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + break; + case MEDIA_GROUP_TAG: + if (!SAFE_STRLCPY(select_query, SELECT_TAG_COUNT, sizeof(select_query))) { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + break; + case MEDIA_GROUP_BOOKMARK: + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT_BY_STORAGE_ID, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT); + + break; + case MEDIA_GROUP_STORAGE: + if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + break; + case MEDIA_GROUP_FACE: + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT_BY_STORAGE_ID, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT); + break; + default: + { + media_content_error("Invalid group type [%d]", group_type); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + break; } - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + if (sqlite3_step(stmt) == SQLITE_ROW) *group_count = (int)sqlite3_column_int(stmt, 0); - } SQLITE3_FINALIZE(stmt); @@ -239,39 +578,34 @@ int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *g char select_query[MAX_QUERY_SIZE] = {0, }; char *condition_query = NULL; char *option_query = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id); + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW); + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group)); - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query)); - if(STRING_VALID(condition_query)) + if (STRING_VALID(condition_query)) SAFE_STRLCAT(select_query, condition_query, sizeof(select_query)); - if(STRING_VALID(option_query)) + if (STRING_VALID(option_query)) SAFE_STRLCAT(select_query, option_query, sizeof(select_query)); SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query)); SAFE_FREE(condition_query); SAFE_FREE(option_query); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + if (sqlite3_step(stmt) == SQLITE_ROW) *group_count = (int)sqlite3_column_int(stmt, 0); - } SQLITE3_FINALIZE(stmt); @@ -286,34 +620,26 @@ int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_ char *option_query = NULL; char *name = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id); + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW); + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group)); - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) - { - name = strdup((const char *)sqlite3_column_text(stmt, 0)); - } + while (sqlite3_step(stmt) == SQLITE_ROW) { + name = g_strdup((const char *)sqlite3_column_text(stmt, 0)); - if(callback(name, user_data) == false) - { + if (callback(name, user_data) == false) { SAFE_FREE(name); break; } @@ -325,6 +651,7 @@ int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_ return ret; } +#endif int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data) { @@ -333,49 +660,43 @@ int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_dat char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_alias_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) +#ifdef _USE_TVPD_MODE + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_TABLE_MEDIA_VIEW); - - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_VIEW_MEDIA); +#else + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST_BY_STORAGE_ID, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST); +#endif + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { media_album_s *album = (media_album_s*)calloc(1, sizeof(media_album_s)); - if(album == NULL) - { + if (album == 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; } album->album_id = (int)sqlite3_column_int(stmt, 0); + album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1)); + album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2)); + album->album_art_path = g_strdup((const char *)sqlite3_column_text(stmt, 3)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1))) - album->name = strdup((const char *)sqlite3_column_text(stmt, 1)); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 2))) - album->artist = strdup((const char *)sqlite3_column_text(stmt, 2)); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 3))) - album->album_art_path = strdup((const char *)sqlite3_column_text(stmt, 3)); - - if(callback((media_album_h)album, user_data) == false) - { + if (callback((media_album_h)album, user_data) == false) { media_album_destroy((media_album_h)album); break; } @@ -395,60 +716,44 @@ int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_d char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_alias_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) +#ifdef _USE_TVPD_MODE + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_TABLE_MEDIA_VIEW); - - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_VIEW_MEDIA); +#else + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST); +#endif + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); - + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { media_folder_s *_folder = (media_folder_s*)calloc(1, sizeof(media_folder_s)); - if(_folder == 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; } - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) - _folder->folder_id = strdup((const char *)sqlite3_column_text(stmt, 0)); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1))) - _folder->path = strdup((const char *)sqlite3_column_text(stmt, 1)); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 2))) - _folder->name = strdup((const char *)sqlite3_column_text(stmt, 2)); - + _folder->folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0)); + _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 1)); + _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2)); _folder->storage_type = (int)sqlite3_column_int(stmt, 3); + _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 4)); - _folder->modified_time = (int)sqlite3_column_int(stmt, 4); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 5))) - _folder->storage_uuid = strdup((const char *)sqlite3_column_text(stmt, 5)); - - _folder->folder_order = (int)sqlite3_column_int(stmt, 6); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 7))) - _folder->parent_folder_id= strdup((const char *)sqlite3_column_text(stmt, 7)); - - if(callback((media_folder_h)_folder, user_data) == false) - { + if (callback((media_folder_h)_folder, user_data) == false) { media_folder_destroy((media_folder_h) _folder); break; } @@ -468,46 +773,36 @@ int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *us char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - if(!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_LIST, sizeof(select_query))) - { + if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_LIST, sizeof(select_query))) { media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { media_playlist_s *_playlist = (media_playlist_s*)calloc(1, sizeof(media_playlist_s)); - if(_playlist == NULL) - { + if (_playlist == 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; } _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, 2)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1))) - _playlist->name = strdup((const char *)sqlite3_column_text(stmt, 1)); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 2))) - _playlist->thumbnail_path = strdup((const char *)sqlite3_column_text(stmt, 2)); - - if(callback((media_playlist_h)_playlist, user_data) == false) - { + if (callback((media_playlist_h)_playlist, user_data) == false) { media_playlist_destroy((media_playlist_h)_playlist); break; } @@ -526,31 +821,26 @@ int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_membe char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - //snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ID_FROM_PLAYLIST_VIEW, playlist_id); snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id); - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { int playlist_member_id = 0; - playlist_member_id = (int)sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX); //MEDIA_INFO_ITEM_MAX is pm_id + playlist_member_id = (int)sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX); /*MEDIA_INFO_ITEM_MAX is pm_id*/ media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s)); - if(_media == NULL) - { + if (_media == 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; @@ -558,8 +848,7 @@ int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_membe _media_info_item_get_detail(stmt, (media_info_h)_media); - if(callback(playlist_member_id, (media_info_h)_media, user_data) == false) - { + if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) { media_info_destroy((media_info_h)_media); break; } @@ -579,52 +868,40 @@ int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callba char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - if(!STRING_VALID(media_id)) - { - if(!SAFE_STRLCPY(select_query, SELECT_TAG_LIST, sizeof(select_query))) - { + if (!STRING_VALID(media_id)) { + if (!SAFE_STRLCPY(select_query, SELECT_TAG_LIST, sizeof(select_query))) { media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } - } - else - { + } else snprintf(select_query, sizeof(select_query), SELECT_TAG_LIST_BY_MEDIA_ID, media_id); - } - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query)); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { media_tag_s *_tag = (media_tag_s*)calloc(1, sizeof(media_tag_s)); - if(_tag == NULL) - { + if (_tag == 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; } _tag->tag_id = (int)sqlite3_column_int(stmt, 0); + _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1))) - _tag->name = strdup((const char *)sqlite3_column_text(stmt, 1)); - - if(callback((media_tag_h)_tag, user_data) == false) - { + if (callback((media_tag_h)_tag, user_data) == false) { media_tag_destroy((media_tag_h)_tag); break; } @@ -643,49 +920,56 @@ int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_attirbute_handle(); - memset(select_query, 0x00, sizeof(select_query)); +#ifdef _USE_TVPD_MODE + if (STRING_VALID(media_id)) { //get bookmark by media_id + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id); + else + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id); + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, DB_VIEW_MEDIA); + } +#else + if (STRING_VALID(media_id)) { //get bookmark by media_id + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, media_id); + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_STORAGE_ID, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST); + } +#endif - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id); - else - snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, media_id); - - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { media_bookmark_s *bookmark = (media_bookmark_s*)calloc(1, sizeof(media_bookmark_s)); - if(bookmark == NULL) - { + if (bookmark == 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; } bookmark->bookmark_id = (int)sqlite3_column_int(stmt, 0); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1))) - bookmark->media_id = strdup((const char *)sqlite3_column_text(stmt, 1)); - + bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1)); bookmark->marked_time = (int)sqlite3_column_int(stmt, 2); + bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3)); + bookmark->name = g_strdup((const char *)sqlite3_column_text(stmt, 4)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 3))) - bookmark->thumbnail_path = strdup((const char *)sqlite3_column_text(stmt, 3)); - - if(callback((media_bookmark_h)bookmark, user_data) == false) - { + if (callback((media_bookmark_h)bookmark, user_data) == false) { media_bookmark_destroy((media_bookmark_h)bookmark); break; } @@ -706,54 +990,58 @@ int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb call char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_attirbute_handle(); - memset(select_query, 0x00, sizeof(select_query)); +#ifdef _USE_TVPD_MODE + if (STRING_VALID(media_id)) { //get face by media_id + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id); + else + snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id); + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, DB_VIEW_MEDIA); + } +#else + if (STRING_VALID(media_id)) { //get face by media_id + snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, media_id); + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_STORAGE_ID, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST); + } +#endif + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id); - else - snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, media_id); - - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); - media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { media_face_s *face = (media_face_s*)calloc(1, sizeof(media_face_s)); - if(face == NULL) - { + if (face == 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; } - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) - face->face_id = strdup((const char *)sqlite3_column_text(stmt, 0)); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1))) - face->media_id = strdup((const char *)sqlite3_column_text(stmt, 1)); - + face->face_id = (int)sqlite3_column_int(stmt, 0); + face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1)); face->face_rect_x = (int)sqlite3_column_int(stmt, 2); face->face_rect_y = (int)sqlite3_column_int(stmt, 3); face->face_rect_w = (int)sqlite3_column_int(stmt, 4); face->face_rect_h = (int)sqlite3_column_int(stmt, 5); - face->orientation= (int)sqlite3_column_int(stmt, 6); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 7))) - face->face_tag = strdup((const char *)sqlite3_column_text(stmt, 7)); + face->orientation = (int)sqlite3_column_int(stmt, 6); + face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7)); - if(callback((media_face_h)face, user_data) == false) - { + if (callback((media_face_h)face, user_data) == false) { media_face_destroy((media_face_h)face); break; } @@ -774,45 +1062,41 @@ int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_li char select_query[MAX_QUERY_SIZE] = {0, }; char *condition_query = NULL; char *option_query = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - if(group_type == MEDIA_GROUP_ALBUM) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) + if (group_type == MEDIA_GROUP_ALBUM) { +#ifdef _USE_TVPD_MODE + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, DB_TABLE_MEDIA_VIEW, group_id); - } - else if(group_type == MEDIA_GROUP_PLAYLIST) - { + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, DB_VIEW_MEDIA, group_id); +#else + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM_BY_STORAGE_ID, group_id, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, group_id); +#endif + } else if (group_type == MEDIA_GROUP_PLAYLIST) { snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id); - } - else if(group_type == MEDIA_GROUP_TAG) - { + } else if (group_type == MEDIA_GROUP_TAG) { snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_TAG, group_id); - } - else - { + } else { media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + if (sqlite3_step(stmt) == SQLITE_ROW) *item_count = (int)sqlite3_column_int(stmt, 0); - } SQLITE3_FINALIZE(stmt); @@ -828,84 +1112,105 @@ int _media_db_get_group_item_count(const char *group_name, filter_h filter, grou char *condition_query = NULL; char *option_query = NULL; bool is_simple = FALSE; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - if(group_type == MEDIA_GROUP_NONE) - { + if (group_type == MEDIA_GROUP_NONE) { /* There are 2 ways to get count for media table for performance If user wants to set offset and count, use SQL SELECT_MEDIA_COUNT_FROM_MEDIA. If user wants to get count without setting count, SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE */ if (_filter && ((_filter->offset < 0) && (_filter->count < 0))) { - if(STRING_VALID(_filter->storage_id)) +#ifdef _USE_TVPD_MODE + if (STRING_VALID(_filter->storage_id)) snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_TABLE_MEDIA_VIEW); + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA); +#else + if (STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE_BY_STORAGE_ID, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE); +#endif is_simple = TRUE; } else { - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_TABLE_MEDIA_VIEW); +#ifdef _USE_TVPD_MODE + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_VIEW_MEDIA); +#else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA); +#endif } - } - else if(group_type == MEDIA_GROUP_FOLDER) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) + } else if (group_type == MEDIA_GROUP_FOLDER) { +#ifdef _USE_TVPD_MODE + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name); else - tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name); - + tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_VIEW_MEDIA, group_name); +#else + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER_BY_STORAGE_ID, group_name, _filter->storage_id); + else + tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, group_name); +#endif SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); - } - else if(group_type == MEDIA_GROUP_TAG_BY_MEDIA_ID) - { + } else if (group_type == MEDIA_GROUP_TAG_BY_MEDIA_ID) { snprintf(select_query, sizeof(select_query), SELECT_TAG_COUNT_BY_MEDIA_ID, group_name); - } - else if(group_type == MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) + } else if (group_type == MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID) { +#ifdef _USE_TVPD_MODE + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name); else - tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, group_name); - + tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name); +#else + tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, group_name); +#endif SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); - } - else if(group_type == MEDIA_GROUP_STORAGE) - { + } else if (group_type == MEDIA_GROUP_STORAGE) { +#ifdef _USE_TVPD_MODE tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_STORAGE, group_name, group_name); - +#else + tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_STORAGE, group_name); +#endif SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); - } - else if (group_type == MEDIA_GROUP_FACE_BY_MEDIA_ID) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) + } else if (group_type == MEDIA_GROUP_FACE_BY_MEDIA_ID) { +#ifdef _USE_TVPD_MODE + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name); else - tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, group_name); - + tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name); +#else + tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, group_name); +#endif SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); - } - else - { +#ifdef _USE_TVPD_MODE + } else if (group_type == MEDIA_GROUP_PVR) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id); + else + SAFE_STRLCAT(select_query, SELECT_PVR_COUNT, sizeof(select_query)); + } else if (group_type == MEDIA_GROUP_UHD) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id); + else + SAFE_STRLCAT(select_query, SELECT_UHD_COUNT, sizeof(select_query)); +#endif + } else { media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); - if(ret != MEDIA_CONTENT_ERROR_NONE) - { - if(tmp_query != NULL) + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + if (tmp_query != NULL) SQLITE3_SAFE_FREE(tmp_query); return ret; } - if(group_type == MEDIA_GROUP_NONE) - { + if (group_type == MEDIA_GROUP_NONE) { SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query)); - if(STRING_VALID(condition_query)) + if (STRING_VALID(condition_query)) SAFE_STRLCAT(select_query, condition_query, sizeof(select_query)); - if(STRING_VALID(option_query)) + if (STRING_VALID(option_query)) SAFE_STRLCAT(select_query, option_query, sizeof(select_query)); if (!is_simple) @@ -915,17 +1220,15 @@ int _media_db_get_group_item_count(const char *group_name, filter_h filter, grou SAFE_FREE(option_query); } - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); - if(tmp_query != NULL) + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); + if (tmp_query != NULL) SQLITE3_SAFE_FREE(tmp_query); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + if (sqlite3_step(stmt) == SQLITE_ROW) *item_count = (int)sqlite3_column_int(stmt, 0); - } SQLITE3_FINALIZE(stmt); @@ -939,52 +1242,62 @@ int _media_db_get_group_item_by_id(int group_id, filter_h filter, media_info_cb char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - if(group_type == MEDIA_GROUP_ALBUM) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) +#ifdef _USE_TVPD_MODE + if (group_type == MEDIA_GROUP_ALBUM) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, DB_TABLE_MEDIA_VIEW, group_id); - } - else if(group_type == MEDIA_GROUP_PLAYLIST) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, DB_VIEW_MEDIA, group_id); + } else if (group_type == MEDIA_GROUP_PLAYLIST) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, DB_TABLE_MEDIA_VIEW, group_id); - } - else if(group_type == MEDIA_GROUP_TAG) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, DB_VIEW_MEDIA, group_id); + } else if (group_type == MEDIA_GROUP_TAG) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_TABLE_MEDIA_VIEW, group_id); + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_VIEW_MEDIA, group_id); + } else { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } - else - { +#else + if (group_type == MEDIA_GROUP_ALBUM) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM_BY_STORAGE_ID, group_id, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, group_id); + } else if (group_type == MEDIA_GROUP_PLAYLIST) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST_BY_STORAGE_ID, group_id, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, group_id); + } else if (group_type == MEDIA_GROUP_TAG) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG_BY_STORAGE_ID, group_id, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, group_id); + } else { media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } - - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); +#endif + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s)); - if(item == NULL) - { + if (item == 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; @@ -992,8 +1305,7 @@ int _media_db_get_group_item_by_id(int group_id, filter_h filter, media_info_cb _media_info_item_get_detail(stmt, (media_info_h)item); - if(callback((media_info_h)item, user_data) == false) - { + if (callback((media_info_h)item, user_data) == false) { media_info_destroy((media_info_h)item); break; } @@ -1013,49 +1325,52 @@ int _media_db_get_group_item(const char *group_name, filter_h filter, media_info char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - - if(group_type == MEDIA_GROUP_NONE) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) +#ifdef _USE_TVPD_MODE + if (group_type == MEDIA_GROUP_NONE) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, DB_TABLE_MEDIA_VIEW); - } - else if(group_type == MEDIA_GROUP_FOLDER) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, DB_VIEW_MEDIA); + } else if (group_type == MEDIA_GROUP_FOLDER) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name); - } - else if(group_type == MEDIA_GROUP_STORAGE) - { + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name); + } else if (group_type == MEDIA_GROUP_STORAGE) { snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name, group_name); + } else { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } - else - { +#else + if (group_type == MEDIA_GROUP_NONE) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM_BY_STORAGE_ID, _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM); + } else if (group_type == MEDIA_GROUP_FOLDER) { + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, group_name); + } else if (group_type == MEDIA_GROUP_STORAGE) { + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name); + } else { media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } - - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); +#endif + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s)); - if(item == NULL) - { + if (item == 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; @@ -1063,8 +1378,83 @@ int _media_db_get_group_item(const char *group_name, filter_h filter, media_info _media_info_item_get_detail(stmt, (media_info_h)item); - if(callback((media_info_h)item, user_data) == false) - { + if (callback((media_info_h)item, user_data) == false) { + media_info_destroy((media_info_h)item); + break; + } + + media_info_destroy((media_info_h)item); + } + + SQLITE3_FINALIZE(stmt); + + return ret; +} + +#ifdef _USE_SENIOR_MODE +int _media_db_get_group_item_by_union_select(const char *group_name, filter_h filter1, filter_h filter2, media_info_cb callback, void *user_data) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + char select_query1[MAX_QUERY_SIZE] = {0, }; + char *condition_query1 = NULL; + char *option_query1 = NULL; + char select_query2[MAX_QUERY_SIZE] = {0, }; + char *condition_query2 = NULL; + char *option_query2 = NULL; + sqlite3_stmt *stmt = NULL; + filter_s *_filter1 = (filter_s*)filter1; + filter_s *_filter2 = (filter_s*)filter2; + + memset(select_query1, 0x00, sizeof(select_query1)); + + if ((_filter1 != NULL) && STRING_VALID(_filter1->storage_id)) + snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, _filter1->storage_id, group_name); + else + snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name); + + ret = __media_db_make_query(filter1, select_query1, sizeof(select_query1), &condition_query1, &option_query1); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SAFE_FREE(condition_query1); + SAFE_FREE(option_query1); + media_content_error("create select_query1 failed"); + return ret; + } + + memset(select_query2, 0x00, sizeof(select_query2)); + + if ((_filter2 != NULL) && STRING_VALID(_filter2->storage_id)) + snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, _filter2->storage_id, group_name); + else + snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name); + + ret = __media_db_make_query(filter2, select_query2, sizeof(select_query2), &condition_query2, &option_query2); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + SAFE_FREE(condition_query1); + SAFE_FREE(option_query1); + SAFE_FREE(condition_query2); + SAFE_FREE(option_query2); + media_content_error("create select_query2 failed"); + return ret; + } + + ret = _content_query_prepare_by_union_select(&stmt, select_query1, condition_query1, option_query1, select_query2, condition_query2, option_query2); + SAFE_FREE(condition_query1); + SAFE_FREE(option_query1); + SAFE_FREE(condition_query2); + SAFE_FREE(option_query2); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + while (sqlite3_step(stmt) == SQLITE_ROW) { + media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s)); + if (item == 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; + } + + _media_info_item_get_detail(stmt, (media_info_h)item); + + if (callback((media_info_h)item, user_data) == false) { media_info_destroy((media_info_h)item); break; } @@ -1076,6 +1466,7 @@ int _media_db_get_group_item(const char *group_name, filter_h filter, media_info return ret; } +#endif int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count) { @@ -1085,62 +1476,95 @@ int _media_db_get_media_group_item_count(const char *group_name, filter_h filter char *tmp_query = NULL; char *condition_query = NULL; char *option_query = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); +#ifdef _USE_TVPD_MODE + if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */ + if (group_name != NULL) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name); + else + tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name); - if(group_name != NULL) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) - { - tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name); SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group)); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group)); } - else - { - tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name); + } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/ + if (group_name != NULL) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name); + else + tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name); + SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group)); + else + snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group)); + } + } else {/*uhd content*/ + if (group_name != NULL) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name); + else + tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name); + + SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group)); + else + snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group)); } } - else - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group)); +#else + if (group_name != NULL) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) { + tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP_BY_STORAGE_ID, __media_db_get_group_name(group), group_name, _filter->storage_id); + SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); + } else { + tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name); + SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); + } + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group)); + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group)); } - - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); - if(ret != MEDIA_CONTENT_ERROR_NONE) - { - if(tmp_query != NULL) +#endif + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + if (tmp_query != NULL) SQLITE3_SAFE_FREE(tmp_query); return ret; } SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query)); - if(STRING_VALID(condition_query)) + if (STRING_VALID(condition_query)) SAFE_STRLCAT(select_query, condition_query, sizeof(select_query)); - if(STRING_VALID(option_query)) + if (STRING_VALID(option_query)) SAFE_STRLCAT(select_query, option_query, sizeof(select_query)); SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query)); SAFE_FREE(condition_query); SAFE_FREE(option_query); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); - if(tmp_query != NULL) + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); + if (tmp_query != NULL) SQLITE3_SAFE_FREE(tmp_query); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + if (sqlite3_step(stmt) == SQLITE_ROW) *item_count = (int)sqlite3_column_int(stmt, 0); - } SQLITE3_FINALIZE(stmt); @@ -1155,49 +1579,55 @@ int _media_db_get_media_group_item(const char *group_name, filter_h filter, medi char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; filter_s *_filter = (filter_s*)filter; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - - if(group_name != NULL) - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) +#ifdef _USE_TVPD_MODE + if (group_name != NULL) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name); else - tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name); + tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name); SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); - } - else - { - if((_filter != NULL) && STRING_VALID(_filter->storage_id)) + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group)); else - snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group)); + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group)); } +#else + if (group_name != NULL) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP_BY_STORAGE_ID, __media_db_get_group_name(group), group_name, _filter->storage_id); + else + tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, __media_db_get_group_name(group), group_name); - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); - if(ret != MEDIA_CONTENT_ERROR_NONE) - { - if(tmp_query != NULL) + SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id); + else + snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, __media_db_get_group_name(group)); + } +#endif + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + if (tmp_query != NULL) SQLITE3_SAFE_FREE(tmp_query); return ret; } - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); - if(tmp_query != NULL) + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); + if (tmp_query != NULL) SQLITE3_SAFE_FREE(tmp_query); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s)); - if(item == NULL) - { + if (item == 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; @@ -1205,8 +1635,7 @@ int _media_db_get_media_group_item(const char *group_name, filter_h filter, medi _media_info_item_get_detail(stmt, (media_info_h)item); - if(callback((media_info_h)item, user_data) == false) - { + if (callback((media_info_h)item, user_data) == false) { media_info_destroy((media_info_h)item); break; } @@ -1222,56 +1651,40 @@ int _media_db_get_media_group_item(const char *group_name, filter_h filter, medi int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data) { int ret = MEDIA_CONTENT_ERROR_NONE; - char select_query[DEFAULT_QUERY_SIZE]; + char select_query[DEFAULT_QUERY_SIZE] = {0, }; char *condition_query = NULL; char *option_query = NULL; sqlite3_stmt *stmt = NULL; - attribute_h attr = NULL; - attr = _content_get_attirbute_handle(); memset(select_query, 0x00, sizeof(select_query)); - if(!SAFE_STRLCPY(select_query, SELECT_STORAGE_LIST, sizeof(select_query))) - { + if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_LIST, sizeof(select_query))) { media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } - ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query); + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _content_query_prepare(&stmt, select_query, condition_query, option_query); + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); SAFE_FREE(condition_query); SAFE_FREE(option_query); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - while(sqlite3_step(stmt) == SQLITE_ROW) - { + while (sqlite3_step(stmt) == SQLITE_ROW) { media_storage_s *_storage = (media_storage_s*)calloc(1, sizeof(media_storage_s)); - if(_storage == NULL) - { + if (_storage == 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; } - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) - _storage->storage_id = strdup((const char *)sqlite3_column_text(stmt, 0)); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1))) - _storage->storage_name = strdup((const char *)sqlite3_column_text(stmt, 1)); - - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 2))) - _storage->storage_path = strdup((const char *)sqlite3_column_text(stmt, 2)); + _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0)); + _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 1)); + _storage->storage_type = (int)sqlite3_column_int(stmt, 2); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 3))) - _storage->storage_account = strdup((const char *)sqlite3_column_text(stmt, 3)); - - _storage->storage_type = (int)sqlite3_column_int(stmt, 4); - - if(callback((media_storage_h)_storage, user_data) == false) - { + if (callback((media_storage_h)_storage, user_data) == false) { media_storage_destroy((media_storage_h) _storage); break; } @@ -1284,7 +1697,7 @@ int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user return ret; } -int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id) +int _media_db_get_storage_id_by_media_id(const char *media_id, char **storage_id) { int ret = MEDIA_CONTENT_ERROR_NONE; sqlite3_stmt *stmt = NULL; @@ -1292,16 +1705,14 @@ int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id) select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id); - 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); - if(sqlite3_step(stmt) == SQLITE_ROW) - { - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) - strncpy(storage_id, (const char *)sqlite3_column_text(stmt, 0), MEDIA_CONTENT_UUID_SIZE); + if (sqlite3_step(stmt) == SQLITE_ROW) { + *storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0)); } else { - media_content_error("There's no media!!"); + media_content_error("Invalid media_id[%s]", media_id); ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } @@ -1309,3 +1720,381 @@ int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id) return ret; } + +#ifdef _USE_TVPD_MODE +int _media_db_get_pvr_group_item(const char *group_name, filter_h filter, media_group_e group, media_pvr_cb callback, void *user_data) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + char select_query[DEFAULT_QUERY_SIZE] = {0, }; + char *tmp_query = NULL; + char *condition_query = NULL; + char *option_query = NULL; + sqlite3_stmt *stmt = NULL; + filter_s *_filter = (filter_s*)filter; + + memset(select_query, 0x00, sizeof(select_query)); + + if (group_name != NULL) { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name); + else + tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name); + + SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query)); + } else { + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group)); + else + snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group)); + } + + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + if (ret != MEDIA_CONTENT_ERROR_NONE) { + if (tmp_query != NULL) + sqlite3_free(tmp_query); + return ret; + } + + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); + if (tmp_query != NULL) + sqlite3_free(tmp_query); + SAFE_FREE(condition_query); + SAFE_FREE(option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + while (sqlite3_step(stmt) == SQLITE_ROW) { + media_pvr_s *item = (media_pvr_s*)calloc(1, sizeof(media_pvr_s)); + if (item == 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; + } + + _media_pvr_item_get_detail(stmt, (media_pvr_h)item); + + if (callback((media_pvr_h)item, user_data) == false) { + media_info_destroy((media_pvr_h)item); + break; + } + + media_pvr_destroy((media_pvr_h)item); + } + + SQLITE3_FINALIZE(stmt); + + return ret; +} + +typedef enum { + MEDIA_PVR_MEDIA_ID = 0, + MEDIA_PVR_STORAGE_ID, + MEDIA_PVR_PATH, + MEDIA_PVR_SIZE, + MEDIA_PVR_DURATION, + MEDIA_PVR_TIME_ZONE, + MEDIA_PVR_PTC, + MEDIA_PVR_MAJOR, + MEDIA_PVR_MINOR, + MEDIA_PVR_CHANNEL_TYPE, + MEDIA_PVR_CHANNEL_NAME, + MEDIA_PVR_CHANNEL_NUM, + MEDIA_PVR_SERVICE_PROFILE, + MEDIA_PVR_PROGRAM_TITLE, + MEDIA_PVR_PROGRAM_NUM, + MEDIA_PVR_PROGRAM_CRID, + MEDIA_PVR_GUIDANCE, + MEDIA_PVR_SYNOPSIS, + MEDIA_PVR_GENRE, + MEDIA_PVR_LANGUAGE, + MEDIA_PVR_EMBARGO_TIME, + MEDIA_PVR_EXPIRY_TIME, + MEDIA_PVR_START_TIME, + MEDIA_PVR_PROGRAM_START_TIME, + MEDIA_PVR_PROGRAM_END_TIME, + MEDIA_PVR_PROGRAM_DATE, + MEDIA_PVR_PARENTAL_RATING, + MEDIA_PVR_TIMER_RECORD, + MEDIA_PVR_SERIES_RECORD, + MEDIA_PVR_HD, + MEDIA_PVR_SUBTITLE, + MEDIA_PVR_TTX, + MEDIA_PVR_AD, + MEDIA_PVR_HARDOF_HEARINGRADIO, + MEDIA_PVR_DATA_SERVICE, + MEDIA_PVR_CONTENT_LOCK, + MEDIA_PVR_CONTENT_WATCH, + MEDIA_PVR_HAS_AUDIO_ONLY, + MEDIA_PVR_IS_LOCAL_RECORDED, + MEDIA_PVR_RESOLUTION, + MEDIA_PVR_ASPECTRATIO, + MEDIA_PVR_MODIFIED_MONTH, + MEDIA_PVR_SPORTS_TYPE, + MEDIA_PVR_GUIDANCE_LENGTH, + MEDIA_PVR_TVMODE, + MEDIA_PVR_PLAY_COUNT, + MEDIA_PVR_PRIVATE_DATA, + MEDIA_PVR_HIGHLIGHT, +} media_pvr_field_e; + +void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr) +{ + media_pvr_s *_pvr = (media_pvr_s*)pvr; + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID))) + _pvr->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID))) + _pvr->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH))) + _pvr->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH)); + + _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE); + + _pvr->duration = (int)sqlite3_column_int(stmt, MEDIA_PVR_DURATION); + + _pvr->timezone = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE); + + _pvr->ptc = (int)sqlite3_column_int(stmt, MEDIA_PVR_PTC); + + _pvr->major = (int)sqlite3_column_int(stmt, MEDIA_PVR_MAJOR); + + _pvr->minor = (int)sqlite3_column_int(stmt, MEDIA_PVR_MINOR); + + _pvr->channel_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE); + + _pvr->service_profile = (unsigned int)sqlite3_column_int(stmt, MEDIA_PVR_SERVICE_PROFILE); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME))) + _pvr->channel_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM))) + _pvr->channel_num = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE))) + _pvr->program_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE)); + + _pvr->program_num = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID))) + _pvr->program_crid = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE))) + _pvr->guidance = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS))) + _pvr->synopsis = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE))) + _pvr->genre = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE))) + _pvr->language = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH))) + _pvr->modified_month = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA))) + _pvr->private_data = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA)); + + _pvr->embargo_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME); + + _pvr->expiry_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME); + + _pvr->start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_START_TIME); + + _pvr->program_start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME); + + _pvr->program_end_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME); + + _pvr->program_date = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE); + + _pvr->parental_rating = (int)sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING); + + _pvr->timer_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD); + + _pvr->series_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD); + + _pvr->hd = (int)sqlite3_column_int(stmt, MEDIA_PVR_HD); + + _pvr->subtitle = (int)sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE); + + _pvr->ttx = (int)sqlite3_column_int(stmt, MEDIA_PVR_TTX); + + _pvr->ad = (int)sqlite3_column_int(stmt, MEDIA_PVR_AD); + + _pvr->hard_of_hearing_radio = (int)sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO); + + _pvr->data_service = (int)sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE); + + _pvr->content_lock = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK); + + _pvr->content_watch = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH); + + _pvr->has_audio_only = (int)sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY); + + _pvr->is_local_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED); + + _pvr->resolution = (int)sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION); + + _pvr->aspectratio = (int)sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO); + + _pvr->sports_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE); + + _pvr->guidance_length = (int)sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH); + + _pvr->tvmode = (int)sqlite3_column_int(stmt, MEDIA_PVR_TVMODE); + + _pvr->play_count = (int)sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT); + + _pvr->highlight = (int)sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT); + + return; +} + +int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + char select_query[DEFAULT_QUERY_SIZE] = {0, }; + char *condition_query = NULL; + char *option_query = NULL; + sqlite3_stmt *stmt = NULL; + filter_s *_filter = (filter_s*)filter; + + memset(select_query, 0x00, sizeof(select_query)); + + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_PVR_LIST_BY_STORAGE_ID, _filter->storage_id); + else + SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query)); + + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); + SAFE_FREE(condition_query); + SAFE_FREE(option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + while (sqlite3_step(stmt) == SQLITE_ROW) { + media_pvr_s *_pvr = (media_pvr_s*)calloc(1, sizeof(media_pvr_s)); + + if (_pvr == 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; + } + + _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr); + + if (callback((media_pvr_h)_pvr, user_data) == false) { + media_pvr_destroy((media_pvr_h) _pvr); + break; + } + + media_pvr_destroy((media_pvr_h) _pvr); + } + + SQLITE3_FINALIZE(stmt); + + return ret; +} + +typedef enum { + MEDIA_UHD_MEDIA_ID = 0, + MEDIA_UHD_STORAGE_ID, + MEDIA_UHD_PATH, + MEDIA_UHD_SIZE, + MEDIA_UHD_CONTENT_ID, + MEDIA_UHD_CONTENT_TITLE, + MEDIA_UHD_FILE_NAME, + MEDIA_UHD_FOLDER_ID, + MEDIA_UHD_RELEASE_DATE, + MEDIA_UHD_MODIFIED_TIME, + MEDIA_UHD_PLAYED_POSITION, + MEDIA_UHD_SUB_TYPE, + MEDIA_UHD_PLAYED_COUNT, +} media_uhd_field_e; + +void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd) +{ + media_uhd_s *_uhd = (media_uhd_s*)uhd; + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID))) + _uhd->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID))) + _uhd->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH))) + _uhd->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH)); + + _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID))) + _uhd->content_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE))) + _uhd->content_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME))) + _uhd->file_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME)); + + if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE))) + _uhd->release_date = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE)); + + _uhd->modified_time = (int)sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME); + _uhd->played_position = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION); + _uhd->sub_type = (int)sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE); + _uhd->played_count = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT); + + return; +} + +int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + char select_query[DEFAULT_QUERY_SIZE] = {0, }; + char *condition_query = NULL; + char *option_query = NULL; + sqlite3_stmt *stmt = NULL; + filter_s *_filter = (filter_s*)filter; + + memset(select_query, 0x00, sizeof(select_query)); + + if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) + snprintf(select_query, sizeof(select_query), SELECT_UHD_LIST_BY_STORAGE_ID, _filter->storage_id); + else + SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query)); + + ret = __media_db_make_query(filter, select_query, sizeof(select_query), &condition_query, &option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _content_query_prepare(select_query, condition_query, option_query, &stmt); + SAFE_FREE(condition_query); + SAFE_FREE(option_query); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + while (sqlite3_step(stmt) == SQLITE_ROW) { + media_uhd_s *_uhd = (media_uhd_s*)calloc(1, sizeof(media_uhd_s)); + + if (_uhd == 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; + } + + _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd); + + if (callback((media_uhd_h)_uhd, user_data) == false) { + media_uhd_destroy((media_uhd_h) _uhd); + break; + } + media_uhd_destroy((media_uhd_h) _uhd); + } + + SQLITE3_FINALIZE(stmt); + + return ret; +} +#endif