From a12b274131f416da6f825507c1fd48647da86c02 Mon Sep 17 00:00:00 2001 From: "ji.yong.seo" Date: Tue, 3 Mar 2015 17:51:07 +0900 Subject: [PATCH] modify DB schema. Change-Id: I0006be92300605526cfe6c855029af190b2f340e --- include/media_audio.h | 30 ++ include/media_content_type.h | 22 ++ include/media_info.h | 35 +++ include/media_info_private.h | 33 ++- include/media_util_private.h | 4 + include/media_video.h | 14 + packaging/capi-content-media-content.spec | 2 +- src/media_audio.c | 64 +++++ src/media_content.c | 154 ++++++++++- src/media_db.c | 4 + src/media_folder.c | 14 +- src/media_image.c | 15 +- src/media_info.c | 441 +++++++++++++++++++++++------- src/media_playlist.c | 1 + src/media_util_private.c | 108 ++++++++ src/media_video.c | 45 +++ test/media-content_test.c | 152 +++++++++- 17 files changed, 1020 insertions(+), 118 deletions(-) diff --git a/include/media_audio.h b/include/media_audio.h index 866559a..34684a8 100755 --- a/include/media_audio.h +++ b/include/media_audio.h @@ -141,6 +141,20 @@ int audio_meta_get_album(audio_meta_h audio, char **album_name); */ int audio_meta_get_artist(audio_meta_h audio, char **artist_name); +/** + * @brief Gets name of album_artist of given audio metadata.\n + * If the value is an empty string, the method returns "Unknown". + * + * @remarks @a album_artist_name must be released with free() by you. + * + * @param [in] audio The handle to audio metadata + * @param [out] album_artist_name The name of the album_artist + * @return 0 on success, otherwise a negative error value. + * @retval #MEDIA_CONTENT_ERROR_NONE Successful + * @retval #MEDIA_CONTENT_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #MEDIA_CONTENT_ERROR_OUT_OF_MEMORY Out of memory + */ +int audio_meta_get_album_artist(audio_meta_h audio, char **album_artist_name); /** * @brief Gets the genre name of the given audio metadata. @@ -277,6 +291,22 @@ int audio_meta_get_track_num(audio_meta_h audio, char **track_num); */ int audio_meta_get_bit_rate(audio_meta_h audio, int *bit_rate); +/** + * @brief Gets bit per sample of the given audio metadata. + * @since_tizen 2.3 + * + * @param [in] audio The handle to the audio metadata + * @param [out] bitpersample The audio bit per sample + * + * @return @c 0 on success, + * otherwise a negative error value + * + * @retval #MEDIA_CONTENT_ERROR_NONE Successful + * @retval #MEDIA_CONTENT_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #MEDIA_CONTENT_ERROR_PERMISSION_DENIED Permission denied + */ + +int audio_meta_get_bitpersample(audio_meta_h audio, int *bitpersample); /** * @brief Gets the sample rate of the given audio metadata. diff --git a/include/media_content_type.h b/include/media_content_type.h index 4c238dd..e4a4aab 100755 --- a/include/media_content_type.h +++ b/include/media_content_type.h @@ -121,6 +121,7 @@ typedef enum MEDIA_CONTENT_COLLATE_DEFAULT = 0, /**< Default collation BINARY */ MEDIA_CONTENT_COLLATE_NOCASE = 1, /**< Collation NOCASE, not case sensitive */ MEDIA_CONTENT_COLLATE_RTRIM = 2, /**< Collation RTRIM, trailing space characters are ignored */ + MEDIA_CONTENT_COLLATE_LOCALIZED = 3, /**< Collation LOCALIZATION, NOCASE also applied */ } media_content_collation_e; #define MEDIA_CONTENT_ERROR_CLASS TIZEN_ERROR_MEDIA_CONTENT @@ -520,10 +521,12 @@ typedef bool (*media_group_cb)(const char *group_name, void *user_data); #define MEDIA_SIZE "MEDIA_SIZE" /**< Media MIME size */ #define MEDIA_ADDED_TIME "MEDIA_ADDED_TIME" /**< Media added time */ #define MEDIA_MODIFIED_TIME "MEDIA_MODIFIED_TIME" /**< Media modified time */ +#define MEDIA_TIMELINE "MEDIA_TIMELINE" /**< Media modified time */ #define MEDIA_THUMBNAIL_PATH "MEDIA_THUMBNAIL_PATH" /**< Media thumbnail path */ #define MEDIA_TITLE "MEDIA_TITLE" /**< Media title get from tag or file name */ #define MEDIA_ALBUM "MEDIA_ALBUM" /**< Media album name*/ #define MEDIA_ARTIST "MEDIA_ARTIST" /**< Media artist*/ +#define MEDIA_ALBUM_ARTIST "MEDIA_ALBUM_ARTIST" /**< Media album_artist*/ #define MEDIA_GENRE "MEDIA_GENRE" /**< Media genre*/ #define MEDIA_COMPOSER "MEDIA_COMPOSER" /**< Media composer*/ #define MEDIA_YEAR "MEDIA_YEAR" /**< Media year*/ @@ -532,6 +535,7 @@ typedef bool (*media_group_cb)(const char *group_name, void *user_data); #define MEDIA_TRACK_NUM "MEDIA_TRACK_NUM" /**< Media track number*/ #define MEDIA_DESCRIPTION "MEDIA_DESCRIPTION" /**< Media description*/ #define MEDIA_BITRATE "MEDIA_BITRATE" /**< Media bitrate*/ +#define MEDIA_BITPERSAMPLE "MEDIA_BITPERSAMPLE" /**< Media bit per sample*/ #define MEDIA_SAMPLERATE "MEDIA_SAMPLERATE" /**< Media sample rate*/ #define MEDIA_CHANNEL "MEDIA_CHANNEL" /**< Media channel*/ #define MEDIA_DURATION "MEDIA_DURATION" /**< Media duration */ @@ -555,9 +559,26 @@ typedef bool (*media_group_cb)(const char *group_name, void *user_data); #define MEDIA_LOCATION_TAG "MEDIA_LOCATION_TAG" /**< Media location tag*/ #define MEDIA_AGE_RATING "MEDIA_AGE_RATING" /**< Media age rating*/ #define MEDIA_KEYWORD "MEDIA_KEYWORD" /**< Media keyword*/ +#define MEDIA_WEATHER "MEDIA_WEATHER" /**< Media weather*/ #define MEDIA_IS_DRM "MEDIA_IS_DRM" /**< Is DRM. 0-not drm, 1-drm*/ #define MEDIA_STORAGE_TYPE "MEDIA_STORAGE_TYPE" /**< Media storage. 0-internal storage, 1-external storage*/ +#define MEDIA_FILE_NAME_PINYIN "MEDIA_FILE_NAME_PINYIN" /**< media file name pinyin */ +#define MEDIA_TITLE_PINYIN "MEDIA_TITLE_PINYIN" /**< media title pinyin */ +#define MEDIA_ALBUM_PINYIN "MEDIA_ALBUM_PINYIN" /**< media album pinyin*/ +#define MEDIA_ARTIST_PINYIN "MEDIA_ARTIST_PINYIN" /**< media artist pinyin*/ +#define MEDIA_ALBUM_ARTIST_PINYIN "MEDIA_ALBUM_ARTIST_PINYIN" /**< media album_artist pinyin*/ +#define MEDIA_GENRE_PINYIN "MEDIA_GENRE_PINYIN" /**< media genre pinyin*/ +#define MEDIA_COMPOSER_PINYIN "MEDIA_COMPOSER_PINYIN" /**< media composer pinyin*/ +#define MEDIA_COPYRIGHT_PINYIN "MEDIA_COPYRIGHT_PINYIN" /**< media copyright pinyin*/ +#define MEDIA_DESCRIPTION_PINYIN "MEDIA_DESCRIPTION_PINYIN" /**< media description pinyin*/ +#define MEDIA_AUTHOR_PINYIN "MEDIA_AUTHOR_PINYIN" /**< media authore pinyin*/ +#define MEDIA_PROVIDER_PINYIN "MEDIA_PROVIDER_PINYIN" /**< media provider pinyin*/ +#define MEDIA_CONTENT_NAME_PINYIN "MEDIA_CONTENT_NAME_PINYIN" /**< media content name pinyin*/ +#define MEDIA_CATEGORY_PINYIN "MEDIA_CATEGORY_PINYIN" /**< media category pinyin*/ +#define MEDIA_LOCATION_TAG_PINYIN "MEDIA_LOCATION_TAG_PINYIN" /**< media location tag pinyin*/ +#define MEDIA_AGE_RATING_PINYIN "MEDIA_AGE_RATING_PINYIN" /**< media age rating pinyin*/ +#define MEDIA_KEYWORD_PINYIN "MEDIA_KEYWORD_PINYIN" /**< media keyword pinyin*/ /** * @} */ @@ -573,6 +594,7 @@ typedef bool (*media_group_cb)(const char *group_name, void *user_data); #define FOLDER_NAME "FOLDER_NAME" /**< Folder base name */ #define FOLDER_MODIFIED_TIME "FOLDER_MODIFIED_TIME" /**< Folder modified time */ #define FOLDER_STORAGE_TYPE "FOLDER_STORAGE_TYPE" /**< Folder storage. 0-internal storage, 1-external storage*/ +#define FOLDER_NAME_PINYIN "FOLDER_NAME_PINYIN" /**< folder base name pinyin*/ /** * @} diff --git a/include/media_info.h b/include/media_info.h index 1da3348..f8452bc 100755 --- a/include/media_info.h +++ b/include/media_info.h @@ -621,6 +621,17 @@ int media_info_get_added_time(media_info_h media, time_t *added_time); */ int media_info_get_modified_time(media_info_h media, time_t *time); +/** + * @brief Gets media info's timeline. + * + * @param[in] media The handle to media info + * @param[out] time The date of timeline. + * @return 0 on success, otherwise a negative error value. + * @retval #MEDIA_CONTENT_ERROR_NONE Successful + * @retval #MEDIA_CONTENT_ERROR_INVALID_PARAMETER Invalid parameter + * + */ +int media_info_get_timeline(media_info_h media, time_t* time); /** * @brief Gets the thumbnail of media info. @@ -709,6 +720,17 @@ int media_info_get_latitude(media_info_h media, double* latitude); */ int media_info_get_altitude(media_info_h media, double* altitude); +/** + * @brief Gets media info's weather. + * + * @param[in] media The handle to media info + * @param[out] weater The weather of media info + * @return 0 on success, otherwise a negative error value. + * @retval #MEDIA_CONTENT_ERROR_NONE Successful + * @retval #MEDIA_CONTENT_ERROR_INVALID_PARAMETER Invalid parameter + * + */ +int media_info_get_weather(media_info_h media, char **weather); /** * @brief Gets the rating of media info. @@ -1052,6 +1074,19 @@ int media_info_set_latitude(media_info_h media, double latitude); */ int media_info_set_altitude(media_info_h media, double altitude); +/** + * @brief Sets weather to media info. + * + * @param[in] media The handle to media info + * @param[in] weather The weather of media info + * @return 0 on success, otherwise a negative error value. + * @retval #MEDIA_CONTENT_ERROR_NONE Successful + * @retval #MEDIA_CONTENT_ERROR_OUT_OF_MEMORY Out of memory + * @retval #MEDIA_CONTENT_ERROR_INVALID_PARAMETER Invalid parameter + * @post media_info_update_to_db() + * + */ +int media_info_set_weather(media_info_h media, const char *weather); /** * @brief Sets the rating of media info. diff --git a/include/media_info_private.h b/include/media_info_private.h index 9c8c685..5625a6c 100755 --- a/include/media_info_private.h +++ b/include/media_info_private.h @@ -165,6 +165,7 @@ typedef struct char *date_taken; char *title; char *burst_id; + char *weather; media_content_orientation_e orientation; }image_meta_s; @@ -174,6 +175,7 @@ typedef struct char *title; char *album; char *artist; + char *album_artist; char *genre; char *composer; char *year; @@ -195,6 +197,7 @@ typedef struct char *title; char *album; char *artist; + char *album_artist; char *genre; char *composer; char *year; @@ -202,6 +205,7 @@ typedef struct char *copyright; char *track_num; int bitrate; + int bitpersample; int samplerate; int channel; int duration; @@ -220,11 +224,13 @@ typedef struct unsigned long long size; time_t added_time; time_t modified_time; + time_t timeline; char *thumbnail_path; char *description; double longitude; double latitude; double altitude; + char *weather; int rating; int favourite; char *title; @@ -237,6 +243,7 @@ typedef struct char *keyword; int is_drm; int storage_type; + int sync_status; image_meta_s *image_meta; video_meta_s *video_meta; audio_meta_s *audio_meta; @@ -325,10 +332,12 @@ typedef struct _media_content_cb_data { #define DB_FIELD_MEDIA_SIZE "size" #define DB_FIELD_MEDIA_ADDED_TIME "added_time" #define DB_FIELD_MEDIA_MODIFIED_TIME "modified_time" +#define DB_FIELD_MEDIA_TIMELINE "timeline" #define DB_FIELD_MEDIA_THUMBNAIL_PATH "thumbnail_path" #define DB_FIELD_MEDIA_TITLE "title" #define DB_FIELD_MEDIA_ALBUM "album" #define DB_FIELD_MEDIA_ARTIST "artist" +#define DB_FIELD_MEDIA_ALBUM_ARTIST "album_artist" #define DB_FIELD_MEDIA_GENRE "genre" #define DB_FIELD_MEDIA_COMPOSER "composer" #define DB_FIELD_MEDIA_YEAR "year" @@ -337,6 +346,7 @@ typedef struct _media_content_cb_data { #define DB_FIELD_MEDIA_TRACK_NUM "track_num" #define DB_FIELD_MEDIA_DESCRIPTION "description" #define DB_FIELD_MEDIA_BITRATE "bitrate" +#define DB_FIELD_MEDIA_BITPERSAMPLE "bitpersample" #define DB_FIELD_MEDIA_SAMPLERATE "samplerate" #define DB_FIELD_MEDIA_CHANNEL "channel" #define DB_FIELD_MEDIA_DURATION "duration" @@ -360,15 +370,34 @@ typedef struct _media_content_cb_data { #define DB_FIELD_MEDIA_LOCATION_TAG "location_tag" #define DB_FIELD_MEDIA_AGE_RATING "age_rating" #define DB_FIELD_MEDIA_KEYWORD "keyword" +#define DB_FIELD_MEDIA_WEATHER "weather" #define DB_FIELD_MEDIA_IS_DRM "is_drm" #define DB_FIELD_MEDIA_STORAGE_TYPE "storage_type" +#define DB_FIELD_MEDIA_FILE_NAME_PINYIN "file_name_pinyin" +#define DB_FIELD_MEDIA_TITLE_PINYIN "title_pinyin" +#define DB_FIELD_MEDIA_ALBUM_PINYIN "album_pinyin" +#define DB_FIELD_MEDIA_ARTIST_PINYIN "artist_pinyin" +#define DB_FIELD_MEDIA_ALBUM_ARTIST_PINYIN "album_artist_pinyin" +#define DB_FIELD_MEDIA_GENRE_PINYIN "genre_pinyin" +#define DB_FIELD_MEDIA_COMPOSER_PINYIN "composer_pinyin" +#define DB_FIELD_MEDIA_COPYRIGHT_PINYIN "copyright_pinyin" +#define DB_FIELD_MEDIA_DESCRIPTION_PINYIN "description_pinyin" +#define DB_FIELD_MEDIA_AUTHOR_PINYIN "author_pinyin" +#define DB_FIELD_MEDIA_PROVIDER_PINYIN "provider_pinyin" +#define DB_FIELD_MEDIA_CONTENT_NAME_PINYIN "content_name_pinyin" +#define DB_FIELD_MEDIA_CATEGORY_PINYIN "category_pinyin" +#define DB_FIELD_MEDIA_LOCATION_TAG_PINYIN "location_tag_pinyin" +#define DB_FIELD_MEDIA_AGE_RATING_PINYIN "age_rating_pinyin" +#define DB_FIELD_MEDIA_KEYWORD_PINYIN "keyword_pinyin" + /* DB field for folder */ #define DB_FIELD_FOLDER_ID "folder_uuid" #define DB_FIELD_FOLDER_PATH "path" #define DB_FIELD_FOLDER_NAME "name" #define DB_FIELD_FOLDER_MODIFIED_TIME "modified_time" #define DB_FIELD_FOLDER_STORAGE_TYPE "storage_type" +#define DB_FIELD_FOLDER_NAME_PINYIN "name_pinyin" /* DB field for playlist */ #define DB_FIELD_PLAYLIST_ID "playlist_id" @@ -508,13 +537,13 @@ typedef struct _media_content_cb_data { /* Update Meta*/ #define UPDATE_AV_META_FROM_MEDIA "UPDATE "DB_TABLE_MEDIA" SET played_count=%d, last_played_time=%d, last_played_position=%d WHERE media_uuid='%q'" -#define UPDATE_IMAGE_META_FROM_MEDIA "UPDATE "DB_TABLE_MEDIA" SET orientation=%d WHERE media_uuid='%q'" +#define UPDATE_IMAGE_META_FROM_MEDIA "UPDATE "DB_TABLE_MEDIA" SET orientation=%d, weather=%Q WHERE media_uuid='%q'" /* Get Media list of Group */ //#define MEDIA_INFO_ITEM "media_uuid, path, file_name, media_type, mime_type, size, added_time, modified_time, thumbnail_path, description, // rating, favourite, author, provider, content_name, category, location_tag, age_rating, is_drm, storage_type" #define MEDIA_INFO_ITEM "media_uuid, path, file_name, media_type, mime_type, size, added_time, modified_time, thumbnail_path, description, \ - rating, favourite, author, provider, content_name, category, location_tag, age_rating, keyword, is_drm, storage_type, longitude, latitude, altitude, width, height, datetaken, orientation, title, album, artist, genre, composer, year, recorded_date, copyright, track_num, bitrate, duration, played_count, last_played_time, last_played_position, samplerate, channel, burst_id" + rating, favourite, author, provider, content_name, category, location_tag, age_rating, keyword, is_drm, storage_type, longitude, latitude, altitude, width, height, datetaken, orientation, title, album, artist, album_artist, genre, composer, year, recorded_date, copyright, track_num, bitrate, duration, played_count, last_played_time, last_played_position, samplerate, channel, burst_id, timeline, weather, sync_status" #define SELECT_MEDIA_ITEM "SELECT "MEDIA_INFO_ITEM" FROM "DB_TABLE_MEDIA" WHERE validity=1" #define SELECT_MEDIA_FROM_MEDIA "SELECT "MEDIA_INFO_ITEM" FROM "DB_TABLE_MEDIA" WHERE validity=1 AND media_uuid='%s'" diff --git a/include/media_util_private.h b/include/media_util_private.h index 59dd538..452b4f8 100755 --- a/include/media_util_private.h +++ b/include/media_util_private.h @@ -23,10 +23,14 @@ extern "C" { #endif /* __cplusplus */ +#include /** *@internal */ + +int _media_util_check_file(const char *path); +int _media_util_check_ignore_dir(const char *dir_path, bool *ignore); int _media_util_get_store_type_by_path(const char *path, int *storage_type); diff --git a/include/media_video.h b/include/media_video.h index 38c7e90..bec8096 100755 --- a/include/media_video.h +++ b/include/media_video.h @@ -145,6 +145,20 @@ int video_meta_get_album(video_meta_h video, char **album); */ int video_meta_get_artist(video_meta_h video, char **artist); +/** + * @brief Gets the video's album_artist. + * If the value is an empty string, the method returns "Unknown". + * + * @remarks @a album_artist must be released with free() by you. + * + * @param [in] video The handle to video metadata + * @param [out] album_artist The album_artist of video metadata + * @return 0 on success, otherwise a negative error value. + * @retval #MEDIA_CONTENT_ERROR_NONE Successful + * @retval #MEDIA_CONTENT_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #MEDIA_CONTENT_ERROR_OUT_OF_MEMORY Out of memory + */ +int video_meta_get_album_artist(video_meta_h video, char **album_artist); /** * @brief Gets the video genre. diff --git a/packaging/capi-content-media-content.spec b/packaging/capi-content-media-content.spec index 889da04..135ebcb 100755 --- a/packaging/capi-content-media-content.spec +++ b/packaging/capi-content-media-content.spec @@ -1,6 +1,6 @@ Name: capi-content-media-content Summary: A Media content library in SLP C API -Version: 0.2.59 +Version: 0.2.60 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/media_audio.c b/src/media_audio.c index 61b9aa7..baf0291 100755 --- a/src/media_audio.c +++ b/src/media_audio.c @@ -29,6 +29,7 @@ int audio_meta_destroy(audio_meta_h audio) SAFE_FREE(_audio->title); SAFE_FREE(_audio->album); SAFE_FREE(_audio->artist); + SAFE_FREE(_audio->album_artist); SAFE_FREE(_audio->genre); SAFE_FREE(_audio->composer); SAFE_FREE(_audio->year); @@ -108,6 +109,17 @@ int audio_meta_clone(audio_meta_h *dst, audio_meta_h src) } } + if(STRING_VALID(_src->album_artist)) + { + _dst->album_artist = strdup(_src->album_artist); + if(_dst->album_artist == NULL) + { + audio_meta_destroy((audio_meta_h)_dst); + media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); + return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; + } + } + if(STRING_VALID(_src->genre)) { _dst->genre = strdup(_src->genre); @@ -175,6 +187,7 @@ int audio_meta_clone(audio_meta_h *dst, audio_meta_h src) } _dst->bitrate = _src->bitrate; + _dst->bitpersample = _src->bitpersample; _dst->samplerate = _src->samplerate; _dst->channel = _src->channel; _dst->duration = _src->duration; @@ -289,6 +302,38 @@ int audio_meta_get_artist(audio_meta_h audio, char **artist_name) return ret; } +int audio_meta_get_album_artist(audio_meta_h audio, char **album_artist_name) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + audio_meta_s *_audio = (audio_meta_s*)audio; + + if(_audio) + { + if(STRING_VALID(_audio->album_artist)) + { + *album_artist_name = strdup(_audio->album_artist); + if(*album_artist_name == NULL) + { + media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); + return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; + } + } + else + { + *album_artist_name = NULL; + } + ret = MEDIA_CONTENT_ERROR_NONE; + + } + else + { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + + return ret; +} + int audio_meta_get_genre(audio_meta_h audio, char **genre_name) { int ret = MEDIA_CONTENT_ERROR_NONE; @@ -494,6 +539,25 @@ int audio_meta_get_bit_rate(audio_meta_h audio, int *bit_rate) return ret; } +int audio_meta_get_bitpersample(audio_meta_h audio, int *bitpersample) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + audio_meta_s *_audio = (audio_meta_s*)audio; + + if(_audio && bitpersample) + { + *bitpersample = _audio->bitpersample; + ret = MEDIA_CONTENT_ERROR_NONE; + } + else + { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + + return ret; +} + int audio_meta_get_sample_rate(audio_meta_h audio, int *sample_rate) { int ret = MEDIA_CONTENT_ERROR_NONE; diff --git a/src/media_content.c b/src/media_content.c index 8ca5178..f6d49ef 100755 --- a/src/media_content.c +++ b/src/media_content.c @@ -66,6 +66,9 @@ static int __media_content_create_attr_handle(void) ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MODIFIED_TIME, DB_FIELD_MEDIA_MODIFIED_TIME); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TIMELINE, DB_FIELD_MEDIA_TIMELINE); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_THUMBNAIL_PATH, DB_FIELD_MEDIA_THUMBNAIL_PATH); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); @@ -78,6 +81,9 @@ static int __media_content_create_attr_handle(void) ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ARTIST, DB_FIELD_MEDIA_ARTIST); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM_ARTIST, DB_FIELD_MEDIA_ALBUM_ARTIST); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_GENRE, DB_FIELD_MEDIA_GENRE); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); @@ -171,12 +177,64 @@ static int __media_content_create_attr_handle(void) ret = _media_filter_attribute_add(g_attr_handle, MEDIA_KEYWORD, DB_FIELD_MEDIA_KEYWORD); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_WEATHER, DB_FIELD_MEDIA_WEATHER); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_IS_DRM, DB_FIELD_MEDIA_IS_DRM); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); ret = _media_filter_attribute_add(g_attr_handle, MEDIA_STORAGE_TYPE, DB_FIELD_MEDIA_STORAGE_TYPE); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + /* Pinyin*/ + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_FILE_NAME_PINYIN, DB_FIELD_MEDIA_FILE_NAME_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TITLE_PINYIN, DB_FIELD_MEDIA_TITLE_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM_PINYIN, DB_FIELD_MEDIA_ALBUM_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ARTIST_PINYIN, DB_FIELD_MEDIA_ARTIST_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM_ARTIST_PINYIN, DB_FIELD_MEDIA_ALBUM_ARTIST_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_GENRE_PINYIN, DB_FIELD_MEDIA_GENRE_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COMPOSER_PINYIN, DB_FIELD_MEDIA_COMPOSER_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COPYRIGHT_PINYIN, DB_FIELD_MEDIA_COPYRIGHT_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DESCRIPTION_PINYIN, DB_FIELD_MEDIA_DESCRIPTION_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AUTHOR_PINYIN, DB_FIELD_MEDIA_AUTHOR_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PROVIDER_PINYIN, DB_FIELD_MEDIA_PROVIDER_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CONTENT_NAME_PINYIN, DB_FIELD_MEDIA_CONTENT_NAME_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CATEGORY_PINYIN, DB_FIELD_MEDIA_CATEGORY_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LOCATION_TAG_PINYIN, DB_FIELD_MEDIA_LOCATION_TAG_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AGE_RATING_PINYIN, DB_FIELD_MEDIA_AGE_RATING_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_attr_handle, MEDIA_KEYWORD_PINYIN, DB_FIELD_MEDIA_KEYWORD_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + /* Playlist*/ ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_NAME, DB_FIELD_PLAYLIST_NAME); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); @@ -235,6 +293,9 @@ static int __media_content_create_alias_attr_handle(void) ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MODIFIED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MODIFIED_TIME); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TIMELINE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TIMELINE); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_THUMBNAIL_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_THUMBNAIL_PATH); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); @@ -247,6 +308,9 @@ static int __media_content_create_alias_attr_handle(void) ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ARTIST, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ARTIST); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM_ARTIST, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM_ARTIST); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_GENRE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_GENRE); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); @@ -271,6 +335,9 @@ static int __media_content_create_alias_attr_handle(void) ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BITRATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BITRATE); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BITPERSAMPLE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BITPERSAMPLE); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SAMPLERATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SAMPLERATE); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); @@ -337,7 +404,10 @@ static int __media_content_create_alias_attr_handle(void) ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AGE_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AGE_RATING); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); - ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_KEYWORD, DB_TABLE_ALIAS_MEDIA"."MEDIA_KEYWORD); + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_KEYWORD, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_KEYWORD); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_WEATHER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_WEATHER); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_IS_DRM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_IS_DRM); @@ -346,6 +416,55 @@ static int __media_content_create_alias_attr_handle(void) ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_STORAGE_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_STORAGE_TYPE); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + /* Pinyin*/ + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_FILE_NAME_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_FILE_NAME_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TITLE_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TITLE_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ARTIST_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ARTIST_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM_ARTIST_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM_ARTIST_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_GENRE_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_GENRE_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COMPOSER_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COMPOSER_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COPYRIGHT_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COPYRIGHT_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DESCRIPTION_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DESCRIPTION_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AUTHOR_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AUTHOR_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PROVIDER_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PROVIDER_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CONTENT_NAME_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CONTENT_NAME_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CATEGORY_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CATEGORY_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LOCATION_TAG_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LOCATION_TAG_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AGE_RATING_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AGE_RATING_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_KEYWORD_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_KEYWORD_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + /* Folder */ ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_ID, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_ID); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); @@ -362,6 +481,9 @@ static int __media_content_create_alias_attr_handle(void) ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_STORAGE_TYPE, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_STORAGE_TYPE); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_NAME_PINYIN, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_NAME_PINYIN); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + /* Playlist*/ ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_NAME, DB_TABLE_ALIAS_PLAYLIST"."DB_FIELD_PLAYLIST_NAME); media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); @@ -702,15 +824,45 @@ void _media_content_scan_cb(media_request_result_s* result, void *user_data) return; } +static int __media_content_check_dir(const char *path) +{ + DIR *dp = NULL; + + dp = opendir(path); + if (dp == NULL) { + media_content_error("error [%s, %s]", path, strerror(errno)); + if (errno == EACCES || errno == EPERM) { + return MEDIA_CONTENT_ERROR_PERMISSION_DENIED; + } else { + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + } + + closedir(dp); + + return MEDIA_CONTENT_ERROR_NONE; +} + int media_content_scan_folder(const char *path, bool is_recursive, media_scan_completed_cb callback, void *user_data) { int ret = MEDIA_CONTENT_ERROR_NONE; + bool ignore_dir = FALSE; if (!STRING_VALID(path)) { media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } + ret = _media_util_check_ignore_dir(path, &ignore_dir); + if(ignore_dir) { + media_content_error("Invalid folder path"); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + + ret = __media_content_check_dir(path); + if (ret == MEDIA_CONTENT_ERROR_PERMISSION_DENIED) { + return ret; + } media_content_scan_cb_data *cb_data = NULL; cb_data = (media_content_scan_cb_data *)malloc(sizeof(media_content_scan_cb_data)); if (cb_data == NULL) { diff --git a/src/media_db.c b/src/media_db.c index ed289a6..abf4919 100755 --- a/src/media_db.c +++ b/src/media_db.c @@ -40,6 +40,8 @@ static char * __media_db_get_group_name(media_group_e group) return DB_FIELD_MEDIA_TITLE; case MEDIA_CONTENT_GROUP_ARTIST: return DB_FIELD_MEDIA_ARTIST; + case MEDIA_CONTENT_GROUP_ALBUM_ARTIST: + return DB_FIELD_MEDIA_ALBUM_ARTIST; case MEDIA_CONTENT_GROUP_GENRE: return DB_FIELD_MEDIA_GENRE; case MEDIA_CONTENT_GROUP_COMPOSER: @@ -78,6 +80,8 @@ static char * __media_db_get_group_name(media_group_e group) return DB_FIELD_MEDIA_AGE_RATING; case MEDIA_CONTENT_GROUP_KEYWORD: return DB_FIELD_MEDIA_KEYWORD; + case MEDIA_CONTENT_GROUP_WEATHER: + return DB_FIELD_MEDIA_WEATHER; default: return NULL; } diff --git a/src/media_folder.c b/src/media_folder.c index 46d07b3..bb1cda5 100755 --- a/src/media_folder.c +++ b/src/media_folder.c @@ -27,12 +27,21 @@ static char *__media_folder_get_update_folder_sql(media_folder_h folder) { media_folder_s *_folder = (media_folder_s*)folder; char *return_sql = NULL; + char *name_pinyin = NULL; + bool pinyin_support = FALSE; - return_sql = sqlite3_mprintf("%q='%q', %q='%q', %q=%d ", + /*Update Pinyin If Support Pinyin*/ + media_svc_check_pinyin_support(&pinyin_support); + if(pinyin_support) + media_svc_get_pinyin(_content_get_db_handle(), _folder->name, &name_pinyin); + + return_sql = sqlite3_mprintf("%q='%q', %q='%q', %q=%d, %q='%q'", DB_FIELD_FOLDER_PATH, _folder->path, DB_FIELD_FOLDER_NAME, _folder->name, - DB_FIELD_FOLDER_MODIFIED_TIME, _folder->modified_time); + DB_FIELD_FOLDER_MODIFIED_TIME, _folder->modified_time, + DB_FIELD_FOLDER_NAME_PINYIN, name_pinyin); + SAFE_FREE(name_pinyin); return return_sql; } @@ -441,6 +450,7 @@ int media_folder_set_name(media_folder_h folder, const char *name) SAFE_FREE(_folder->path); SAFE_FREE(_folder->name); + SAFE_FREE(folder_path); _folder->path = strdup(new_folder_path); if(_folder->path == NULL) diff --git a/src/media_image.c b/src/media_image.c index 3d057b6..e982e49 100755 --- a/src/media_image.c +++ b/src/media_image.c @@ -31,6 +31,7 @@ int image_meta_destroy(image_meta_h image) SAFE_FREE(_image->media_id); SAFE_FREE(_image->date_taken); SAFE_FREE(_image->title); + SAFE_FREE(_image->weather); SAFE_FREE(_image->burst_id); SAFE_FREE(_image); @@ -92,6 +93,17 @@ int image_meta_clone(image_meta_h *dst, image_meta_h src) } } + if(STRING_VALID(_src->weather)) + { + _dst->weather = strdup(_src->weather); + if(_dst->weather == NULL) + { + media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); + image_meta_destroy((image_meta_h)_dst); + return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; + } + } + if(STRING_VALID(_src->burst_id)) { _dst->burst_id = strdup(_src->burst_id); @@ -296,6 +308,7 @@ int image_meta_is_burst_shot(image_meta_h image, bool *is_burst_shot) return ret; } + int image_meta_set_orientation(image_meta_h image, media_content_orientation_e orientation) { int ret = MEDIA_CONTENT_ERROR_NONE; @@ -326,7 +339,7 @@ int image_meta_update_to_db(image_meta_h image) if(_image != NULL && STRING_VALID(_image->media_id)) { - sql = sqlite3_mprintf(UPDATE_IMAGE_META_FROM_MEDIA, _image->orientation, _image->media_id); + sql = sqlite3_mprintf(UPDATE_IMAGE_META_FROM_MEDIA, _image->orientation, _image->weather, _image->media_id); ret = _content_query_sql(sql); sqlite3_free(sql); } diff --git a/src/media_info.c b/src/media_info.c index 298c5f4..d55eac8 100755 --- a/src/media_info.c +++ b/src/media_info.c @@ -182,6 +182,60 @@ static bool __media_info_delete_batch_cb(media_info_h media, void *user_data) return true; } + +typedef enum { + MEDIA_INFO_UUID = 0, + MEDIA_INFO_PATH, + MEDIA_INFO_FILE_NAME, + MEDIA_INFO_TYPE, + MEDIA_INFO_MIME_TYPE, + MEDIA_INFO_SIZE, + MEDIA_INFO_ADDED_TIME, + MEDIA_INFO_MODIFIED_TIME, + MEDIA_INFO_THUMBNAIL_PATH, + MEDIA_INFO_DESCRIPTION, + MEDIA_INFO_RATING, //10 + MEDIA_INFO_FAVOURITE, + MEDIA_INFO_AUTHOR, + MEDIA_INFO_PROVIDER, + MEDIA_INFO_CONTENT_NAME, + MEDIA_INFO_CATEGORY, + MEDIA_INFO_LOCATION_TAG, + MEDIA_INFO_AGE_RATING, + MEDIA_INFO_KEYWORD, + MEDIA_INFO_IS_DRM, + MEDIA_INFO_STORAGE_TYPE, //20 + MEDIA_INFO_LONGITUDE, + MEDIA_INFO_LATITUDE, + MEDIA_INFO_ALTITUDE, + MEDIA_INFO_WIDTH, + MEDIA_INFO_HEIGHT, + MEDIA_INFO_DATETAKEN, + MEDIA_INFO_ORIENTATION, + MEDIA_INFO_TITLE, + MEDIA_INFO_ALBUM, + MEDIA_INFO_ARTIST, //30 + MEDIA_INFO_ALBUM_ARTIST, + MEDIA_INFO_GENRE, + MEDIA_INFO_COMPOSER, + MEDIA_INFO_YEAR, + MEDIA_INFO_RECORDED_DATE, + MEDIA_INFO_COPYRIGHT, + MEDIA_INFO_TRACK_NUM, + MEDIA_INFO_BITRATE, + MEDIA_INFO_BITPERSAMPLE, + MEDIA_INFO_DURATION, + MEDIA_INFO_PLAYED_COUNT, //40 + MEDIA_INFO_LAST_PLAYED_TIME, + MEDIA_INFO_LAST_PLAYED_POSITION, + MEDIA_INFO_SAMPLERATE, + MEDIA_INFO_CHANNEL, + MEDIA_INFO_BURST_ID, + MEDIA_INFO_TIMELINE, + MEDIA_INFO_WEATHER, + MEDIA_INFO_SYNC_STATUS, + MEDIA_INFO_ITEM_MAX, +} media_info_item_e; void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media) { //#define MEDIA_INFO_ITEM "media_uuid, path, file_name, media_type, mime_type, size, added_time, modified_time, thumbnail_path, description, @@ -189,67 +243,75 @@ void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media) media_info_s *_media = (media_info_s*)media; - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) - _media->media_id = strdup((const char *)sqlite3_column_text(stmt, 0)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_UUID))) + _media->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_UUID)); + + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PATH))) + _media->file_path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PATH)); + + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_FILE_NAME))) + _media->display_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_FILE_NAME)); + + _media->media_type = (int)sqlite3_column_int(stmt, MEDIA_INFO_TYPE); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1))) - _media->file_path = strdup((const char *)sqlite3_column_text(stmt, 1)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_MIME_TYPE))) + _media->mime_type = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_MIME_TYPE)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 2))) - _media->display_name = strdup((const char *)sqlite3_column_text(stmt, 2)); + _media->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_INFO_SIZE); - _media->media_type = (int)sqlite3_column_int(stmt, 3); + _media->added_time = (int)sqlite3_column_int(stmt, MEDIA_INFO_ADDED_TIME); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 4))) - _media->mime_type = strdup((const char *)sqlite3_column_text(stmt, 4)); + _media->modified_time = (int)sqlite3_column_int(stmt, MEDIA_INFO_MODIFIED_TIME); - _media->size = (unsigned long long)sqlite3_column_int64(stmt, 5); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_THUMBNAIL_PATH))) + _media->thumbnail_path= strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_THUMBNAIL_PATH)); - _media->added_time = (int)sqlite3_column_int(stmt, 6); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_DESCRIPTION))) + _media->description = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_DESCRIPTION)); - _media->modified_time = (int)sqlite3_column_int(stmt, 7); + _media->rating = (int)sqlite3_column_int(stmt, MEDIA_INFO_RATING); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 8))) - _media->thumbnail_path= strdup((const char *)sqlite3_column_text(stmt, 8)); + _media->favourite = (int)sqlite3_column_int(stmt, MEDIA_INFO_FAVOURITE); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 9))) - _media->description = strdup((const char *)sqlite3_column_text(stmt, 9)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_AUTHOR))) + _media->author = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_AUTHOR)); - _media->rating = (int)sqlite3_column_int(stmt,10); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PROVIDER))) + _media->provider = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PROVIDER)); - _media->favourite = (int)sqlite3_column_int(stmt, 11); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_CONTENT_NAME))) + _media->content_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_CONTENT_NAME)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 12))) - _media->author = strdup((const char *)sqlite3_column_text(stmt, 12)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_CATEGORY))) + _media->category = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_CATEGORY)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 13))) - _media->provider = strdup((const char *)sqlite3_column_text(stmt, 13)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_LOCATION_TAG))) + _media->location_tag = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_LOCATION_TAG)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 14))) - _media->content_name = strdup((const char *)sqlite3_column_text(stmt, 14)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_AGE_RATING))) + _media->age_rating = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_AGE_RATING)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 15))) - _media->category = strdup((const char *)sqlite3_column_text(stmt, 15)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_KEYWORD))) + _media->keyword = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_KEYWORD)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 16))) - _media->location_tag = strdup((const char *)sqlite3_column_text(stmt, 16)); + _media->is_drm = (int)sqlite3_column_int(stmt, MEDIA_INFO_IS_DRM); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 17))) - _media->age_rating = strdup((const char *)sqlite3_column_text(stmt, 17)); + _media->storage_type = (int)sqlite3_column_int(stmt, MEDIA_INFO_STORAGE_TYPE); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 18))) - _media->keyword = strdup((const char *)sqlite3_column_text(stmt, 18)); + _media->longitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_LONGITUDE); + _media->latitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_LATITUDE); + _media->altitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_ALTITUDE); - _media->is_drm = (int)sqlite3_column_int(stmt, 19); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE))) + _media->title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE)); - _media->storage_type = (int)sqlite3_column_int(stmt, 20); + _media->timeline = (double)sqlite3_column_double(stmt, MEDIA_INFO_TIMELINE); - _media->longitude = (double)sqlite3_column_double(stmt, 21); - _media->latitude = (double)sqlite3_column_double(stmt, 22); - _media->altitude = (double)sqlite3_column_double(stmt, 23); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_WEATHER))) + _media->weather = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_WEATHER)); + + _media->sync_status = (int)sqlite3_column_int(stmt, MEDIA_INFO_SYNC_STATUS); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 28))) - _media->title = strdup((const char *)sqlite3_column_text(stmt, 28)); if(_media->media_type == MEDIA_CONTENT_TYPE_IMAGE) { _media->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s)); @@ -257,19 +319,22 @@ void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media) if(STRING_VALID(_media->media_id)) _media->image_meta->media_id = strdup(_media->media_id); - _media->image_meta->width = sqlite3_column_int(stmt, 24); - _media->image_meta->height = sqlite3_column_int(stmt, 25); + _media->image_meta->width = sqlite3_column_int(stmt, MEDIA_INFO_WIDTH); + _media->image_meta->height = sqlite3_column_int(stmt, MEDIA_INFO_HEIGHT); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 26))) - _media->image_meta->date_taken = strdup((const char *)sqlite3_column_text(stmt, 26)); - - _media->image_meta->orientation = sqlite3_column_int(stmt, 27); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_DATETAKEN))) + _media->image_meta->date_taken = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_DATETAKEN)); + + _media->image_meta->orientation = sqlite3_column_int(stmt, MEDIA_INFO_ORIENTATION); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 28))) - _media->image_meta->title = strdup((const char *)sqlite3_column_text(stmt, 28)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE))) + _media->image_meta->title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 44))) - _media->image_meta->burst_id = strdup((const char *)sqlite3_column_text(stmt, 44)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_BURST_ID))) + _media->image_meta->burst_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_BURST_ID)); + + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_WEATHER))) + _media->image_meta->weather = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_WEATHER)); } } else if(_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) { @@ -278,40 +343,44 @@ void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media) if(STRING_VALID(_media->media_id)) _media->video_meta->media_id = strdup(_media->media_id); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 28))) - _media->video_meta->title = strdup((const char *)sqlite3_column_text(stmt, 28)); + _media->video_meta->width = sqlite3_column_int(stmt, MEDIA_INFO_WIDTH); + _media->video_meta->height = sqlite3_column_int(stmt, MEDIA_INFO_HEIGHT); + + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE))) + _media->video_meta->title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 29))) - _media->video_meta->album = strdup((const char *)sqlite3_column_text(stmt, 29)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM))) + _media->video_meta->album = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 30))) - _media->video_meta->artist = strdup((const char *)sqlite3_column_text(stmt, 30)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ARTIST))) + _media->video_meta->artist = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ARTIST)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 31))) - _media->video_meta->genre = strdup((const char *)sqlite3_column_text(stmt, 31)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM_ARTIST))) + _media->video_meta->album_artist = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM_ARTIST)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 32))) - _media->video_meta->composer = strdup((const char *)sqlite3_column_text(stmt, 32)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_GENRE))) + _media->video_meta->genre = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_GENRE)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 33))) - _media->video_meta->year = strdup((const char *)sqlite3_column_text(stmt, 33)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COMPOSER))) + _media->video_meta->composer = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COMPOSER)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 34))) - _media->video_meta->recorded_date = strdup((const char *)sqlite3_column_text(stmt, 34)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_YEAR))) + _media->video_meta->year = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_YEAR)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 35))) - _media->video_meta->copyright = strdup((const char *)sqlite3_column_text(stmt, 35)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_RECORDED_DATE))) + _media->video_meta->recorded_date = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_RECORDED_DATE)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 36))) - _media->video_meta->track_num = strdup((const char *)sqlite3_column_text(stmt, 36)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COPYRIGHT))) + _media->video_meta->copyright = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COPYRIGHT)); - _media->video_meta->bitrate = sqlite3_column_int(stmt, 37); - _media->video_meta->duration = sqlite3_column_int(stmt, 38); - _media->video_meta->played_count = sqlite3_column_int(stmt, 39); - _media->video_meta->played_time = sqlite3_column_int(stmt, 40); - _media->video_meta->played_position = sqlite3_column_int(stmt, 41); - _media->video_meta->width = sqlite3_column_int(stmt, 24); - _media->video_meta->height = sqlite3_column_int(stmt, 25); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TRACK_NUM))) + _media->video_meta->track_num = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TRACK_NUM)); + + _media->video_meta->bitrate = sqlite3_column_int(stmt, MEDIA_INFO_BITRATE); + _media->video_meta->duration = sqlite3_column_int(stmt, MEDIA_INFO_DURATION); + _media->video_meta->played_count = sqlite3_column_int(stmt, MEDIA_INFO_PLAYED_COUNT); + _media->video_meta->played_time = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_TIME); + _media->video_meta->played_position = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_POSITION); } } @@ -321,40 +390,44 @@ void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media) if(STRING_VALID(_media->media_id)) _media->audio_meta->media_id = strdup(_media->media_id); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 28))) - _media->audio_meta->title = strdup((const char *)sqlite3_column_text(stmt, 28)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE))) + _media->audio_meta->title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE)); + + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM))) + _media->audio_meta->album = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 29))) - _media->audio_meta->album = strdup((const char *)sqlite3_column_text(stmt, 29)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ARTIST))) + _media->audio_meta->artist = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ARTIST)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 30))) - _media->audio_meta->artist = strdup((const char *)sqlite3_column_text(stmt, 30)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM_ARTIST))) + _media->audio_meta->album_artist = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM_ARTIST)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 31))) - _media->audio_meta->genre = strdup((const char *)sqlite3_column_text(stmt, 31)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_GENRE))) + _media->audio_meta->genre = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_GENRE)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 32))) - _media->audio_meta->composer = strdup((const char *)sqlite3_column_text(stmt, 32)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COMPOSER))) + _media->audio_meta->composer = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COMPOSER)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 33))) - _media->audio_meta->year = strdup((const char *)sqlite3_column_text(stmt, 33)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_YEAR))) + _media->audio_meta->year = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_YEAR)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 34))) - _media->audio_meta->recorded_date = strdup((const char *)sqlite3_column_text(stmt, 34)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_RECORDED_DATE))) + _media->audio_meta->recorded_date = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_RECORDED_DATE)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 35))) - _media->audio_meta->copyright = strdup((const char *)sqlite3_column_text(stmt, 35)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COPYRIGHT))) + _media->audio_meta->copyright = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COPYRIGHT)); - if(STRING_VALID((const char *)sqlite3_column_text(stmt, 36))) - _media->audio_meta->track_num = strdup((const char *)sqlite3_column_text(stmt, 36)); + if(STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TRACK_NUM))) + _media->audio_meta->track_num = strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TRACK_NUM)); - _media->audio_meta->bitrate = sqlite3_column_int(stmt, 37); - _media->audio_meta->duration = sqlite3_column_int(stmt, 38); - _media->audio_meta->played_count = sqlite3_column_int(stmt, 39); - _media->audio_meta->played_time = sqlite3_column_int(stmt, 40); - _media->audio_meta->played_position = sqlite3_column_int(stmt, 41); - _media->audio_meta->samplerate = sqlite3_column_int(stmt, 42); - _media->audio_meta->channel = sqlite3_column_int(stmt, 43); + _media->audio_meta->bitrate = sqlite3_column_int(stmt, MEDIA_INFO_BITRATE); + _media->audio_meta->bitpersample = sqlite3_column_int(stmt, MEDIA_INFO_BITPERSAMPLE); + _media->audio_meta->duration = sqlite3_column_int(stmt, MEDIA_INFO_DURATION); + _media->audio_meta->played_count = sqlite3_column_int(stmt, MEDIA_INFO_PLAYED_COUNT); + _media->audio_meta->played_time = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_TIME); + _media->audio_meta->played_position = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_POSITION); + _media->audio_meta->samplerate = sqlite3_column_int(stmt, MEDIA_INFO_SAMPLERATE); + _media->audio_meta->channel = sqlite3_column_int(stmt, MEDIA_INFO_CHANNEL); } } @@ -677,11 +750,14 @@ int media_info_destroy(media_info_h media) SAFE_FREE(_media->age_rating); SAFE_FREE(_media->keyword); SAFE_FREE(_media->title); + SAFE_FREE(_media->weather); if(_media->image_meta) { SAFE_FREE(_media->image_meta->media_id); SAFE_FREE(_media->image_meta->date_taken); SAFE_FREE(_media->image_meta->burst_id); + SAFE_FREE(_media->image_meta->title); + SAFE_FREE(_media->image_meta->weather); SAFE_FREE(_media->image_meta); } else if(_media->video_meta) { @@ -689,6 +765,7 @@ int media_info_destroy(media_info_h media) SAFE_FREE(_media->video_meta->title); SAFE_FREE(_media->video_meta->album); SAFE_FREE(_media->video_meta->artist); + SAFE_FREE(_media->video_meta->album_artist); SAFE_FREE(_media->video_meta->genre); SAFE_FREE(_media->video_meta->composer); SAFE_FREE(_media->video_meta->year); @@ -702,6 +779,7 @@ int media_info_destroy(media_info_h media) SAFE_FREE(_media->audio_meta->title); SAFE_FREE(_media->audio_meta->album); SAFE_FREE(_media->audio_meta->artist); + SAFE_FREE(_media->audio_meta->album_artist); SAFE_FREE(_media->audio_meta->genre); SAFE_FREE(_media->audio_meta->composer); SAFE_FREE(_media->audio_meta->year); @@ -801,6 +879,18 @@ int media_info_clone(media_info_h *dst, media_info_h src) return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; } } + + if(STRING_VALID(_src->weather)) + { + _dst->weather = strdup(_src->weather); + if(_dst->weather == NULL) + { + media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); + media_info_destroy((media_info_h)_dst); + return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; + } + } + if(STRING_VALID(_src->title)) { _dst->title = strdup(_src->title); @@ -886,6 +976,7 @@ int media_info_clone(media_info_h *dst, media_info_h src) _dst->size = _src->size; _dst->added_time = _src->added_time; _dst->modified_time = _src->modified_time; + _dst->timeline = _src->timeline; _dst->longitude = _src->longitude; _dst->latitude = _src->latitude; _dst->altitude = _src->altitude; @@ -893,6 +984,7 @@ int media_info_clone(media_info_h *dst, media_info_h src) _dst->favourite = _src->favourite; _dst->is_drm = _src->is_drm; _dst->storage_type = _src->storage_type; + _dst->sync_status = _src->sync_status; if(_src->media_type == MEDIA_CONTENT_TYPE_IMAGE && _src->image_meta) { _dst->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s)); @@ -935,6 +1027,18 @@ int media_info_clone(media_info_h *dst, media_info_h src) return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; } } + + if(STRING_VALID(_src->image_meta->weather)) + { + _dst->image_meta->weather = strdup(_src->image_meta->weather); + if(_dst->image_meta->weather == NULL) + { + media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); + media_info_destroy((media_info_h)_dst); + return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; + } + } + _dst->image_meta->width = _src->image_meta->width; _dst->image_meta->height = _src->image_meta->height; _dst->image_meta->orientation = _src->image_meta->orientation; @@ -1353,6 +1457,10 @@ int media_info_get_image(media_info_h media, image_meta_h *image) _image->burst_id = strdup(_media->image_meta->burst_id); } + if(STRING_VALID(_media->image_meta->weather)) { + _image->weather = strdup(_media->image_meta->weather); + } + *image = (image_meta_h)_image; return ret; @@ -1710,6 +1818,24 @@ int media_info_get_modified_time(media_info_h media, time_t* time) return ret; } +int media_info_get_timeline(media_info_h media, time_t* time) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + media_info_s *_media = (media_info_s*)media; + if(_media && time) + { + *time = _media->timeline; + ret = MEDIA_CONTENT_ERROR_NONE; + } + else + { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + + return ret; +} + int media_info_get_thumbnail_path(media_info_h media, char **path) { int ret = MEDIA_CONTENT_ERROR_NONE; @@ -1859,6 +1985,37 @@ int media_info_get_altitude(media_info_h media, double *altitude) return ret; } +int media_info_get_weather(media_info_h media, char **weather) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + media_info_s *_media = (media_info_s*)media; + + if(_media && weather) + { + if(STRING_VALID(_media->weather)) + { + *weather = strdup(_media->weather); + if(*weather == NULL) + { + media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); + return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; + } + } + else + { + *weather = NULL; + } + ret = MEDIA_CONTENT_ERROR_NONE; + } + else + { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + + return ret; +} + int media_info_get_rating(media_info_h media, int *rating) { int ret = MEDIA_CONTENT_ERROR_NONE; @@ -2304,6 +2461,39 @@ int media_info_set_altitude(media_info_h media, double altitude) return ret; } +int media_info_set_weather(media_info_h media, const char *weather) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + media_info_s *_media = (media_info_s*)media; + + if(_media != NULL) + { + SAFE_FREE(_media->weather); + + if(STRING_VALID(weather)) + { + _media->weather = strdup(weather); + + if(_media->weather == NULL) + { + media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); + return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; + } + } + else + { + _media->weather = NULL; + } + } + else + { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + + return ret; +} + int media_info_set_rating(media_info_h media, int rating) { int ret = MEDIA_CONTENT_ERROR_NONE; @@ -2597,13 +2787,61 @@ int media_info_update_to_db(media_info_h media) char *test_sql = sqlite3_mprintf("%f, %f, %f", _media->longitude, _media->latitude, _media->altitude); sqlite3_free(test_sql); + /*Update Pinyin If Support Pinyin*/ + char *file_name_pinyin = NULL; + char *description_pinyin = NULL; + char *author_pinyin = NULL; + char *provider_pinyin = NULL; + char *content_name_pinyin = NULL; + char *category_pinyin = NULL; + char *location_tag_pinyin = NULL; + char *age_rating_pinyin = NULL; + char *keyword_pinyin = NULL; + bool pinyin_support = FALSE; + + /*Update Pinyin If Support Pinyin*/ + media_svc_check_pinyin_support(&pinyin_support); + if(pinyin_support) + { + if(STRING_VALID(_media->display_name)) + media_svc_get_pinyin(_content_get_db_handle(), _media->display_name, &file_name_pinyin); + if(STRING_VALID(_media->description)) + media_svc_get_pinyin(_content_get_db_handle(), _media->description, &description_pinyin); + if(STRING_VALID(_media->author)) + media_svc_get_pinyin(_content_get_db_handle(), _media->author, &author_pinyin); + if(STRING_VALID(_media->provider)) + media_svc_get_pinyin(_content_get_db_handle(), _media->provider, &provider_pinyin); + if(STRING_VALID(_media->content_name)) + media_svc_get_pinyin(_content_get_db_handle(), _media->content_name, &content_name_pinyin); + if(STRING_VALID(_media->category)) + media_svc_get_pinyin(_content_get_db_handle(), _media->category, &category_pinyin); + if(STRING_VALID(_media->location_tag)) + media_svc_get_pinyin(_content_get_db_handle(), _media->location_tag, &location_tag_pinyin); + if(STRING_VALID(_media->age_rating)) + media_svc_get_pinyin(_content_get_db_handle(), _media->age_rating, &age_rating_pinyin); + if(STRING_VALID(_media->keyword)) + media_svc_get_pinyin(_content_get_db_handle(), _media->keyword, &keyword_pinyin); + } + set_sql = sqlite3_mprintf("file_name=%Q, added_time=%d, description=%Q, longitude=%f, latitude=%f, altitude=%f, \ - rating=%d, favourite=%d, author=%Q, provider=%Q, content_name=%Q, category=%Q, location_tag=%Q, age_rating=%Q, keyword=%Q", + rating=%d, favourite=%d, author=%Q, provider=%Q, content_name=%Q, category=%Q, location_tag=%Q, age_rating=%Q, keyword=%Q, weather=%Q, sync_status=%d, \ + file_name_pinyin=%Q, description_pinyin=%Q, author_pinyin=%Q, provider_pinyin=%Q, content_name_pinyin=%Q, category_pinyin=%Q, location_tag_pinyin=%Q, age_rating_pinyin=%Q, keyword_pinyin=%Q", _media->display_name, _media->added_time, _media->description, _media->longitude, _media->latitude, _media->altitude, _media->rating, _media->favourite, - _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword); + _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword, _media->weather, _media->sync_status, + file_name_pinyin, description_pinyin, author_pinyin, provider_pinyin, content_name_pinyin, category_pinyin, location_tag_pinyin, age_rating_pinyin, keyword_pinyin); len = snprintf(sql, sizeof(sql), "UPDATE %s SET %s WHERE media_uuid='%s'", DB_TABLE_MEDIA, set_sql, _media->media_id); sqlite3_free(set_sql); + + SAFE_FREE(description_pinyin); + SAFE_FREE(author_pinyin); + SAFE_FREE(provider_pinyin); + SAFE_FREE(content_name_pinyin); + SAFE_FREE(category_pinyin); + SAFE_FREE(location_tag_pinyin); + SAFE_FREE(age_rating_pinyin); + SAFE_FREE(keyword_pinyin); + if (len > 0) { sql[len] = '\0'; } else { @@ -2611,6 +2849,7 @@ int media_info_update_to_db(media_info_h media) return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; } + ret = _content_query_sql(sql); if (ret == MEDIA_CONTENT_ERROR_NONE) { /* Send notification for this update */ diff --git a/src/media_playlist.c b/src/media_playlist.c index 06353a8..408dc2f 100755 --- a/src/media_playlist.c +++ b/src/media_playlist.c @@ -323,6 +323,7 @@ int media_playlist_destroy(media_playlist_h playlist) if(_playlist) { SAFE_FREE(_playlist->name); + SAFE_FREE(_playlist->thumbnail_path); SAFE_FREE(_playlist); ret = MEDIA_CONTENT_ERROR_NONE; diff --git a/src/media_util_private.c b/src/media_util_private.c index 10d518f..9892dbe 100755 --- a/src/media_util_private.c +++ b/src/media_util_private.c @@ -43,3 +43,111 @@ int _media_util_get_store_type_by_path(const char *path, int *storage_type) return MEDIA_CONTENT_ERROR_NONE; } + +int _media_util_check_ignore_dir(const char *dir_path, bool *ignore) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + media_svc_storage_type_e storage_type = 0; + char *scan_ignore = ".scan_ignore"; + bool find = false; + + media_content_info("dir_path : %s", dir_path); + + if(!STRING_VALID(dir_path)) + { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + return MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + + *ignore = FALSE; + /*1. Check Hidden Directory*/ + if(strstr(dir_path, "/.")) + { + *ignore = TRUE; + media_content_info("hidden path"); + return MEDIA_CONTENT_ERROR_NONE; + } + + /*2. Check Scan Ignore Directory*/ + ret = media_svc_get_storage_type(dir_path, &storage_type); + if(ret != MEDIA_INFO_ERROR_NONE) + { + media_content_error("media_svc_get_storage_type failed : %d", ret); + return _content_error_capi(MEDIA_CONTENT_TYPE, ret); + } + + DIR *dp = NULL; + struct dirent entry; + struct dirent *result = NULL; + + char *leaf_path = NULL; + char search_path[4096] = {0, }; + + strncpy(search_path, dir_path, strlen(dir_path)); + while(STRING_VALID(search_path)) + { + dp = opendir(search_path); + if(dp == NULL) + { + media_content_error("Fail Open Directory"); + return MEDIA_CONTENT_ERROR_INVALID_OPERATION; + } + + while (!readdir_r(dp, &entry, &result)) + { + if (result == NULL) + break; + + if(STRING_VALID(entry.d_name) && (strcmp(entry.d_name, scan_ignore) == 0)) + { + media_content_info("Find Ignore path"); + media_content_info("Ignore path[%s]", search_path); + find = TRUE; + break; + } + else + { + //media_content_info("entry.d_name[%s]", entry.d_name); + continue; + } + } + + if (dp) closedir(dp); + dp = NULL; + + if(find) + { + *ignore = TRUE; + break; + } + else + { + /*If root path, Stop Scanning*/ + if((storage_type == MEDIA_SVC_STORAGE_INTERNAL) && (strcmp(search_path, MEDIA_ROOT_PATH_INTERNAL) == 0)) + { + //media_content_debug("Internal root path. Stop Scanning. Not found Ignore information"); + break; + } + else if((storage_type == MEDIA_SVC_STORAGE_EXTERNAL) && (strcmp(search_path, MEDIA_ROOT_PATH_SDCARD) == 0)) + { + //media_content_debug("Enternal root path. Stop Scanning. Not found Ignore information"); + break; + } + + leaf_path = strrchr(search_path, '/'); + if(leaf_path != NULL) + { + int seek_len = leaf_path -search_path; + search_path[seek_len] = '\0'; + //media_content_info("go to other dir [%s]", search_path); + } + else + { + media_content_debug("Fail to find leaf path"); + break; + } + } + } + + return MEDIA_CONTENT_ERROR_NONE; +} diff --git a/src/media_video.c b/src/media_video.c index dea0516..77a15bc 100755 --- a/src/media_video.c +++ b/src/media_video.c @@ -31,6 +31,7 @@ int video_meta_destroy(video_meta_h video) SAFE_FREE(_video->title); SAFE_FREE(_video->album); SAFE_FREE(_video->artist); + SAFE_FREE(_video->album_artist); SAFE_FREE(_video->genre); SAFE_FREE(_video->composer); SAFE_FREE(_video->year); @@ -111,6 +112,17 @@ int video_meta_clone(video_meta_h *dst, video_meta_h src) } } + if(STRING_VALID(_src->album_artist)) + { + _dst->album_artist = strdup(_src->album_artist); + if(_dst->album_artist == NULL) + { + video_meta_destroy((video_meta_h)_dst); + media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); + return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; + } + } + if(STRING_VALID(_src->genre)) { _dst->genre = strdup(_src->genre); @@ -295,6 +307,39 @@ int video_meta_get_artist(video_meta_h video, char **artist) } +int video_meta_get_album_artist(video_meta_h video, char **album_artist) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + video_meta_s *_video = (video_meta_s*)video; + if(_video) + { + if(STRING_VALID(_video->album_artist)) + { + char *new_string = strdup(_video->album_artist); + if(NULL == new_string) + { + media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY); + return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY; + } + *album_artist = new_string; + } + else + { + *album_artist = NULL; + } + ret = MEDIA_CONTENT_ERROR_NONE; + + } + else + { + media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER); + ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER; + } + + return ret; + +} + int video_meta_get_genre(video_meta_h video, char **genre) { int ret = MEDIA_CONTENT_ERROR_NONE; diff --git a/test/media-content_test.c b/test/media-content_test.c index 0bc125a..f457f1e 100755 --- a/test/media-content_test.c +++ b/test/media-content_test.c @@ -35,6 +35,7 @@ static int g_media_cnt = 0; #define test_audio_id "0f999626-6218-450c-a4ad-181a3bab6ebf" #define test_video_id "c1a92494-cc5b-4d74-aa7d-253199234548" #define test_image_id "db1c184c-6f31-43b4-b924-8c00ac5b6197" +media_folder_h g_folder = NULL; bool get_audio_meta(audio_meta_h audio) { @@ -63,6 +64,12 @@ bool get_audio_meta(audio_meta_h audio) media_content_debug("artist : [%s]", c_value); SAFE_FREE(c_value); + ret = audio_meta_get_album_artist(audio, &c_value); + if(ret != MEDIA_CONTENT_ERROR_NONE) + media_content_error("error when get meta : [%d]", ret); + media_content_debug("album_artist : [%s]", c_value); + SAFE_FREE(c_value); + ret = audio_meta_get_genre(audio, &c_value); if(ret != MEDIA_CONTENT_ERROR_NONE) media_content_error("error when get meta : [%d]", ret); @@ -164,6 +171,12 @@ bool get_video_meta(video_meta_h video) media_content_debug("artist : [%s]", c_value); SAFE_FREE(c_value); + ret = video_meta_get_album_artist(video, &c_value); + if(ret != MEDIA_CONTENT_ERROR_NONE) + media_content_error("error when get meta : [%d]", ret); + media_content_debug("album_artist : [%s]", c_value); + SAFE_FREE(c_value); + ret = video_meta_get_genre(video, &c_value); if(ret != MEDIA_CONTENT_ERROR_NONE) media_content_error("error when get meta : [%d]", ret); @@ -313,6 +326,12 @@ bool media_item_cb(media_info_h media, void *user_data) media_content_error("error when get info : [%d]", ret); media_content_debug("media_id : [%s]", media_id); + ret = media_info_get_file_path(media, &c_value); + if(ret != MEDIA_CONTENT_ERROR_NONE) + media_content_error("error when get info : [%d]", ret); + media_content_debug("file_path : [%s]", c_value); + SAFE_FREE(c_value); + #if 1 if(media_type == MEDIA_CONTENT_TYPE_MUSIC) { @@ -335,6 +354,7 @@ bool media_item_cb(media_info_h media, void *user_data) media_content_orientation_e orientation = 0; bool is_burst_shot = false; char *burst_id = NULL; + char *weather = NULL; if(media_info_get_image(media, &image) == MEDIA_CONTENT_ERROR_NONE) { @@ -474,6 +494,11 @@ bool media_item_cb(media_info_h media, void *user_data) media_content_error("error when get info : [%d]", ret); media_content_debug("modified_time : [%d]", t_value); + ret = media_info_get_timeline(media, &t_value); + if(ret != MEDIA_CONTENT_ERROR_NONE) + media_content_error("error when get info : [%d]", ret); + media_content_debug("timeline : [%d]", t_value); + ret = media_info_get_rating(media, &i_value); if(ret != MEDIA_CONTENT_ERROR_NONE) media_content_error("error when get info : [%d]", ret); @@ -488,6 +513,20 @@ bool media_item_cb(media_info_h media, void *user_data) if(ret != MEDIA_CONTENT_ERROR_NONE) media_content_error("error when get info : [%d]", ret); media_content_debug("is_drm : [%d]", b_value); + + // build error + /* + ret = media_info_set_weather(media, "Sunny"); + if(ret != MEDIA_CONTENT_ERROR_NONE) { + media_content_error("Fail to set weather"); + return ret; + + ret = media_info_get_weather(media, &c_value); + if(ret != MEDIA_CONTENT_ERROR_NONE) + media_content_error("error when get info : [%d]", ret); + media_content_debug("weather : [%s]", c_value); + SAFE_FREE(c_value); + */ /* Media server can't update when another db handle holds DB connection by sqlite3_prepare */ //ret = media_info_set_location_tag(media, "Test location tag"); @@ -509,7 +548,8 @@ bool folder_list_cb(media_folder_h folder, void *user_data) if(folder != NULL) { - media_folder_clone(_folder, folder); + if(_folder != NULL) + media_folder_clone(_folder, folder); if(media_folder_get_folder_id(folder, &folder_id) != MEDIA_CONTENT_ERROR_NONE) { @@ -774,6 +814,7 @@ bool album_list_cb(media_album_h album, void *user_data) } media_content_debug("album_name : [%s]", album_name); + SAFE_FREE(album_name); if(media_album_get_artist(album, &artist) != MEDIA_CONTENT_ERROR_NONE) { @@ -782,6 +823,7 @@ bool album_list_cb(media_album_h album, void *user_data) } media_content_debug("artist : [%s]", artist); + SAFE_FREE(artist); if(media_album_get_album_art(album, &album_art) != MEDIA_CONTENT_ERROR_NONE) { @@ -790,9 +832,6 @@ bool album_list_cb(media_album_h album, void *user_data) } media_content_debug("album_art : [%s]", album_art); - - SAFE_FREE(album_name); - SAFE_FREE(artist); SAFE_FREE(album_art); if(media_album_get_media_count_from_db(album_id, filter, &media_count) != MEDIA_CONTENT_ERROR_NONE) @@ -1071,7 +1110,7 @@ int test_gallery_scenario(void) } else if(media_type == MEDIA_CONTENT_TYPE_VIDEO) { video_meta_h video_handle; - char *title = NULL, *artist = NULL, *album = NULL; + char *title = NULL, *artist = NULL, *album = NULL, *album_artist = NULL; int duration = 0; time_t time_played = 0; @@ -1085,6 +1124,9 @@ int test_gallery_scenario(void) ret = video_meta_get_album(video_handle, &album); if(ret != MEDIA_CONTENT_ERROR_NONE) media_content_error("error video_meta_get_album : [%d]", ret); + ret = video_meta_get_album_artist(video_handle, &album_artist); + if(ret != MEDIA_CONTENT_ERROR_NONE) + media_content_error("error video_meta_get_album_artist : [%d]", ret); ret = video_meta_get_duration(video_handle, &duration); if(ret != MEDIA_CONTENT_ERROR_NONE) media_content_error("error video_meta_get_duration : [%d]", ret); @@ -1093,12 +1135,13 @@ int test_gallery_scenario(void) media_content_error("error video_meta_get_played_time : [%d]", ret); media_content_debug("This is Video"); - media_content_debug("Title: %s, Album: %s, Artist: %s\nDuration: %d, Played time: %d", title, artist, album, duration, time_played); + media_content_debug("Title: %s, Album: %s, Artist: %s, Album_artist: %s \n Duration: %d, Played time: %d", title, album, artist, album_artist, duration, time_played); } SAFE_FREE(title); SAFE_FREE(artist); SAFE_FREE(album); + SAFE_FREE(album_artist); ret = video_meta_destroy(video_handle); if(ret != MEDIA_CONTENT_ERROR_NONE) @@ -1203,7 +1246,7 @@ int test_gallery_scenario(void) } else if(media_type == MEDIA_CONTENT_TYPE_VIDEO) { video_meta_h video_handle; - char *title = NULL, *artist = NULL, *album = NULL; + char *title = NULL, *artist = NULL, *album = NULL, *album_artist = NULL;; int duration = 0; time_t time_played; @@ -1217,6 +1260,9 @@ int test_gallery_scenario(void) ret = video_meta_get_album(video_handle, &album); if(ret != MEDIA_CONTENT_ERROR_NONE) media_content_error("error video_meta_get_album : [%d]", ret); + ret = video_meta_get_album_artist(video_handle, &album_artist); + if(ret != MEDIA_CONTENT_ERROR_NONE) + media_content_error("error video_meta_get_album_artist : [%d]", ret); ret = video_meta_get_duration(video_handle, &duration); if(ret != MEDIA_CONTENT_ERROR_NONE) media_content_error("error video_meta_get_duration : [%d]", ret); @@ -1225,12 +1271,13 @@ int test_gallery_scenario(void) media_content_error("error video_meta_get_played_time : [%d]", ret); media_content_debug("This is Video"); - media_content_debug("Title: %s, Album: %s, Artist: %s\nDuration: %d, Played time: %d\n", title, artist, album, duration, time_played); + media_content_debug("Title: %s, Album: %s, Artist: %s, Album_artist: %s \n Duration: %d, Played time: %d\n", title, album, artist, album_artist, duration, time_played); } SAFE_FREE(title); SAFE_FREE(artist); SAFE_FREE(album); + SAFE_FREE(album_artist); ret = video_meta_destroy(video_handle); if(ret != MEDIA_CONTENT_ERROR_NONE) @@ -1583,6 +1630,77 @@ int test_folder_operation(void) test_filter_destroy(); + /* fix prevent: Resource Leak */ + SAFE_FREE(folder_id); + + return ret; +} + +bool folder_update_cb(media_folder_h folder, void *user_data) +{ + char *folder_id = NULL; + char *folder_path = NULL; + char *folder_name = NULL; + bool ret = true; + + if(folder != NULL) + { + ret = media_folder_get_folder_id(folder, &folder_id); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + media_content_debug("folder_id = [%s]", folder_id); + SAFE_FREE(folder_id); + + ret = media_folder_get_path(folder, &folder_path); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + media_content_debug("folder_path = [%s]", folder_path); + SAFE_FREE(folder_path); + + ret = media_folder_get_name(folder, &folder_name); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + media_content_debug("folder_name = [%s]", folder_name); + SAFE_FREE(folder_name); + + ret = media_folder_clone(&g_folder, folder); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + ret = true; + } + else + { + ret = false; + } + + return ret; +} + + +int test_folder_update(void) +{ + int ret = MEDIA_CONTENT_ERROR_NONE; + filter_h filter; + int folder_count = 0; + + media_content_debug("\n============Folder Update Test============\n\n"); + + ret = media_filter_create(&filter); + media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret); + + media_filter_set_condition(filter, "MEDIA_TYPE=0 and MEDIA_STORAGE_TYPE=0", MEDIA_CONTENT_COLLATE_DEFAULT); /*MEDIA_TYPE 0-image, 1-video, 2-sound, 3-music, 4-other*/ + + ret = media_folder_get_folder_count_from_db(filter, &folder_count); + + media_content_debug("Folder count : %d", folder_count); + + ret = media_folder_foreach_folder_from_db(filter, folder_update_cb, NULL); + + media_filter_destroy(filter); + + ret = media_folder_set_name(g_folder, "test_folder"); + + ret = media_folder_update_to_db(g_folder); + + ret = media_folder_destroy(g_folder); + return ret; } @@ -2119,6 +2237,10 @@ int test_update_operation() } #endif } + + /* fix prevent: Resource Leak */ + SAFE_FREE(media_id); + SAFE_FREE(media_path); } return MEDIA_CONTENT_ERROR_NONE; @@ -2127,8 +2249,8 @@ int test_update_operation() int test_insert(void) { int ret = MEDIA_CONTENT_ERROR_NONE; - //char *path = "/opt/media/Images/Default.jpg"; - char *path = tzplatform_mkpath(TZ_USER_CONTENT, "Others/other.txt"); + char *path = "/opt/usr/media/Images/Default.jpg"; + //char *path = "/opt/usr/media/Others/other.txt"; //char *path = NULL; media_info_h media_item = NULL; media_content_debug("\n============DB Insert Test============\n\n"); @@ -2257,6 +2379,9 @@ bool thumbnail_create_cb(media_info_h media, void *user_data) media_content_error("media_info_create_thumbnail failed: %d", ret); } + /* fix prevent: Resource leak */ + SAFE_FREE(media_id); + return true; } @@ -2296,6 +2421,9 @@ bool thumbnail_cancel_cb(media_info_h media, void *user_data) if(g_cnt == g_media_cnt) g_main_loop_quit(g_loop); + /* fix prevent: Resource leak */ + SAFE_FREE(media_id); + return true; } @@ -2901,6 +3029,10 @@ int main(int argc, char *argv[]) if(ret != MEDIA_CONTENT_ERROR_NONE) return ret; + ret = test_folder_update(); + if(ret != MEDIA_CONTENT_ERROR_NONE) + return ret; + ret = test_playlist_operation(); if(ret != MEDIA_CONTENT_ERROR_NONE) return ret; -- 2.7.4