modify DB schema. 88/36188/2 accepted/tizen/common/20150319.090644 accepted/tizen/mobile/20150320.005907 accepted/tizen/tv/20150320.005625 accepted/tizen/wearable/20150319.095417 submit/tizen/20150318.030848 submit/tizen/20150319.050213
authorji.yong.seo <ji.yong.seo@samsung.com>
Tue, 3 Mar 2015 08:51:07 +0000 (17:51 +0900)
committerji.yong.seo <ji.yong.seo@samsung.com>
Wed, 18 Mar 2015 01:36:14 +0000 (10:36 +0900)
Change-Id: I0006be92300605526cfe6c855029af190b2f340e

17 files changed:
include/media_audio.h
include/media_content_type.h
include/media_info.h
include/media_info_private.h
include/media_util_private.h
include/media_video.h
packaging/capi-content-media-content.spec
src/media_audio.c
src/media_content.c
src/media_db.c
src/media_folder.c
src/media_image.c
src/media_info.c
src/media_playlist.c
src/media_util_private.c
src/media_video.c
test/media-content_test.c

index 866559a..34684a8 100755 (executable)
@@ -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.
index 4c238dd..e4a4aab 100755 (executable)
@@ -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*/
 
 /**
  * @}
index 1da3348..f8452bc 100755 (executable)
@@ -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.
index 9c8c685..5625a6c 100755 (executable)
@@ -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'"
index 59dd538..452b4f8 100755 (executable)
 extern "C" {
 #endif /* __cplusplus */
 
+#include <stdbool.h>
 
 /**
  *@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);
 
 
index 38c7e90..bec8096 100755 (executable)
@@ -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.
index 889da04..135ebcb 100755 (executable)
@@ -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
index 61b9aa7..baf0291 100755 (executable)
@@ -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;
index 8ca5178..f6d49ef 100755 (executable)
@@ -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) {
index ed289a6..abf4919 100755 (executable)
@@ -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;
        }
index 46d07b3..bb1cda5 100755 (executable)
@@ -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)
index 3d057b6..e982e49 100755 (executable)
@@ -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);
        }
index 298c5f4..d55eac8 100755 (executable)
@@ -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 */
index 06353a8..408dc2f 100755 (executable)
@@ -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;
index 10d518f..9892dbe 100755 (executable)
@@ -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;
+}
index dea0516..77a15bc 100755 (executable)
@@ -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;
index 0bc125a..f457f1e 100755 (executable)
@@ -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;