Add parameter for getting user path
[platform/core/api/media-content.git] / src / media_info.c
1 /*
2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include <media_info.h>
18 #include <media-thumbnail.h>
19 #include <media-util-dcm.h>
20 #include <media_info_private.h>
21 #include <media_util_private.h>
22 #include <system_info.h>
23 #ifdef _USE_TV_PROFILE
24 #include <media_content_internal.h>
25 #endif
26
27 static void __media_info_insert_completed_cb(media_request_result_s *result, void *user_data);
28 static void __media_info_thumbnail_completed_cb(int error, const char *path, void *user_data);
29 static void __media_info_face_completed_cb(int error, const int face_count, void *user_data);
30 static bool __media_info_delete_batch_cb(media_info_h media, void *user_data);
31 static int __media_info_insert_batch(media_batch_insert_e insert_type, const char **path_array, unsigned int array_length, media_insert_completed_cb completed_cb, void *user_data);
32
33 static int __media_info_get_media_path_by_id_from_db(const char *media_id, char **path)
34 {
35         int ret = MEDIA_CONTENT_ERROR_NONE;
36         sqlite3_stmt *stmt = NULL;
37         char *select_query = NULL;
38
39         media_content_retvm_if(!STRING_VALID(media_id), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media_id");
40
41         select_query = sqlite3_mprintf(SELECT_MEDIA_PATH_BY_ID, media_id);
42
43         ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
44         SQLITE3_SAFE_FREE(select_query);
45         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
46
47         if (sqlite3_step(stmt) == SQLITE_ROW) {
48                 *path = g_strdup((const char *)sqlite3_column_text(stmt, 0));
49         } else {
50                 media_content_error("There's no media with this ID : %s", media_id);
51                 *path = NULL;
52                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
53         }
54
55         SQLITE3_FINALIZE(stmt);
56
57         return ret;
58 }
59
60 static void __media_info_insert_completed_cb(media_request_result_s *result, void *user_data)
61 {
62         int ret = MEDIA_CONTENT_ERROR_NONE;
63         media_insert_cb_s *_cb_data = (media_insert_cb_s *)user_data;
64
65         if (_cb_data) {
66                 if (result)
67                         ret = _content_error_capi(MEDIA_CONTENT_TYPE, result->result);
68
69                 if (_cb_data->insert_completed_cb)
70                         _cb_data->insert_completed_cb(ret, _cb_data->user_data);
71
72                 if (STRING_VALID(_cb_data->insert_list_path)) {
73                         if (unlink(_cb_data->insert_list_path) < 0)
74                                 media_content_stderror("failed to delete");
75                         SAFE_FREE(_cb_data->insert_list_path);
76                 }
77         }
78
79         SAFE_FREE(_cb_data);
80
81         return;
82 }
83
84 static void __media_info_thumbnail_completed_cb(int error, const char *path, void *user_data)
85 {
86         int error_value = MEDIA_CONTENT_ERROR_NONE;
87
88         media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s *)user_data;
89         media_info_s *media = NULL;
90
91         if (_thumb_cb != NULL) {
92                 media = _thumb_cb->handle;
93                 if ((media != NULL) && STRING_VALID(path)) {
94                         media->thumbnail_path = NULL;
95                         media->thumbnail_path = g_strdup(path);
96                 }
97
98                 media_content_debug("error [%d], thumbnail_path [%s]", error, path);
99                 error_value = _content_error_capi(MEDIA_THUMBNAIL_TYPE, error);
100                 if (_thumb_cb->thumbnail_completed_cb)
101                         _thumb_cb->thumbnail_completed_cb(error_value, path, _thumb_cb->user_data);
102         }
103
104         SAFE_FREE(_thumb_cb);
105
106         return;
107 }
108
109 static bool __media_info_isFaceRecognition_feature_supported()
110 {
111         bool isFaceRecognitionSupported = false;
112
113         const int nRetVal = system_info_get_platform_bool("http://tizen.org/feature/vision.face_recognition", &isFaceRecognitionSupported);
114
115         if (nRetVal != SYSTEM_INFO_ERROR_NONE) {
116                 media_content_debug("SYSTEM_INFO_ERROR: vision.face_recognition [%d]", nRetVal);
117                 return false;
118         }
119
120         return isFaceRecognitionSupported;
121 }
122
123 static void __media_info_face_completed_cb(int error, const int face_count, void *user_data)
124 {
125         int error_value = MEDIA_CONTENT_ERROR_NONE;
126
127         media_face_cb_s *_face_cb = (media_face_cb_s *)user_data;
128
129         if (_face_cb != NULL) {
130                 media_content_debug("error [%d], face_count [%d]", error, face_count);
131                 error_value = _content_error_capi(MEDIA_THUMBNAIL_TYPE, error);
132                 if (_face_cb->face_completed_cb)
133                         _face_cb->face_completed_cb(error_value, face_count, _face_cb->user_data);
134         }
135
136         SAFE_FREE(_face_cb);
137
138         return;
139 }
140
141 static bool __media_info_delete_batch_cb(media_info_h media, void *user_data)
142 {
143         int err = MEDIA_CONTENT_ERROR_NONE;
144         char *thumb_path = NULL;
145         media_content_type_e media_type = 0;
146         GArray *thumb_list = (GArray *)user_data;
147
148         if (media == NULL) {
149                 media_content_debug("NO Item");
150                 return true;
151         }
152
153         err = media_info_get_media_type(media, &media_type);
154         if (err == MEDIA_CONTENT_ERROR_NONE) {
155                 media_content_debug("media_type : [%d]", media_type);
156
157                 media_info_get_thumbnail_path(media, &thumb_path);
158                 if (STRING_VALID(thumb_path) && STRING_VALID(MEDIA_CONTENT_THUMB_DEFAULT_PATH)) {
159                         if (strncmp(MEDIA_CONTENT_THUMB_DEFAULT_PATH, thumb_path, strlen(MEDIA_CONTENT_THUMB_DEFAULT_PATH)) != 0)
160                                 g_array_append_val(thumb_list, thumb_path);
161                 }
162         } else {
163                 media_content_error("media_info_get_media_type failed");
164         }
165
166         return true;
167 }
168
169 static int __media_info_insert_batch(media_batch_insert_e insert_type, const char **path_array,
170                                         unsigned int array_length,
171                                         media_insert_completed_cb completed_cb,
172                                         void *user_data)
173 {
174         int ret = MEDIA_CONTENT_ERROR_NONE;
175         FILE *fp = NULL;
176         char list_path[255] = {0, };
177         unsigned int idx = 0;
178         int nwrites = 0;
179
180         for (idx = 0; idx < BATCH_REQUEST_MAX; idx++) {
181                 snprintf(list_path, sizeof(list_path), "%s/request-%ld-%d", MEDIA_CONTENT_INSERT_FILES_PATH, media_content_gettid(), idx);
182
183                 if (g_file_test(list_path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
184                         memset(list_path, 0x00, sizeof(list_path));
185                         continue;
186                 } else {
187                         media_content_debug("The request file list path : %s", list_path);
188                         break;
189                 }
190         }
191
192         if (idx == BATCH_REQUEST_MAX) {
193                 media_content_error("Too many batch request for one thread");
194                 return MEDIA_CONTENT_ERROR_DB_BUSY;
195         }
196
197         fp = fopen(list_path, "w");
198         if (fp == NULL) {
199                 media_content_error("failed to open file : [%s]", list_path);
200                 media_content_stderror("failed to open file");
201                 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
202         }
203
204         for (idx = 0; idx < array_length; idx++) {
205                 if (STRING_VALID(path_array[idx])) {
206                         int size = strlen(path_array[idx]);
207
208                         ret = _media_util_check_file_exist(path_array[idx]);
209                         if (ret != MEDIA_CONTENT_ERROR_NONE) {
210                                 fclose(fp);
211                                 if (unlink(list_path) < 0)
212                                         media_content_stderror("failed to delete");
213                                 return ret;
214                         }
215
216                         nwrites = fwrite(path_array[idx], 1, size, fp);
217                         if (nwrites != size) {
218                                 media_content_stderror("failed to write");
219                                 fclose(fp);
220                                 if (unlink(list_path) < 0)
221                                         media_content_stderror("failed to delete");
222                                 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
223                         }
224
225                         nwrites = fwrite("\n", 1, 1, fp);
226                         if (nwrites != 1) {
227                                 media_content_stderror("failed to write");
228                                 fclose(fp);
229                                 if (unlink(list_path) < 0)
230                                         media_content_stderror("failed to delete");
231                                 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
232                         }
233                 } else {
234                         media_content_error("path[%d] is invalid string", idx);
235                 }
236         }
237
238         fclose(fp);
239
240         media_insert_cb_s *_cb_data = (media_insert_cb_s *)calloc(1, sizeof(media_insert_cb_s));
241         media_content_retvm_if(_cb_data == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
242
243         _cb_data->insert_completed_cb = completed_cb;
244         _cb_data->user_data = user_data;
245         _cb_data->insert_list_path = g_strdup(list_path);
246
247         if (insert_type == MEDIA_BATCH_INSERT_NORMAL)
248                 ret = media_files_register(list_path, __media_info_insert_completed_cb, _cb_data, tzplatform_getuid(TZ_USER_NAME));
249         else if (insert_type == MEDIA_BATCH_INSERT_BURSTSHOT)
250                 ret = media_burstshot_register(list_path, __media_info_insert_completed_cb, _cb_data, tzplatform_getuid(TZ_USER_NAME));
251         else
252                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
253
254         if (ret != MEDIA_CONTENT_ERROR_NONE) {
255                 media_content_error("media_files_register failed : %d", ret);
256                 if (unlink(list_path) < 0)
257                         media_content_stderror("failed to delete");
258                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
259         }
260
261         return ret;
262 }
263
264 void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media)
265 {
266         media_info_s *_media = (media_info_s*)media;
267 #ifndef _USE_TV_PROFILE
268         char *tmp_path = NULL;
269         char repl_path[MAX_QUERY_SIZE] = {0, };
270 #endif
271
272         _media->media_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_UUID));
273 #ifdef _USE_TV_PROFILE
274         _media->file_path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PATH));
275 #else
276         tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PATH));
277         _media_content_rollback_path(tmp_path, repl_path);
278         _media->file_path = g_strdup(repl_path);
279         SAFE_FREE(tmp_path);
280 #endif
281         _media->display_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_FILE_NAME));
282         _media->media_type = (int)sqlite3_column_int(stmt, MEDIA_INFO_TYPE);
283         _media->mime_type = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_MIME_TYPE));
284         _media->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_INFO_SIZE);
285         _media->added_time = (int)sqlite3_column_int(stmt, MEDIA_INFO_ADDED_TIME);
286         _media->modified_time = (int)sqlite3_column_int(stmt, MEDIA_INFO_MODIFIED_TIME);
287         _media->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_THUMBNAIL_PATH));
288         _media->description = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_DESCRIPTION));
289         _media->rating = (int)sqlite3_column_int(stmt, MEDIA_INFO_RATING);
290         _media->favourite = (int)sqlite3_column_int(stmt, MEDIA_INFO_FAVOURITE);
291         _media->author = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_AUTHOR));
292         _media->provider = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_PROVIDER));
293         _media->content_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_CONTENT_NAME));
294         _media->category = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_CATEGORY));
295         _media->location_tag = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_LOCATION_TAG));
296         _media->age_rating = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_AGE_RATING));
297         _media->keyword = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_KEYWORD));
298         _media->is_drm = (int)sqlite3_column_int(stmt, MEDIA_INFO_IS_DRM);
299         _media->storage_type = (int)sqlite3_column_int(stmt, MEDIA_INFO_STORAGE_TYPE);
300         _media->longitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_LONGITUDE);
301         _media->latitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_LATITUDE);
302         _media->altitude = (double)sqlite3_column_double(stmt, MEDIA_INFO_ALTITUDE);
303         _media->played_count = sqlite3_column_int(stmt, MEDIA_INFO_PLAYED_COUNT);
304         _media->played_time = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_TIME);
305         _media->played_position = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_POSITION);
306         _media->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
307         _media->timeline = (double)sqlite3_column_double(stmt, MEDIA_INFO_TIMELINE);
308         _media->weather = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_WEATHER));
309         _media->sync_status = (int)sqlite3_column_int(stmt, MEDIA_INFO_SYNC_STATUS);
310         _media->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_STORAGE_UUID));
311         _media->is_360 = (int)sqlite3_column_int(stmt, MEDIA_INFO_IS_360);
312
313         if (_media->media_type == MEDIA_CONTENT_TYPE_IMAGE) {
314                 _media->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
315                 if (_media->image_meta) {
316                         _media->image_meta->media_id = g_strdup(_media->media_id);
317                         _media->image_meta->width = sqlite3_column_int(stmt, MEDIA_INFO_WIDTH);
318                         _media->image_meta->height = sqlite3_column_int(stmt, MEDIA_INFO_HEIGHT);
319                         _media->image_meta->fnumber = (double)sqlite3_column_double(stmt, MEDIA_INFO_FNUMBER);
320                         _media->image_meta->iso = sqlite3_column_int(stmt, MEDIA_INFO_ISO);
321                         _media->image_meta->date_taken = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_DATETAKEN));
322                         _media->image_meta->orientation = sqlite3_column_int(stmt, MEDIA_INFO_ORIENTATION);
323                         _media->image_meta->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
324                         _media->image_meta->burst_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_BURST_ID));
325                         _media->image_meta->weather = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_WEATHER));
326                         _media->image_meta->exposure_time = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_EXPOSURE_TIME));
327                         _media->image_meta->model = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_MODEL));
328                 }
329         } else if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
330                 _media->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
331                 if (_media->video_meta) {
332                         _media->video_meta->media_id = g_strdup(_media->media_id);
333                         _media->video_meta->width = sqlite3_column_int(stmt, MEDIA_INFO_WIDTH);
334                         _media->video_meta->height = sqlite3_column_int(stmt, MEDIA_INFO_HEIGHT);
335                         _media->video_meta->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
336                         _media->video_meta->album = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM));
337                         _media->video_meta->artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ARTIST));
338                         _media->video_meta->album_artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM_ARTIST));
339                         _media->video_meta->genre = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_GENRE));
340                         _media->video_meta->composer = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COMPOSER));
341                         _media->video_meta->year = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_YEAR));
342                         _media->video_meta->recorded_date = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_RECORDED_DATE));
343                         _media->video_meta->copyright = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COPYRIGHT));
344                         _media->video_meta->track_num = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TRACK_NUM));
345                         _media->video_meta->bitrate = sqlite3_column_int(stmt, MEDIA_INFO_BITRATE);
346                         _media->video_meta->duration = sqlite3_column_int(stmt, MEDIA_INFO_DURATION);
347                         _media->video_meta->played_count = sqlite3_column_int(stmt, MEDIA_INFO_PLAYED_COUNT);
348                         _media->video_meta->played_time = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_TIME);
349                         _media->video_meta->played_position = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_POSITION);
350                 }
351
352         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
353                 _media->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
354                 if (_media->audio_meta) {
355                         _media->audio_meta->media_id = g_strdup(_media->media_id);
356                         _media->audio_meta->title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TITLE));
357                         _media->audio_meta->album = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM));
358                         _media->audio_meta->artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ARTIST));
359                         _media->audio_meta->album_artist = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_ALBUM_ARTIST));
360                         _media->audio_meta->genre = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_GENRE));
361                         _media->audio_meta->composer = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COMPOSER));
362                         _media->audio_meta->year = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_YEAR));
363                         _media->audio_meta->recorded_date = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_RECORDED_DATE));
364                         _media->audio_meta->copyright = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_COPYRIGHT));
365                         _media->audio_meta->track_num = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_INFO_TRACK_NUM));
366                         _media->audio_meta->bitrate = sqlite3_column_int(stmt, MEDIA_INFO_BITRATE);
367                         _media->audio_meta->bitpersample = sqlite3_column_int(stmt, MEDIA_INFO_BITPERSAMPLE);
368                         _media->audio_meta->duration = sqlite3_column_int(stmt, MEDIA_INFO_DURATION);
369                         _media->audio_meta->played_count = sqlite3_column_int(stmt, MEDIA_INFO_PLAYED_COUNT);
370                         _media->audio_meta->played_time = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_TIME);
371                         _media->audio_meta->played_position = sqlite3_column_int(stmt, MEDIA_INFO_LAST_PLAYED_POSITION);
372                         _media->audio_meta->samplerate = sqlite3_column_int(stmt, MEDIA_INFO_SAMPLERATE);
373                         _media->audio_meta->channel = sqlite3_column_int(stmt, MEDIA_INFO_CHANNEL);
374                 }
375         }
376 }
377
378 int _media_info_get_media_info_from_db(const char *path, const char *storage_id, media_info_h media)
379 {
380         int ret = MEDIA_CONTENT_ERROR_NONE;
381         sqlite3_stmt *stmt = NULL;
382         char *select_query = NULL;
383         media_info_s *_media = (media_info_s*)media;
384
385         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media");
386
387         select_query = sqlite3_mprintf(SELECT_MEDIA_BY_PATH, storage_id, path);
388
389         ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
390         SQLITE3_SAFE_FREE(select_query);
391         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
392
393         if (sqlite3_step(stmt) == SQLITE_ROW) {
394                 _media_info_item_get_detail(stmt, (media_info_h)_media);
395         } else {
396                 media_content_error("There's no media!!");
397                 media_content_error("%s", path);
398                 media_content_error("%s", storage_id);
399                 ret = MEDIA_CONTENT_ERROR_DB_FAILED;
400         }
401
402         SQLITE3_FINALIZE(stmt);
403
404         return ret;
405 }
406
407 int media_info_insert_to_db(const char *path, media_info_h *info)
408 {
409         bool ignore_file = FALSE;
410         bool ignore_dir = FALSE;
411         char *folder_path = NULL;
412         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
413         char repl_path[MAX_QUERY_SIZE] = {0, };
414         int ret = MEDIA_CONTENT_ERROR_NONE;
415
416         media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid path");
417         media_content_retvm_if(info == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid info");
418         memset(repl_path, 0, sizeof(repl_path));
419         ret = _media_content_replace_path(path, repl_path);
420         media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
421
422         ret = _media_util_check_ignore_file(repl_path, &ignore_file);
423         media_content_retvm_if(ignore_file == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path");
424
425         ret = _media_util_check_file_exist(repl_path);
426         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
427
428         folder_path = g_path_get_dirname(repl_path);
429         ret = _media_util_check_ignore_dir(folder_path, &ignore_dir);
430         SAFE_FREE(folder_path);
431
432         media_content_retvm_if(ignore_dir == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid folder path");
433
434         memset(storage_id, 0x00, sizeof(storage_id));
435         ret = media_svc_get_storage_id(_content_get_db_handle(), repl_path, storage_id, tzplatform_getuid(TZ_USER_NAME));
436         if (ret != MS_MEDIA_ERR_NONE) {
437                 media_content_error("media_svc_get_storage_id failed : %d", ret);
438                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
439         }
440
441         ret = media_svc_check_item_exist_by_path(_content_get_db_handle(), storage_id, repl_path);
442         if (ret == MS_MEDIA_ERR_DB_NO_RECORD) {
443                 media_content_sec_debug("media_svc_check_item_exist_by_path : no record : %s", repl_path);
444
445                 media_svc_storage_type_e storage_type = 0;
446
447                 ret = media_svc_get_storage_type(repl_path, &storage_type, tzplatform_getuid(TZ_USER_NAME));
448                 if (ret != MS_MEDIA_ERR_NONE) {
449                         media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
450                         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
451                 }
452
453                 ret = media_svc_insert_item_immediately(_content_get_db_handle(), storage_id, storage_type, repl_path, tzplatform_getuid(TZ_USER_NAME));
454
455                 if (ret != MS_MEDIA_ERR_NONE) {
456                         if (ret == MS_MEDIA_ERR_DB_CONSTRAINT_FAIL) {
457                                 media_content_sec_error("This item is already inserted. This may be normal operation because other process already did this (%s)", repl_path);
458                                 ret = MEDIA_CONTENT_ERROR_NONE;
459                         } else {
460                                 media_content_sec_error("media_svc_insert_item_immediately failed : %d (%s)", ret, repl_path);
461                         }
462
463                         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
464                 }
465         } else if (ret != MS_MEDIA_ERR_NONE) {
466                 media_content_sec_error("media_svc_check_item_exist_by_path failed : %d (%s)", ret, repl_path);
467                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
468         }
469
470         media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
471         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
472
473         if (STRING_VALID(storage_id))
474                 ret = _media_info_get_media_info_from_db(repl_path, storage_id, (media_info_h)_media);
475         else
476                 ret = _media_info_get_media_info_from_db(repl_path, DEFAULT_MEDIA_STORAGE_ID, (media_info_h)_media);
477
478         *info = (media_info_h)_media;
479         return ret;
480 }
481
482 int media_info_insert_batch_to_db(
483                                         const char **path_array,
484                                         unsigned int array_length,
485                                         media_insert_completed_cb completed_cb,
486                                         void *user_data)
487 {
488         char **repl_path_array = NULL;
489         int idx = 0;
490         int ret = MS_MEDIA_ERR_NONE;
491         char repl_path[MAX_QUERY_SIZE] = {0, };
492
493         media_content_retvm_if(path_array == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path_array");
494         media_content_retvm_if(array_length <= 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid array_length");
495
496         repl_path_array = calloc(1, sizeof(char *) * array_length);
497
498         for (idx = 0; idx < array_length; idx++) {
499                 if (STRING_VALID(path_array[idx])) {
500                         memset(repl_path, 0, sizeof(repl_path));
501                         _media_content_replace_path(path_array[idx], repl_path);
502                         repl_path_array[idx] = strndup(repl_path, strlen(repl_path));
503                 } else {
504                         media_content_error("path[%d] is invalid string", idx);
505                 }
506         }
507
508         ret = __media_info_insert_batch(MEDIA_BATCH_INSERT_NORMAL, (const char **)repl_path_array, array_length, completed_cb, user_data);
509         for (idx = 0; idx < array_length; idx++)
510                 SAFE_FREE(repl_path_array[idx]);
511
512         SAFE_FREE(repl_path_array);
513
514         return ret;
515 }
516
517 int media_info_insert_burst_shot_to_db(const char **path_array, unsigned int array_length, media_insert_burst_shot_completed_cb callback, void *user_data)
518 {
519         char **repl_path_array = NULL;
520         int idx = 0;
521         int ret = MS_MEDIA_ERR_NONE;
522         char repl_path[MAX_QUERY_SIZE] = {0, };
523
524         media_content_retvm_if(path_array == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path_array");
525         media_content_retvm_if(array_length <= 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid array_length");
526
527         repl_path_array = calloc(1, sizeof(char *) * array_length);
528
529         for (idx = 0; idx < array_length; idx++) {
530                 if (STRING_VALID(path_array[idx])) {
531                         memset(repl_path, 0, sizeof(repl_path));
532                         _media_content_replace_path(path_array[idx], repl_path);
533                         repl_path_array[idx] = strndup(repl_path, strlen(repl_path));
534                 } else {
535                         media_content_error("path[%d] is invalid string", idx);
536                 }
537         }
538
539         ret = __media_info_insert_batch(MEDIA_BATCH_INSERT_BURSTSHOT, (const char **)repl_path_array, array_length, callback, user_data);
540         for (idx = 0; idx < array_length; idx++)
541                 SAFE_FREE(repl_path_array[idx]);
542
543         SAFE_FREE(repl_path_array);
544
545         return ret;
546 }
547
548 #ifdef _USE_SENIOR_MODE
549 int media_info_insert_to_db_with_contact_data(const char *path, const char* contact, const char* app_data, media_info_h *info)
550 {
551         int ret = media_info_insert_to_db(path, info);
552         media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_insert_to_db [%s] failed", path);
553
554         ret = media_info_set_contact(*info, contact);
555         if (ret != MEDIA_CONTENT_ERROR_NONE) {
556                 media_content_error("media_info_set_contact [%s] failed", contact);
557
558                 media_info_s* _media_info = (media_info_s*)*info;
559                 ret = media_info_delete_from_db(_media_info->media_id);
560                 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_delete_from_db [%s] failed", _media_info->media_id);
561
562                 media_info_destroy(*info);
563                 return ret;
564         }
565
566         ret = media_info_set_app_data(*info, app_data);
567         if (ret != MEDIA_CONTENT_ERROR_NONE) {
568                 media_content_error("media_info_set_app_data [%s] failed", app_data);
569
570                 media_info_s* _media_info = (media_info_s*)*info;
571                 ret = media_info_delete_from_db(_media_info->media_id);
572                 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_delete_from_db [%s] failed", _media_info->media_id);
573
574                 media_info_destroy(*info);
575                 return ret;
576         }
577
578         ret = media_info_update_to_db(*info);
579         if (ret != MEDIA_CONTENT_ERROR_NONE) {
580                 media_content_error("media_info_update_to_db [] failed");
581
582                 media_info_s* _media_info = (media_info_s*)*info;
583                 ret = media_info_delete_from_db(_media_info->media_id);
584                 media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "media_info_delete_from_db [%s] failed", _media_info->media_id);
585
586                 media_info_destroy(*info);
587                 return ret;
588         }
589
590         return ret;
591 }
592
593 int media_info_delete_contact_from_db(const char* contact, const char* storage_id)
594 {
595         return -1;
596 }
597
598 int media_info_get_media_info_by_path_from_db(const char* path, media_info_h* media)
599 {
600         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0,};
601         int ret = MEDIA_CONTENT_ERROR_NONE;
602         media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid path");
603         media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid info");
604
605         memset(storage_id, 0x00, sizeof(storage_id));
606         ret = media_svc_get_storage_id(_content_get_db_handle(), path, storage_id, tzplatform_getuid(TZ_USER_NAME));
607         if (ret != MS_MEDIA_ERR_NONE) {
608                 media_content_error("media_svc_get_storage_id failed : %d", ret);
609                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
610         }
611
612         media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
613         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
614
615         ret =  _media_info_get_media_info_from_db(path, storage_id, (media_info_h)_media);
616         *media = (media_info_h)_media;
617
618         return ret;
619 }
620
621 int media_info_delete_item(const char *media_id)
622 {
623         int ret = MEDIA_CONTENT_ERROR_NONE;
624         char *path = NULL;
625         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0,};
626
627         if (!STRING_VALID(media_id)) {
628                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
629                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
630         }
631
632         memset(storage_id, 0x00, sizeof(storage_id));
633
634         ret = __media_info_get_media_path_by_id_from_db(media_id, &path);
635         if (ret != MEDIA_CONTENT_ERROR_NONE) {
636                 media_content_error("__media_info_get_media_path_by_id_from_db failed : %d", ret);
637                 SAFE_FREE(path);
638                 return ret;
639         }
640
641         ret = _media_db_get_storage_id_by_media_id(media_id, storage_id);
642         if (ret != MEDIA_CONTENT_ERROR_NONE) {
643                 media_content_error("_media_db_get_storage_id_by_media_id failed : %d", ret);
644                 SAFE_FREE(path);
645                 return ret;
646         }
647
648         ret = media_svc_delete_item_by_path(_content_get_db_handle(), storage_id, path, tzplatform_getuid(TZ_USER_NAME));
649         if (ret != MEDIA_CONTENT_ERROR_NONE) {
650                 media_content_error("remove from DB failed : %d", ret);
651                 SAFE_FREE(path);
652                 return ret;
653         }
654
655         ret = media_svc_remove_file(path);
656         SAFE_FREE(path);
657         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
658 }
659
660 #endif
661
662 int media_info_delete_from_db(const char *media_id)
663 {
664         int ret = MEDIA_CONTENT_ERROR_NONE;
665         char *path = NULL;
666         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
667
668         if (!STRING_VALID(media_id)) {
669                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
670                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
671         }
672
673         memset(storage_id, 0x00, sizeof(storage_id));
674
675         ret = __media_info_get_media_path_by_id_from_db(media_id, &path);
676         if (ret != MEDIA_CONTENT_ERROR_NONE) {
677                 media_content_error("__media_info_get_media_path_by_id_from_db failed : %d", ret);
678                 SAFE_FREE(path);
679                 return ret;
680         }
681
682         ret = _media_db_get_storage_id_by_media_id(media_id, storage_id);
683         if (ret != MEDIA_CONTENT_ERROR_NONE) {
684                 media_content_error("_media_db_get_storage_id_by_media_id failed : %d", ret);
685                 SAFE_FREE(path);
686                 return ret;
687         }
688
689         ret = media_svc_delete_item_by_path(_content_get_db_handle(), storage_id, path, tzplatform_getuid(TZ_USER_NAME));
690         SAFE_FREE(path);
691
692         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
693 }
694
695 static int __media_info_delete_thumb_from_list(GArray *thumb_list)
696 {
697         int i = 0;
698         int list_len = 0;
699         char *thumb_path = NULL;
700
701         if (thumb_list != NULL) {
702                 list_len = thumb_list->len;
703                 for (i = 0; i < list_len; i++) {
704                         thumb_path = g_array_index(thumb_list, char*, i);
705                         media_content_debug("thumb path [%s]", thumb_path);
706                         if (unlink(thumb_path) < 0)
707                                 media_content_stderror("failed to delete");
708                 }
709         }
710         return MEDIA_CONTENT_ERROR_NONE;
711 }
712
713 static int __media_info_release_thumb_list(GArray *thumb_list)
714 {
715         int i = 0;
716         int list_len = 0;
717         char *thumb_path = NULL;
718
719         if (thumb_list != NULL) {
720                 list_len = thumb_list->len;
721                 for (i = 0; i < list_len; i++) {
722                         thumb_path = g_array_index(thumb_list, char*, 0);
723                         g_array_remove_index(thumb_list, 0);
724                         SAFE_FREE(thumb_path);
725                 }
726
727                 g_array_free(thumb_list, FALSE);
728         }
729
730         return MEDIA_CONTENT_ERROR_NONE;
731 }
732
733 int media_info_delete_batch_from_db(filter_h filter)
734 {
735         int ret = MEDIA_CONTENT_ERROR_NONE;
736
737         char *query_string = NULL;
738         filter_s *_filter = NULL;
739         attribute_h attr;
740         char *condition_query = NULL;
741         GArray *thumb_list = NULL;
742
743         media_content_retvm_if(filter == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid filter");
744
745         thumb_list = g_array_new(FALSE, FALSE, sizeof(char*));
746
747         /* Delete thumbnail of each item */
748         ret = _media_db_get_group_item(NULL, filter, __media_info_delete_batch_cb, thumb_list, MEDIA_GROUP_NONE);
749
750         _filter = (filter_s*)filter;
751         attr = _content_get_attirbute_handle();
752
753         if (_filter->condition) {
754                 ret = _media_filter_attribute_generate(attr, _filter->condition, _filter->condition_collate_type, &condition_query);
755                 if (ret != MEDIA_CONTENT_ERROR_NONE) {
756                         __media_info_release_thumb_list(thumb_list);
757                         return ret;
758                 }
759         }
760
761         if (STRING_VALID(condition_query)) {
762                 if (_filter->storage_id == NULL) {
763                         /*FIX ME*/
764                         query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA_BATCH, "media", condition_query);
765                 } else {
766                         query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA_BATCH, _filter->storage_id, condition_query);
767                 }
768         } else {
769                 SAFE_FREE(condition_query);
770                 __media_info_release_thumb_list(thumb_list);
771
772                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
773         }
774
775         ret = _content_query_sql(query_string);
776         if (ret == MEDIA_CONTENT_ERROR_NONE) {
777                 /* Send notification for this
778                         In this case, send noti for internal storage and external storage
779                 */
780                 media_content_debug("Batch deletion is successfull. Send notification for this");
781                 if (_filter->storage_id != NULL) {
782                         char *storage_path = NULL;
783                         media_svc_get_storage_path(_content_get_db_handle(), _filter->storage_id, &storage_path);
784                         if (STRING_VALID(storage_path))
785                                 media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, storage_path, -1, NULL, NULL);
786
787                         SAFE_FREE(storage_path);
788                 } else {
789                         /*FIX ME*/
790                         media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, MEDIA_ROOT_PATH_INTERNAL, -1, NULL, NULL);
791                         media_svc_publish_noti(MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, MEDIA_ROOT_PATH_SDCARD, -1, NULL, NULL);
792                 }
793
794                 __media_info_delete_thumb_from_list(thumb_list);
795                 __media_info_release_thumb_list(thumb_list);
796         }
797
798         SAFE_FREE(condition_query);
799         SQLITE3_SAFE_FREE(query_string);
800
801         return ret;
802 }
803
804 int media_info_destroy(media_info_h media)
805 {
806         int ret = MEDIA_CONTENT_ERROR_NONE;
807         media_info_s *_media = (media_info_s*)media;
808
809         if (_media) {
810                 SAFE_FREE(_media->media_id);
811                 SAFE_FREE(_media->file_path);
812                 SAFE_FREE(_media->display_name);
813                 SAFE_FREE(_media->mime_type);
814                 SAFE_FREE(_media->thumbnail_path);
815                 SAFE_FREE(_media->description);
816                 SAFE_FREE(_media->author);
817                 SAFE_FREE(_media->provider);
818                 SAFE_FREE(_media->content_name);
819                 SAFE_FREE(_media->category);
820                 SAFE_FREE(_media->location_tag);
821                 SAFE_FREE(_media->age_rating);
822                 SAFE_FREE(_media->keyword);
823                 SAFE_FREE(_media->title);
824 #ifdef _USE_TV_PROFILE
825                 SAFE_FREE(_media->modified_month);
826 #endif
827                 SAFE_FREE(_media->weather);
828                 SAFE_FREE(_media->storage_uuid);
829 #ifdef _USE_SENIOR_MODE
830                 SAFE_FREE(_media->contact);
831                 SAFE_FREE(_media->app_data);
832 #endif
833
834                 if (_media->image_meta) {
835                         SAFE_FREE(_media->image_meta->media_id);
836                         SAFE_FREE(_media->image_meta->date_taken);
837                         SAFE_FREE(_media->image_meta->burst_id);
838                         SAFE_FREE(_media->image_meta->exposure_time);
839                         SAFE_FREE(_media->image_meta->model);
840                         SAFE_FREE(_media->image_meta->title);
841                         SAFE_FREE(_media->image_meta->weather);
842
843                         SAFE_FREE(_media->image_meta);
844                 }
845
846                 if (_media->video_meta) {
847                         SAFE_FREE(_media->video_meta->media_id);
848                         SAFE_FREE(_media->video_meta->title);
849                         SAFE_FREE(_media->video_meta->album);
850                         SAFE_FREE(_media->video_meta->artist);
851                         SAFE_FREE(_media->video_meta->album_artist);
852                         SAFE_FREE(_media->video_meta->genre);
853                         SAFE_FREE(_media->video_meta->composer);
854                         SAFE_FREE(_media->video_meta->year);
855                         SAFE_FREE(_media->video_meta->recorded_date);
856                         SAFE_FREE(_media->video_meta->copyright);
857                         SAFE_FREE(_media->video_meta->track_num);
858
859                         SAFE_FREE(_media->video_meta);
860                 }
861
862                 if (_media->audio_meta) {
863                         SAFE_FREE(_media->audio_meta->media_id);
864                         SAFE_FREE(_media->audio_meta->title);
865                         SAFE_FREE(_media->audio_meta->album);
866                         SAFE_FREE(_media->audio_meta->artist);
867                         SAFE_FREE(_media->audio_meta->album_artist);
868                         SAFE_FREE(_media->audio_meta->genre);
869                         SAFE_FREE(_media->audio_meta->composer);
870                         SAFE_FREE(_media->audio_meta->year);
871                         SAFE_FREE(_media->audio_meta->recorded_date);
872                         SAFE_FREE(_media->audio_meta->copyright);
873                         SAFE_FREE(_media->audio_meta->track_num);
874
875                         SAFE_FREE(_media->audio_meta);
876                 }
877
878                 SAFE_FREE(_media);
879
880                 ret = MEDIA_CONTENT_ERROR_NONE;
881         } else {
882                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
883                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
884         }
885
886         return ret;
887 }
888
889 int media_info_clone(media_info_h *dst, media_info_h src)
890 {
891         int ret = MEDIA_CONTENT_ERROR_NONE;
892         media_info_s *_src = (media_info_s*)src;
893
894         if (_src != NULL) {
895                 media_info_s *_dst = (media_info_s*)calloc(1, sizeof(media_info_s));
896                 media_content_retvm_if(_dst == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
897
898                 if (_src->media_id) {
899                         _dst->media_id = g_strdup(_src->media_id);
900                         if (_dst->media_id == NULL) {
901                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
902                                 media_info_destroy((media_info_h)_dst);
903                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
904                         }
905                 }
906                 if (_src->file_path) {
907                         _dst->file_path = g_strdup(_src->file_path);
908                         if (_dst->file_path == NULL) {
909                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
910                                 media_info_destroy((media_info_h)_dst);
911                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
912                         }
913                 }
914                 if (_src->display_name != NULL) {
915                         _dst->display_name = g_strdup(_src->display_name);
916                         if (_dst->display_name == NULL) {
917                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
918                                 media_info_destroy((media_info_h)_dst);
919                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
920                         }
921                 }
922                 if (_src->mime_type) {
923                         _dst->mime_type = g_strdup(_src->mime_type);
924                         if (_dst->mime_type == NULL) {
925                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
926                                 media_info_destroy((media_info_h)_dst);
927                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
928                         }
929                 }
930                 if (_src->thumbnail_path != NULL) {
931                         _dst->thumbnail_path = g_strdup(_src->thumbnail_path);
932                         if (_dst->thumbnail_path == NULL) {
933                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
934                                 media_info_destroy((media_info_h)_dst);
935                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
936                         }
937                 }
938                 if (_src->description != NULL) {
939                         _dst->description = g_strdup(_src->description);
940                         if (_dst->description == NULL) {
941                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
942                                 media_info_destroy((media_info_h)_dst);
943                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
944                         }
945                 }
946
947                 if (_src->weather != NULL) {
948                         _dst->weather = g_strdup(_src->weather);
949                         if (_dst->weather == NULL) {
950                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
951                                 media_info_destroy((media_info_h)_dst);
952                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
953                         }
954                 }
955
956                 if (_src->title != NULL) {
957                         _dst->title = g_strdup(_src->title);
958                         if (_dst->title == NULL) {
959                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
960                                 media_info_destroy((media_info_h)_dst);
961                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
962                         }
963                 }
964                 if (_src->author != NULL) {
965                         _dst->author = g_strdup(_src->author);
966                         if (_dst->author == NULL) {
967                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
968                                 media_info_destroy((media_info_h)_dst);
969                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
970                         }
971                 }
972                 if (_src->provider != NULL) {
973                         _dst->provider = g_strdup(_src->provider);
974                         if (_dst->provider == NULL) {
975                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
976                                 media_info_destroy((media_info_h)_dst);
977                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
978                         }
979                 }
980                 if (_src->content_name != NULL) {
981                         _dst->content_name = g_strdup(_src->content_name);
982                         if (_dst->content_name == NULL) {
983                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
984                                 media_info_destroy((media_info_h)_dst);
985                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
986                         }
987                 }
988                 if (_src->category != NULL) {
989                         _dst->category = g_strdup(_src->category);
990                         if (_dst->category == NULL) {
991                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
992                                 media_info_destroy((media_info_h)_dst);
993                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
994                         }
995                 }
996                 if (_src->location_tag != NULL) {
997                         _dst->location_tag = g_strdup(_src->location_tag);
998                         if (_dst->location_tag == NULL) {
999                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1000                                 media_info_destroy((media_info_h)_dst);
1001                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1002                         }
1003                 }
1004                 if (_src->age_rating != NULL) {
1005                         _dst->age_rating = g_strdup(_src->age_rating);
1006                         if (_dst->age_rating == NULL) {
1007                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1008                                 media_info_destroy((media_info_h)_dst);
1009                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1010                         }
1011                 }
1012                 if (_src->keyword != NULL) {
1013                         _dst->keyword = g_strdup(_src->keyword);
1014                         if (_dst->keyword == NULL) {
1015                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1016                                 media_info_destroy((media_info_h)_dst);
1017                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1018                         }
1019                 }
1020
1021                 if (_src->storage_uuid != NULL) {
1022                         _dst->storage_uuid = g_strdup(_src->storage_uuid);
1023                         if (_dst->storage_uuid == NULL) {
1024                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1025                                 media_info_destroy((media_info_h)_dst);
1026                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1027                         }
1028                 }
1029 #ifdef _USE_TV_PROFILE
1030                 if (STRING_VALID(_src->modified_month)) {
1031                         _dst->modified_month = strdup(_src->modified_month);
1032                         if (_dst->modified_month == NULL) {
1033                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1034                                 media_info_destroy((media_info_h)_dst);
1035                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1036                         }
1037                 }
1038 #endif
1039 #ifdef _USE_SENIOR_MODE
1040                 if (STRING_VALID(_src->contact)) {
1041                         _dst->contact = strdup(_src->contact);
1042                         if (_dst->contact == NULL) {
1043                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1044                                 media_info_destroy((media_info_h)_dst);
1045                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1046                         }
1047                 }
1048
1049                 if (STRING_VALID(_src->app_data)) {
1050                         _dst->app_data = strdup(_src->app_data);
1051                         if (_dst->app_data == NULL) {
1052                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1053                                 media_info_destroy((media_info_h)_dst);
1054                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1055                         }
1056                 }
1057 #endif
1058
1059                 _dst->media_type = _src->media_type;
1060                 _dst->size = _src->size;
1061                 _dst->added_time = _src->added_time;
1062                 _dst->modified_time = _src->modified_time;
1063                 _dst->timeline = _src->timeline;
1064                 _dst->longitude = _src->longitude;
1065                 _dst->latitude = _src->latitude;
1066                 _dst->altitude = _src->altitude;
1067                 _dst->rating = _src->rating;
1068                 _dst->favourite = _src->favourite;
1069                 _dst->is_drm = _src->is_drm;
1070                 _dst->storage_type = _src->storage_type;
1071                 _dst->played_count = _src->played_count;
1072                 _dst->played_time = _src->played_time;
1073                 _dst->played_position = _src->played_position;
1074                 _dst->sync_status = _src->sync_status;
1075                 _dst->request_id = _src->request_id;
1076                 _dst->face_request_id = _src->face_request_id;
1077                 _dst->is_360 = _src->is_360;
1078 #ifdef _USE_TV_PROFILE
1079                 _dst->extract_flag = _src->extract_flag;
1080 #endif
1081
1082                 if (_src->media_type == MEDIA_CONTENT_TYPE_IMAGE && _src->image_meta) {
1083                         _dst->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
1084                         if (_dst->image_meta == NULL) {
1085                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1086                                 media_info_destroy((media_info_h)_dst);
1087                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1088                         }
1089
1090                         if (_src->image_meta->media_id != NULL) {
1091                                 _dst->image_meta->media_id = g_strdup(_src->image_meta->media_id);
1092                                 if (_dst->image_meta->media_id == NULL) {
1093                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1094                                         media_info_destroy((media_info_h)_dst);
1095                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1096                                 }
1097                         }
1098
1099                         if (_src->image_meta->date_taken != NULL) {
1100                                 _dst->image_meta->date_taken = g_strdup(_src->image_meta->date_taken);
1101                                 if (_dst->image_meta->date_taken == NULL) {
1102                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1103                                         media_info_destroy((media_info_h)_dst);
1104                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1105                                 }
1106                         }
1107
1108                         if (_src->image_meta->burst_id != NULL) {
1109                                 _dst->image_meta->burst_id = g_strdup(_src->image_meta->burst_id);
1110                                 if (_dst->image_meta->burst_id == NULL) {
1111                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1112                                         media_info_destroy((media_info_h)_dst);
1113                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1114                                 }
1115                         }
1116
1117                         if (_src->image_meta->weather != NULL) {
1118                                 _dst->image_meta->weather = g_strdup(_src->image_meta->weather);
1119                                 if (_dst->image_meta->weather == NULL) {
1120                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1121                                         media_info_destroy((media_info_h)_dst);
1122                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1123                                 }
1124                         }
1125
1126                         if (_src->image_meta->exposure_time != NULL) {
1127                                 _dst->image_meta->exposure_time = g_strdup(_src->image_meta->exposure_time);
1128                                 if (_dst->image_meta->exposure_time == NULL) {
1129                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1130                                         media_info_destroy((media_info_h)_dst);
1131                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1132                                 }
1133                         }
1134
1135                         if (_src->image_meta->model != NULL) {
1136                                 _dst->image_meta->model = g_strdup(_src->image_meta->model);
1137                                 if (_dst->image_meta->model == NULL) {
1138                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1139                                         media_info_destroy((media_info_h)_dst);
1140                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1141                                 }
1142                         }
1143
1144                         _dst->image_meta->fnumber = _src->image_meta->fnumber;
1145                         _dst->image_meta->iso = _src->image_meta->iso;
1146                         _dst->image_meta->width = _src->image_meta->width;
1147                         _dst->image_meta->height = _src->image_meta->height;
1148                         _dst->image_meta->orientation = _src->image_meta->orientation;
1149
1150                 } else if (_src->media_type == MEDIA_CONTENT_TYPE_VIDEO && _src->video_meta) {
1151                         _dst->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
1152                         if (_dst->video_meta == NULL) {
1153                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1154                                 media_info_destroy((media_info_h)_dst);
1155                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1156                         }
1157
1158                         if (_src->video_meta->media_id != NULL) {
1159                                 _dst->video_meta->media_id = g_strdup(_src->video_meta->media_id);
1160                                 if (_dst->video_meta->media_id == NULL) {
1161                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1162                                         media_info_destroy((media_info_h)_dst);
1163                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1164                                 }
1165                         }
1166                         if (_src->video_meta->title != NULL) {
1167                                 _dst->video_meta->title = g_strdup(_src->video_meta->title);
1168                                 if (_dst->video_meta->title == NULL) {
1169                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1170                                         media_info_destroy((media_info_h)_dst);
1171                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1172                                 }
1173                         }
1174                         if (_src->video_meta->album != NULL) {
1175                                 _dst->video_meta->album = g_strdup(_src->video_meta->album);
1176                                 if (_dst->video_meta->album == NULL) {
1177                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1178                                         media_info_destroy((media_info_h)_dst);
1179                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1180                                 }
1181                         }
1182                         if (_src->video_meta->artist != NULL) {
1183                                 _dst->video_meta->artist = g_strdup(_src->video_meta->artist);
1184                                 if (_dst->video_meta->artist == NULL) {
1185                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1186                                         media_info_destroy((media_info_h)_dst);
1187                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1188                                 }
1189                         }
1190                         if (_src->video_meta->album_artist != NULL) {
1191                                 _dst->video_meta->album_artist = g_strdup(_src->video_meta->album_artist);
1192                                 if (_dst->video_meta->album_artist == NULL) {
1193                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1194                                         media_info_destroy((media_info_h)_dst);
1195                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1196                                 }
1197                         }
1198                         if (_src->video_meta->genre != NULL) {
1199                                 _dst->video_meta->genre = g_strdup(_src->video_meta->genre);
1200                                 if (_dst->video_meta->genre == NULL) {
1201                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1202                                         media_info_destroy((media_info_h)_dst);
1203                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1204                                 }
1205                         }
1206                         if (_src->video_meta->composer != NULL) {
1207                                 _dst->video_meta->composer = g_strdup(_src->video_meta->composer);
1208                                 if (_dst->video_meta->composer == NULL) {
1209                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1210                                         media_info_destroy((media_info_h)_dst);
1211                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1212                                 }
1213                         }
1214                         if (_src->video_meta->year != NULL) {
1215                                 _dst->video_meta->year = g_strdup(_src->video_meta->year);
1216                                 if (_dst->video_meta->year == NULL) {
1217                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1218                                         media_info_destroy((media_info_h)_dst);
1219                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1220                                 }
1221                         }
1222                         if (_src->video_meta->recorded_date != NULL) {
1223                                 _dst->video_meta->recorded_date = g_strdup(_src->video_meta->recorded_date);
1224                                 if (_dst->video_meta->recorded_date == NULL) {
1225                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1226                                         media_info_destroy((media_info_h)_dst);
1227                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1228                                 }
1229                         }
1230                         if (_src->video_meta->copyright != NULL) {
1231                                 _dst->video_meta->copyright = g_strdup(_src->video_meta->copyright);
1232                                 if (_dst->video_meta->copyright == NULL) {
1233                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1234                                         media_info_destroy((media_info_h)_dst);
1235                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1236                                 }
1237                         }
1238                         if (_src->video_meta->track_num != NULL) {
1239                                 _dst->video_meta->track_num = g_strdup(_src->video_meta->track_num);
1240                                 if (_dst->video_meta->track_num == NULL) {
1241                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1242                                         media_info_destroy((media_info_h)_dst);
1243                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1244                                 }
1245                         }
1246
1247                         _dst->video_meta->width = _src->video_meta->width;
1248                         _dst->video_meta->height = _src->video_meta->height;
1249                         _dst->video_meta->duration = _src->video_meta->duration;
1250                         _dst->video_meta->bitrate = _src->video_meta->bitrate;
1251                         _dst->video_meta->played_count = _src->video_meta->played_count;
1252                         _dst->video_meta->played_time = _src->video_meta->played_time;
1253                         _dst->video_meta->played_position = _src->video_meta->played_position;
1254
1255                 } else if ((_src->media_type == MEDIA_CONTENT_TYPE_MUSIC || _src->media_type == MEDIA_CONTENT_TYPE_SOUND) && _src->audio_meta) {
1256                         _dst->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
1257                         if (_dst->audio_meta == NULL) {
1258                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1259                                 media_info_destroy((media_info_h)_dst);
1260                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1261                         }
1262
1263                         if (_src->audio_meta->media_id != NULL) {
1264                                 _dst->audio_meta->media_id = g_strdup(_src->audio_meta->media_id);
1265                                 if (_dst->audio_meta->media_id == NULL) {
1266                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1267                                         media_info_destroy((media_info_h)_dst);
1268                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1269                                 }
1270                         }
1271                         if (_src->audio_meta->title != NULL) {
1272                                 _dst->audio_meta->title = g_strdup(_src->audio_meta->title);
1273                                 if (_dst->audio_meta->title == NULL) {
1274                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1275                                         media_info_destroy((media_info_h)_dst);
1276                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1277                                 }
1278                         }
1279                         if (_src->audio_meta->album != NULL) {
1280                                 _dst->audio_meta->album = g_strdup(_src->audio_meta->album);
1281                                 if (_dst->audio_meta->album == NULL) {
1282                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1283                                         media_info_destroy((media_info_h)_dst);
1284                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1285                                 }
1286                         }
1287                         if (_src->audio_meta->artist != NULL) {
1288                                 _dst->audio_meta->artist = g_strdup(_src->audio_meta->artist);
1289                                 if (_dst->audio_meta->artist == NULL) {
1290                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1291                                         media_info_destroy((media_info_h)_dst);
1292                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1293                                 }
1294                         }
1295                         if (_src->audio_meta->album_artist != NULL) {
1296                                 _dst->audio_meta->album_artist = g_strdup(_src->audio_meta->album_artist);
1297                                 if (_dst->audio_meta->album_artist == NULL) {
1298                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1299                                         media_info_destroy((media_info_h)_dst);
1300                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1301                                 }
1302                         }
1303                         if (_src->audio_meta->genre != NULL) {
1304                                 _dst->audio_meta->genre = g_strdup(_src->audio_meta->genre);
1305                                 if (_dst->audio_meta->genre == NULL) {
1306                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1307                                         media_info_destroy((media_info_h)_dst);
1308                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1309                                 }
1310                         }
1311                         if (_src->audio_meta->composer != NULL) {
1312                                 _dst->audio_meta->composer = g_strdup(_src->audio_meta->composer);
1313                                 if (_dst->audio_meta->composer == NULL) {
1314                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1315                                         media_info_destroy((media_info_h)_dst);
1316                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1317                                 }
1318                         }
1319                         if (_src->audio_meta->year != NULL) {
1320                                 _dst->audio_meta->year = g_strdup(_src->audio_meta->year);
1321                                 if (_dst->audio_meta->year == NULL) {
1322                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1323                                         media_info_destroy((media_info_h)_dst);
1324                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1325                                 }
1326                         }
1327                         if (_src->audio_meta->recorded_date != NULL) {
1328                                 _dst->audio_meta->recorded_date = g_strdup(_src->audio_meta->recorded_date);
1329                                 if (_dst->audio_meta->recorded_date == NULL) {
1330                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1331                                         media_info_destroy((media_info_h)_dst);
1332                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1333                                 }
1334                         }
1335                         if (_src->audio_meta->copyright != NULL) {
1336                                 _dst->audio_meta->copyright = g_strdup(_src->audio_meta->copyright);
1337                                 if (_dst->audio_meta->copyright == NULL) {
1338                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1339                                         media_info_destroy((media_info_h)_dst);
1340                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1341                                 }
1342                         }
1343                         if (_src->audio_meta->track_num != NULL) {
1344                                 _dst->audio_meta->track_num = g_strdup(_src->audio_meta->track_num);
1345                                 if (_dst->audio_meta->track_num == NULL) {
1346                                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1347                                         media_info_destroy((media_info_h)_dst);
1348                                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1349                                 }
1350                         }
1351
1352                         _dst->audio_meta->channel = _src->audio_meta->channel;
1353                         _dst->audio_meta->samplerate = _src->audio_meta->samplerate;
1354                         _dst->audio_meta->duration = _src->audio_meta->duration;
1355                         _dst->audio_meta->bitrate = _src->audio_meta->bitrate;
1356                         _dst->audio_meta->bitpersample = _src->audio_meta->bitpersample;
1357                         _dst->audio_meta->played_count = _src->audio_meta->played_count;
1358                         _dst->audio_meta->played_time = _src->audio_meta->played_time;
1359                         _dst->audio_meta->played_position = _src->audio_meta->played_position;
1360                 }
1361                 *dst = (media_info_h)_dst;
1362
1363                 ret = MEDIA_CONTENT_ERROR_NONE;
1364         } else {
1365                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1366                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1367         }
1368
1369         return ret;
1370 }
1371
1372 int media_info_get_media_count_from_db(filter_h filter, int *media_count)
1373 {
1374         int ret = MEDIA_CONTENT_ERROR_NONE;
1375
1376         if (media_count == NULL) {
1377                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1378                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1379
1380                 return ret;
1381         }
1382
1383         ret = _media_db_get_group_item_count(NULL, filter, MEDIA_GROUP_NONE, media_count);
1384
1385         return ret;
1386 }
1387
1388 int media_info_foreach_media_from_db(filter_h filter, media_info_cb callback, void *user_data)
1389 {
1390         int ret = MEDIA_CONTENT_ERROR_NONE;
1391
1392         media_content_retvm_if(callback == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid callback");
1393
1394         ret = _media_db_get_group_item(NULL, filter, callback, user_data, MEDIA_GROUP_NONE);
1395
1396         return ret;
1397 }
1398
1399 int media_info_get_tag_count_from_db(const char *media_id, filter_h filter, int *tag_count)
1400 {
1401         int ret = MEDIA_CONTENT_ERROR_NONE;
1402
1403         if (STRING_VALID(media_id) && tag_count) {
1404                 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_TAG_BY_MEDIA_ID, tag_count);
1405         } else {
1406                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1407                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1408         }
1409
1410         return ret;
1411 }
1412
1413 int media_info_foreach_tag_from_db(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
1414 {
1415         int ret = MEDIA_CONTENT_ERROR_NONE;
1416
1417         if ((callback != NULL) && STRING_VALID(media_id)) {
1418                 ret = _media_db_get_tag(media_id, filter, callback, user_data);
1419         } else {
1420                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1421                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1422         }
1423
1424         return ret;
1425 }
1426
1427 int media_info_get_bookmark_count_from_db(const char *media_id, filter_h filter, int *bookmark_count)
1428 {
1429         int ret = MEDIA_CONTENT_ERROR_NONE;
1430
1431         if (STRING_VALID(media_id) && bookmark_count) {
1432                 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID, bookmark_count);
1433         } else {
1434                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1435                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1436         }
1437
1438         return ret;
1439 }
1440
1441 int media_info_foreach_bookmark_from_db(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
1442 {
1443         int ret = MEDIA_CONTENT_ERROR_NONE;
1444
1445         if ((callback != NULL) && STRING_VALID(media_id)) {
1446                 ret = _media_db_get_bookmark(media_id, filter, callback, user_data);
1447         } else {
1448                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1449                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1450         }
1451
1452         return ret;
1453 }
1454
1455 int media_info_get_face_count_from_db(const char *media_id, filter_h filter, int *face_count)
1456 {
1457         int ret = MEDIA_CONTENT_ERROR_NONE;
1458
1459         if (STRING_VALID(media_id) && face_count) {
1460                 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_FACE_BY_MEDIA_ID, face_count);
1461         } else {
1462                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1463                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1464         }
1465
1466         return ret;
1467 }
1468
1469 int media_info_foreach_face_from_db(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
1470 {
1471         int ret = MEDIA_CONTENT_ERROR_NONE;
1472
1473         if ((callback != NULL) && STRING_VALID(media_id)) {
1474                 ret = _media_db_get_face(media_id, filter, callback, user_data);
1475         } else {
1476                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1477                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1478         }
1479
1480         return ret;
1481 }
1482
1483 int media_info_get_image(media_info_h media, image_meta_h *image)
1484 {
1485         int ret = MEDIA_CONTENT_ERROR_NONE;
1486
1487         media_info_s *_media = (media_info_s*)media;
1488
1489         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
1490         media_content_retvm_if(_media->media_type != MEDIA_CONTENT_TYPE_IMAGE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_type");
1491         media_content_retvm_if(_media->image_meta == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid image_meta");
1492
1493         image_meta_s *_image = (image_meta_s*)calloc(1, sizeof(image_meta_s));
1494         media_content_retvm_if(_image == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1495
1496         _image->media_id = g_strdup(_media->media_id);
1497         _image->width = _media->image_meta->width;
1498         _image->height = _media->image_meta->height;
1499         _image->orientation = _media->image_meta->orientation;
1500         _image->fnumber = _media->image_meta->fnumber;
1501         _image->iso = _media->image_meta->iso;
1502         _image->date_taken = g_strdup(_media->image_meta->date_taken);
1503         _image->title = g_strdup(_media->image_meta->title);
1504         _image->burst_id = g_strdup(_media->image_meta->burst_id);
1505         _image->weather = g_strdup(_media->image_meta->weather);
1506         _image->exposure_time = g_strdup(_media->image_meta->exposure_time);
1507         _image->model = g_strdup(_media->image_meta->model);
1508
1509         *image = (image_meta_h)_image;
1510
1511         return ret;
1512 }
1513
1514 int media_info_get_video(media_info_h media, video_meta_h *video)
1515 {
1516         int ret = MEDIA_CONTENT_ERROR_NONE;
1517
1518         media_info_s *_media = (media_info_s*)media;
1519
1520         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
1521         media_content_retvm_if(_media->media_type != MEDIA_CONTENT_TYPE_VIDEO, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_type");
1522         media_content_retvm_if(_media->video_meta == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid video_meta");
1523
1524         video_meta_s *_video = (video_meta_s*)calloc(1, sizeof(video_meta_s));
1525         media_content_retvm_if(_video == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1526
1527         _video->media_id = g_strdup(_media->media_id);
1528         _video->title = g_strdup(_media->video_meta->title);
1529         _video->album = g_strdup(_media->video_meta->album);
1530         _video->artist = g_strdup(_media->video_meta->artist);
1531         _video->album_artist = g_strdup(_media->video_meta->album_artist);
1532         _video->genre = g_strdup(_media->video_meta->genre);
1533         _video->composer = g_strdup(_media->video_meta->composer);
1534         _video->year = g_strdup(_media->video_meta->year);
1535         _video->recorded_date = g_strdup(_media->video_meta->recorded_date);
1536         _video->copyright = g_strdup(_media->video_meta->copyright);
1537         _video->track_num = g_strdup(_media->video_meta->track_num);
1538
1539         _video->width = _media->video_meta->width;
1540         _video->height = _media->video_meta->height;
1541         _video->duration = _media->video_meta->duration;
1542         _video->bitrate = _media->video_meta->bitrate;
1543         _video->played_count = _media->video_meta->played_count;
1544         _video->played_time = _media->video_meta->played_time;
1545         _video->played_position = _media->video_meta->played_position;
1546
1547         *video = (video_meta_h)_video;
1548
1549         return ret;
1550 }
1551
1552 int media_info_get_audio(media_info_h media, audio_meta_h *audio)
1553 {
1554         int ret = MEDIA_CONTENT_ERROR_NONE;
1555
1556         media_info_s *_media = (media_info_s*)media;
1557
1558         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
1559         media_content_retvm_if(_media->media_type != MEDIA_CONTENT_TYPE_MUSIC && _media->media_type != MEDIA_CONTENT_TYPE_SOUND, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media_type");
1560         media_content_retvm_if(_media->audio_meta == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid audio_meta");
1561
1562         audio_meta_s *_audio = (audio_meta_s*)calloc(1, sizeof(audio_meta_s));
1563         media_content_retvm_if(_audio == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1564
1565         _audio->media_id = g_strdup(_media->media_id);
1566         _audio->title = g_strdup(_media->audio_meta->title);
1567         _audio->album = g_strdup(_media->audio_meta->album);
1568         _audio->artist = g_strdup(_media->audio_meta->artist);
1569         _audio->album_artist = g_strdup(_media->audio_meta->album_artist);
1570         _audio->genre = g_strdup(_media->audio_meta->genre);
1571         _audio->composer = g_strdup(_media->audio_meta->composer);
1572         _audio->year = g_strdup(_media->audio_meta->year);
1573         _audio->recorded_date = g_strdup(_media->audio_meta->recorded_date);
1574         _audio->copyright = g_strdup(_media->audio_meta->copyright);
1575         _audio->track_num = g_strdup(_media->audio_meta->track_num);
1576
1577         _audio->duration = _media->audio_meta->duration;
1578         _audio->bitrate = _media->audio_meta->bitrate;
1579         _audio->bitpersample = _media->audio_meta->bitpersample;
1580         _audio->samplerate = _media->audio_meta->samplerate;
1581         _audio->channel = _media->audio_meta->channel;
1582         _audio->played_time = _media->audio_meta->played_time;
1583         _audio->played_count = _media->audio_meta->played_count;
1584         _audio->played_position = _media->audio_meta->played_position;
1585
1586         *audio = (audio_meta_h)_audio;
1587
1588         return ret;
1589 }
1590
1591 int media_info_get_media_id(media_info_h media, char **media_id)
1592 {
1593         int ret = MEDIA_CONTENT_ERROR_NONE;
1594         media_info_s *_media = (media_info_s*)media;
1595
1596         if (_media && media_id) {
1597                 if (STRING_VALID(_media->media_id)) {
1598                         *media_id = strdup(_media->media_id);
1599                         media_content_retvm_if(*media_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1600                 } else {
1601                         *media_id = NULL;
1602                 }
1603                 ret = MEDIA_CONTENT_ERROR_NONE;
1604         } else {
1605                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1606                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1607         }
1608
1609         return ret;
1610 }
1611
1612 int media_info_get_file_path(media_info_h media, char **path)
1613 {
1614         int ret = MEDIA_CONTENT_ERROR_NONE;
1615         media_info_s *_media = (media_info_s*)media;
1616
1617         if (_media && path) {
1618                 if (STRING_VALID(_media->file_path)) {
1619                         *path = strdup(_media->file_path);
1620                         media_content_retvm_if(*path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1621                 } else {
1622                         *path = NULL;
1623                 }
1624                 ret = MEDIA_CONTENT_ERROR_NONE;
1625
1626         } else {
1627                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1628                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1629         }
1630
1631         return ret;
1632 }
1633
1634 int media_info_get_display_name(media_info_h media, char **name)
1635 {
1636         int ret = MEDIA_CONTENT_ERROR_NONE;
1637         media_info_s *_media = (media_info_s*)media;
1638         if (_media && name) {
1639                 if (_media->display_name != NULL) {
1640                         *name = g_strdup(_media->display_name);
1641                         media_content_retvm_if(*name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1642                 } else {
1643                         *name = NULL;
1644                 }
1645                 ret = MEDIA_CONTENT_ERROR_NONE;
1646
1647         } else {
1648                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1649                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1650         }
1651
1652         return ret;
1653 }
1654
1655 int media_info_get_media_type(media_info_h media, media_content_type_e *type)
1656 {
1657         int ret = MEDIA_CONTENT_ERROR_NONE;
1658         media_info_s *_media = (media_info_s*)media;
1659         if (_media && type) {
1660                 *type = _media->media_type;
1661                 ret = MEDIA_CONTENT_ERROR_NONE;
1662         } else {
1663                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1664                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1665         }
1666
1667         return ret;
1668 }
1669
1670 int media_info_get_mime_type(media_info_h media, char **mime_type)
1671 {
1672         int ret = MEDIA_CONTENT_ERROR_NONE;
1673         media_info_s *_media = (media_info_s*)media;
1674
1675         if (_media && mime_type) {
1676                 if (STRING_VALID(_media->mime_type)) {
1677                         *mime_type = strdup(_media->mime_type);
1678                         media_content_retvm_if(*mime_type == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1679                 } else {
1680                         *mime_type = NULL;
1681                 }
1682                 ret = MEDIA_CONTENT_ERROR_NONE;
1683         } else {
1684                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1685                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1686         }
1687
1688         return ret;
1689 }
1690
1691 int media_info_get_size(media_info_h media, unsigned long long *size)
1692 {
1693         int ret = MEDIA_CONTENT_ERROR_NONE;
1694         media_info_s *_media = (media_info_s*)media;
1695
1696         if (_media && size) {
1697                 *size = _media->size;
1698                 ret = MEDIA_CONTENT_ERROR_NONE;
1699         } else {
1700                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1701                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1702         }
1703
1704         return ret;
1705 }
1706
1707 int media_info_get_added_time(media_info_h media, time_t *added_time)
1708 {
1709         int ret = MEDIA_CONTENT_ERROR_NONE;
1710         media_info_s *_media = (media_info_s*)media;
1711         if (_media && added_time) {
1712                 *added_time = _media->added_time;
1713                 ret = MEDIA_CONTENT_ERROR_NONE;
1714         } else {
1715                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1716                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1717         }
1718
1719         return ret;
1720 }
1721
1722 int media_info_get_modified_time(media_info_h media, time_t* time)
1723 {
1724         int ret = MEDIA_CONTENT_ERROR_NONE;
1725         media_info_s *_media = (media_info_s*)media;
1726         if (_media && time) {
1727                 *time = _media->modified_time;
1728                 ret = MEDIA_CONTENT_ERROR_NONE;
1729         } else {
1730                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1731                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1732         }
1733
1734         return ret;
1735 }
1736
1737 int media_info_get_timeline(media_info_h media, time_t* time)
1738 {
1739         int ret = MEDIA_CONTENT_ERROR_NONE;
1740         media_info_s *_media = (media_info_s*)media;
1741         if (_media && time) {
1742                 *time = _media->timeline;
1743                 ret = MEDIA_CONTENT_ERROR_NONE;
1744         } else {
1745                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1746                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1747         }
1748
1749         return ret;
1750 }
1751
1752 int media_info_get_thumbnail_path(media_info_h media, char **path)
1753 {
1754         int ret = MEDIA_CONTENT_ERROR_NONE;
1755         media_info_s *_media = (media_info_s*)media;
1756         if (_media && path) {
1757                 if (_media->thumbnail_path != NULL) {
1758                         *path = g_strdup(_media->thumbnail_path);
1759                         media_content_retvm_if(*path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1760                 } else {
1761                         *path = NULL;
1762                 }
1763                 ret = MEDIA_CONTENT_ERROR_NONE;
1764
1765         } else {
1766                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1767                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1768         }
1769
1770         return ret;
1771 }
1772
1773 int media_info_get_title(media_info_h media, char **title)
1774 {
1775         int ret = MEDIA_CONTENT_ERROR_NONE;
1776         media_info_s *_media = (media_info_s*)media;
1777
1778         if (_media && title)    { /*title can be empty string*/
1779                 if (_media->title != NULL) {
1780                         *title = g_strdup(_media->title);
1781                         media_content_retvm_if(*title == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1782                 } else {
1783                         *title = NULL;
1784                 }
1785                 ret = MEDIA_CONTENT_ERROR_NONE;
1786         } else {
1787                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1788                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1789         }
1790
1791         return ret;
1792 }
1793 #ifdef _USE_TV_PROFILE
1794 int media_info_get_extract_flag(media_info_h media, int *extract_flag)
1795 {
1796         int ret = MEDIA_CONTENT_ERROR_NONE;
1797         media_info_s *_media = (media_info_s *)media;
1798
1799         if (_media && extract_flag) {
1800                 *extract_flag = _media->extract_flag;
1801                 ret = MEDIA_CONTENT_ERROR_NONE;
1802         } else {
1803                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1804                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1805         }
1806
1807         return ret;
1808 }
1809 #endif
1810
1811 int media_info_get_description(media_info_h media, char **description)
1812 {
1813         int ret = MEDIA_CONTENT_ERROR_NONE;
1814         media_info_s *_media = (media_info_s*)media;
1815
1816         if (_media && description) {
1817                 if (_media->description != NULL) {      /*description can be empty string*/
1818                         *description = g_strdup(_media->description);
1819                         media_content_retvm_if(*description == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1820                 } else {
1821                         *description = NULL;
1822                 }
1823                 ret = MEDIA_CONTENT_ERROR_NONE;
1824         } else {
1825                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1826                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1827         }
1828
1829         return ret;
1830 }
1831
1832 int media_info_get_longitude(media_info_h media, double* longitude)
1833 {
1834         int ret = MEDIA_CONTENT_ERROR_NONE;
1835         media_info_s *_media = (media_info_s*)media;
1836
1837         if (_media && longitude) {
1838                 *longitude = _media->longitude;
1839                 ret = MEDIA_CONTENT_ERROR_NONE;
1840         } else {
1841                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1842                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1843         }
1844
1845         return ret;
1846 }
1847 int media_info_get_latitude(media_info_h media, double* latitude)
1848 {
1849         int ret = MEDIA_CONTENT_ERROR_NONE;
1850         media_info_s *_media = (media_info_s*)media;
1851
1852         if (_media && latitude) {
1853                 *latitude = _media->latitude;
1854                 ret = MEDIA_CONTENT_ERROR_NONE;
1855         } else {
1856                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1857                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1858         }
1859
1860         return ret;
1861 }
1862
1863 int media_info_get_altitude(media_info_h media, double *altitude)
1864 {
1865         int ret = MEDIA_CONTENT_ERROR_NONE;
1866         media_info_s *_media = (media_info_s*)media;
1867
1868         if (_media && altitude) {
1869                 *altitude = _media->altitude;
1870                 ret = MEDIA_CONTENT_ERROR_NONE;
1871         } else {
1872                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1873                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1874         }
1875
1876         return ret;
1877 }
1878
1879 int media_info_get_weather(media_info_h media, char **weather)
1880 {
1881         int ret = MEDIA_CONTENT_ERROR_NONE;
1882         media_info_s *_media = (media_info_s*)media;
1883
1884         if (_media && weather) {
1885                 if (_media->weather != NULL) {
1886                         *weather = strdup(_media->weather);
1887                         media_content_retvm_if(*weather == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1888                 } else {
1889                         *weather = NULL;
1890                 }
1891                 ret = MEDIA_CONTENT_ERROR_NONE;
1892         } else {
1893                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1894                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1895         }
1896
1897         return ret;
1898 }
1899
1900 int media_info_get_rating(media_info_h media, int *rating)
1901 {
1902         int ret = MEDIA_CONTENT_ERROR_NONE;
1903         media_info_s *_media = (media_info_s*)media;
1904
1905         if (_media && rating) {
1906                 *rating = _media->rating;
1907                 ret = MEDIA_CONTENT_ERROR_NONE;
1908         } else {
1909                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1910                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1911         }
1912
1913         return ret;
1914 }
1915
1916 int media_info_get_favorite(media_info_h media, bool* favorite)
1917 {
1918         int ret = MEDIA_CONTENT_ERROR_NONE;
1919         media_info_s *_media = (media_info_s*)media;
1920
1921         if (_media && favorite) {
1922                 *favorite = _media->favourite;
1923                 ret = MEDIA_CONTENT_ERROR_NONE;
1924         } else {
1925                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1926                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1927         }
1928
1929         return ret;
1930 }
1931
1932 int media_info_get_author(media_info_h media, char **author)
1933 {
1934         int ret = MEDIA_CONTENT_ERROR_NONE;
1935         media_info_s *_media = (media_info_s*)media;
1936
1937         if (_media && author) {
1938                 if (_media->author != NULL) {
1939                         *author = strdup(_media->author);
1940                         media_content_retvm_if(*author == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1941                 } else {
1942                         *author = NULL;
1943                 }
1944                 ret = MEDIA_CONTENT_ERROR_NONE;
1945         } else {
1946                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1947                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1948         }
1949
1950         return ret;
1951 }
1952
1953 int media_info_get_provider(media_info_h media, char **provider)
1954 {
1955         int ret = MEDIA_CONTENT_ERROR_NONE;
1956         media_info_s *_media = (media_info_s*)media;
1957
1958         if (_media && provider) {
1959                 if (_media->provider != NULL) {
1960                         *provider = strdup(_media->provider);
1961                         media_content_retvm_if(*provider == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1962                 } else {
1963                         *provider = NULL;
1964                 }
1965                 ret = MEDIA_CONTENT_ERROR_NONE;
1966         } else {
1967                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1968                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1969         }
1970
1971         return ret;
1972 }
1973
1974 int media_info_get_content_name(media_info_h media, char **content_name)
1975 {
1976         int ret = MEDIA_CONTENT_ERROR_NONE;
1977         media_info_s *_media = (media_info_s*)media;
1978
1979         if (_media && content_name) {
1980                 if (_media->content_name != NULL) {
1981                         *content_name = strdup(_media->content_name);
1982                         media_content_retvm_if(*content_name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
1983                 } else {
1984                         *content_name = NULL;
1985                 }
1986                 ret = MEDIA_CONTENT_ERROR_NONE;
1987         } else {
1988                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1989                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1990         }
1991
1992         return ret;
1993 }
1994
1995 int media_info_get_category(media_info_h media, char **category)
1996 {
1997         int ret = MEDIA_CONTENT_ERROR_NONE;
1998         media_info_s *_media = (media_info_s*)media;
1999
2000         if (_media && category) {
2001                 if (_media->category != NULL) {
2002                         *category = strdup(_media->category);
2003                         media_content_retvm_if(*category == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2004                 } else {
2005                         *category = NULL;
2006                 }
2007                 ret = MEDIA_CONTENT_ERROR_NONE;
2008         } else {
2009                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2010                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2011         }
2012
2013         return ret;
2014 }
2015
2016 int media_info_get_location_tag(media_info_h media, char **location_tag)
2017 {
2018         int ret = MEDIA_CONTENT_ERROR_NONE;
2019         media_info_s *_media = (media_info_s*)media;
2020
2021         if (_media && location_tag) {
2022                 if (_media->location_tag != NULL) {
2023                         *location_tag = strdup(_media->location_tag);
2024                         media_content_retvm_if(*location_tag == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2025                 } else {
2026                         *location_tag = NULL;
2027                 }
2028                 ret = MEDIA_CONTENT_ERROR_NONE;
2029         } else {
2030                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2031                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2032         }
2033
2034         return ret;
2035 }
2036
2037 int media_info_get_age_rating(media_info_h media, char **age_rating)
2038 {
2039         int ret = MEDIA_CONTENT_ERROR_NONE;
2040         media_info_s *_media = (media_info_s*)media;
2041
2042         if (_media && age_rating) {
2043                 if (_media->age_rating != NULL) {
2044                         *age_rating = strdup(_media->age_rating);
2045                         media_content_retvm_if(*age_rating == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2046                 } else {
2047                         *age_rating = NULL;
2048                 }
2049                 ret = MEDIA_CONTENT_ERROR_NONE;
2050         } else {
2051                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2052                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2053         }
2054
2055         return ret;
2056 }
2057
2058 int media_info_get_keyword(media_info_h media, char **keyword)
2059 {
2060         int ret = MEDIA_CONTENT_ERROR_NONE;
2061         media_info_s *_media = (media_info_s*)media;
2062
2063         if (_media && keyword) {
2064                 if (_media->keyword != NULL) {
2065                         *keyword = strdup(_media->keyword);
2066                         media_content_retvm_if(*keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2067                 } else {
2068                         *keyword = NULL;
2069                 }
2070                 ret = MEDIA_CONTENT_ERROR_NONE;
2071         } else {
2072                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2073                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2074         }
2075
2076         return ret;
2077 }
2078
2079 int media_info_get_storage_id(media_info_h media, char **storage_id)
2080 {
2081         int ret = MEDIA_CONTENT_ERROR_NONE;
2082         media_info_s *_media = (media_info_s*)media;
2083
2084         if (_media && storage_id) {
2085                 if (STRING_VALID(_media->storage_uuid)) {
2086                         *storage_id = strdup(_media->storage_uuid);
2087                         media_content_retvm_if(*storage_id == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2088                 } else {
2089                         *storage_id = NULL;
2090                         ret = MEDIA_CONTENT_ERROR_DB_FAILED;
2091                 }
2092                 ret = MEDIA_CONTENT_ERROR_NONE;
2093         } else {
2094                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2095                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2096         }
2097
2098         return ret;
2099 }
2100
2101 int media_info_is_drm(media_info_h media, bool *is_drm)
2102 {
2103         int ret = MEDIA_CONTENT_ERROR_NONE;
2104         media_info_s *_media = (media_info_s*)media;
2105
2106         if (_media) {
2107                 *is_drm = _media->is_drm;
2108                 ret = MEDIA_CONTENT_ERROR_NONE;
2109         } else {
2110                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2111                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2112         }
2113
2114         return ret;
2115 }
2116
2117 int media_info_is_360_content(media_info_h media, bool *is_360)
2118 {
2119         int ret = MEDIA_CONTENT_ERROR_NONE;
2120         media_info_s *_media = (media_info_s*)media;
2121
2122         if (_media) {
2123                 *is_360 = _media->is_360;
2124                 ret = MEDIA_CONTENT_ERROR_NONE;
2125         } else {
2126                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2127                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2128         }
2129
2130         return ret;
2131 }
2132
2133 int media_info_get_storage_type(media_info_h media, media_content_storage_e *storage_type)
2134 {
2135         int ret = MEDIA_CONTENT_ERROR_NONE;
2136         media_info_s *_media = (media_info_s*)media;
2137
2138         if (_media && storage_type) {
2139                 *storage_type = _media->storage_type;
2140                 ret = MEDIA_CONTENT_ERROR_NONE;
2141         } else {
2142                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2143                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2144         }
2145
2146         return ret;
2147 }
2148
2149 #ifdef _USE_TV_PROFILE
2150 int media_info_get_played_position(media_info_h media, int *played_position)
2151 {
2152         int ret = MEDIA_CONTENT_ERROR_NONE;
2153         media_info_s *_media = (media_info_s*)media;
2154
2155         if (_media) {
2156                 *played_position = _media->played_position;
2157                 ret = MEDIA_CONTENT_ERROR_NONE;
2158         } else {
2159                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2160                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2161         }
2162
2163         return ret;
2164 }
2165 #endif
2166
2167 int media_info_get_played_count(media_info_h media, int *played_count)
2168 {
2169         int ret = MEDIA_CONTENT_ERROR_NONE;
2170         media_info_s *_media = (media_info_s*)media;
2171
2172         if (_media) {
2173                 *played_count = _media->played_count;
2174                 ret = MEDIA_CONTENT_ERROR_NONE;
2175         } else {
2176                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2177                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2178         }
2179
2180         return ret;
2181 }
2182
2183 int media_info_get_played_time(media_info_h media, time_t* played_time)
2184 {
2185         int ret = MEDIA_CONTENT_ERROR_NONE;
2186         media_info_s *_media = (media_info_s*)media;
2187
2188         if (_media) {
2189                 *played_time = _media->played_time;
2190                 ret = MEDIA_CONTENT_ERROR_NONE;
2191         } else {
2192                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2193                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2194         }
2195
2196         return ret;
2197 }
2198
2199 int media_info_increase_played_count(media_info_h media)
2200 {
2201         int ret = MEDIA_CONTENT_ERROR_NONE;
2202
2203         media_info_s *_media = (media_info_s*)media;
2204
2205         if (_media) {
2206                 _media->played_count += 1;
2207         } else {
2208                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2209                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2210         }
2211
2212         return ret;
2213 }
2214
2215 #ifdef _USE_TV_PROFILE
2216 int media_info_get_modified_month(media_info_h media, char **modified_month)
2217 {
2218         int ret = MEDIA_CONTENT_ERROR_NONE;
2219         media_info_s *_media = (media_info_s*)media;
2220
2221         if (_media && modified_month) {
2222                 if (STRING_VALID(_media->modified_month)) {
2223                         *modified_month = strdup(_media->modified_month);
2224                         if (*modified_month == NULL) {
2225                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2226                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2227                         }
2228                 } else {
2229                         *modified_month = NULL;
2230                 }
2231                 ret = MEDIA_CONTENT_ERROR_NONE;
2232         } else {
2233                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2234                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2235         }
2236
2237         return ret;
2238 }
2239 #endif
2240 #ifdef _USE_SENIOR_MODE
2241 int media_info_get_contact(media_info_h media, char **contact)
2242 {
2243         int ret = MEDIA_CONTENT_ERROR_NONE;
2244         media_info_s *_media = (media_info_s*)media;
2245
2246         if (_media && contact) {
2247                 if (STRING_VALID(_media->contact)) {
2248                         *contact = strdup(_media->contact);
2249                         if (*contact == NULL) {
2250                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2251                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2252                         }
2253                 } else {
2254                         *contact = NULL;
2255                 }
2256                 ret = MEDIA_CONTENT_ERROR_NONE;
2257         } else {
2258                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2259                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2260         }
2261
2262         return ret;
2263 }
2264
2265 int media_info_get_app_data(media_info_h media, char **app_data)
2266 {
2267         int ret = MEDIA_CONTENT_ERROR_NONE;
2268         media_info_s *_media = (media_info_s*)media;
2269
2270         if (_media && app_data) {
2271                 if (STRING_VALID(_media->app_data)) {
2272                         *app_data = strdup(_media->app_data);
2273                         if (*app_data == NULL) {
2274                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2275                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2276                         }
2277                 } else {
2278                         *app_data = NULL;
2279                 }
2280                 ret = MEDIA_CONTENT_ERROR_NONE;
2281         } else {
2282                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2283                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2284         }
2285
2286         return ret;
2287 }
2288 #endif
2289 #ifdef _USE_TV_PROFILE
2290 int media_info_set_played_count(media_info_h media, int played_count)
2291 {
2292         int ret = MEDIA_CONTENT_ERROR_NONE;
2293
2294         media_info_s *_media = (media_info_s*)media;
2295
2296         if (_media) {
2297                 _media->played_count = played_count;
2298         } else {
2299                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2300                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2301         }
2302
2303         return ret;
2304 }
2305 #endif
2306
2307 int media_info_set_played_time(media_info_h media)
2308 {
2309         int ret = MEDIA_CONTENT_ERROR_NONE;
2310         time_t current_time;
2311
2312         media_info_s *_media = (media_info_s*)media;
2313
2314         if (_media != NULL) {
2315                 time(&current_time);
2316                 _media->played_time = current_time;
2317         } else {
2318                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2319                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2320         }
2321
2322         return ret;
2323 }
2324 #ifdef _USE_TV_PROFILE
2325 int media_info_set_played_position(media_info_h media, int played_position)
2326 {
2327         int ret = MEDIA_CONTENT_ERROR_NONE;
2328         media_info_s *_media = (media_info_s*)media;
2329
2330         if ((_media != NULL) && (played_position >= 0)) {
2331                 _media->played_position = played_position;
2332         } else {
2333                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2334                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2335         }
2336
2337         return ret;
2338 }
2339 #endif
2340
2341 int media_info_get_media_from_db(const char *media_id, media_info_h *media)
2342 {
2343         int ret = MEDIA_CONTENT_ERROR_NONE;
2344         char select_query[DEFAULT_QUERY_SIZE];
2345         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
2346         sqlite3_stmt *stmt = NULL;
2347
2348         if (!STRING_VALID(media_id) || (media == NULL)) {
2349                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2350                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2351         }
2352
2353         memset(select_query, 0x00, sizeof(select_query));
2354         memset(storage_id, 0x00, sizeof(storage_id));
2355
2356         ret = _media_db_get_storage_id_by_media_id(media_id, storage_id);
2357         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2358
2359         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_MEDIA, storage_id, media_id);
2360
2361         ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
2362         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2363
2364         media_info_s *_media = NULL;
2365
2366         while (sqlite3_step(stmt) == SQLITE_ROW) {
2367                 if (_media)
2368                         media_info_destroy((media_info_h)_media);
2369
2370                 _media = (media_info_s*)calloc(1, sizeof(media_info_s));
2371
2372                 if (_media == NULL) {
2373                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2374                         SQLITE3_FINALIZE(stmt);
2375                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2376                 }
2377
2378                 _media_info_item_get_detail(stmt, (media_info_h)_media);
2379
2380                 *media = (media_info_h)_media;
2381         }
2382
2383         SQLITE3_FINALIZE(stmt);
2384
2385         return ret;
2386 }
2387
2388 int media_info_set_display_name(media_info_h media, const char *display_name)
2389 {
2390         int ret = MEDIA_CONTENT_ERROR_NONE;
2391         media_info_s *_media = (media_info_s*)media;
2392
2393         if (_media != NULL && STRING_VALID(display_name)) {
2394                 SAFE_FREE(_media->display_name);
2395
2396                 _media->display_name = strdup(display_name);
2397                 media_content_retvm_if(_media->display_name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2398         } else {
2399                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2400                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2401         }
2402
2403         return ret;
2404 }
2405
2406 int media_info_set_description(media_info_h media, const char *description)
2407 {
2408         int ret = MEDIA_CONTENT_ERROR_NONE;
2409         media_info_s *_media = (media_info_s*)media;
2410
2411         if (_media != NULL) {
2412                 SAFE_FREE(_media->description);
2413
2414                 if (STRING_VALID(description)) {
2415                         _media->description = strdup(description);
2416                         media_content_retvm_if(_media->description == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2417                 } else {
2418                         _media->description = NULL;
2419                 }
2420         } else {
2421                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2422                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2423         }
2424
2425         return ret;
2426 }
2427
2428 int media_info_set_longitude(media_info_h media, double longitude)
2429 {
2430         int ret = MEDIA_CONTENT_ERROR_NONE;
2431         media_info_s *_media = (media_info_s*)media;
2432
2433         if (_media != NULL) {
2434                 _media->longitude = longitude;
2435         } else {
2436                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2437                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2438         }
2439
2440         return ret;
2441 }
2442
2443 int media_info_set_latitude(media_info_h media, double latitude)
2444 {
2445         int ret = MEDIA_CONTENT_ERROR_NONE;
2446         media_info_s *_media = (media_info_s*)media;
2447
2448         if (_media != NULL) {
2449                 _media->latitude = latitude;
2450         } else {
2451                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2452                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2453         }
2454
2455         return ret;
2456 }
2457
2458 int media_info_set_altitude(media_info_h media, double altitude)
2459 {
2460         int ret = MEDIA_CONTENT_ERROR_NONE;
2461         media_info_s *_media = (media_info_s*)media;
2462
2463         if (_media != NULL) {
2464                 _media->altitude = altitude;
2465         } else {
2466                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2467                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2468         }
2469
2470         return ret;
2471 }
2472
2473 int media_info_set_weather(media_info_h media, const char *weather)
2474 {
2475         int ret = MEDIA_CONTENT_ERROR_NONE;
2476         media_info_s *_media = (media_info_s*)media;
2477
2478         if (_media != NULL) {
2479                 SAFE_FREE(_media->weather);
2480
2481                 if (STRING_VALID(weather)) {
2482                         _media->weather = strdup(weather);
2483                         media_content_retvm_if(_media->weather == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2484                 } else {
2485                         _media->weather = NULL;
2486                 }
2487         } else {
2488                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2489                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2490         }
2491
2492         return ret;
2493 }
2494
2495 int media_info_set_rating(media_info_h media, int rating)
2496 {
2497         int ret = MEDIA_CONTENT_ERROR_NONE;
2498         media_info_s *_media = (media_info_s*)media;
2499
2500         if (_media != NULL) {
2501                 _media->rating = rating;
2502         } else {
2503                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2504                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2505         }
2506
2507         return ret;
2508 }
2509
2510 int media_info_set_added_time(media_info_h media, time_t added_time)
2511 {
2512         int ret = MEDIA_CONTENT_ERROR_NONE;
2513
2514         media_info_s *_media = (media_info_s*)media;
2515
2516         if ((_media != NULL) && (added_time >= 0)) {
2517                 _media->added_time = added_time;
2518         } else {
2519                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2520                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2521         }
2522
2523         return ret;
2524 }
2525
2526 int media_info_set_favorite(media_info_h media, bool favorite)
2527 {
2528         int ret = MEDIA_CONTENT_ERROR_NONE;
2529         media_info_s *_media = (media_info_s*)media;
2530
2531         if (_media != NULL) {
2532                 if (favorite == TRUE)
2533                         time(&_media->favourite);
2534                 else
2535                         _media->favourite = 0;
2536         } else {
2537                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2538                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2539         }
2540
2541         return ret;
2542 }
2543
2544 int media_info_set_author(media_info_h media, const char *author)
2545 {
2546         int ret = MEDIA_CONTENT_ERROR_NONE;
2547         media_info_s *_media = (media_info_s*)media;
2548
2549         if (_media != NULL) {
2550                 if (STRING_VALID(author)) {
2551                         _media->author = strdup(author);
2552                         media_content_retvm_if(_media->author == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2553                 } else {
2554                         _media->author = NULL;
2555                 }
2556         } else {
2557                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2558                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2559         }
2560
2561         return ret;
2562 }
2563
2564 int media_info_set_provider(media_info_h media, const char *provider)
2565 {
2566         int ret = MEDIA_CONTENT_ERROR_NONE;
2567         media_info_s *_media = (media_info_s*)media;
2568
2569         if (_media != NULL) {
2570                 SAFE_FREE(_media->provider);
2571
2572                 if (STRING_VALID(provider)) {
2573                         _media->provider = strdup(provider);
2574                         media_content_retvm_if(_media->provider == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2575                 } else {
2576                         _media->provider = NULL;
2577                 }
2578         } else {
2579                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2580                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2581         }
2582
2583         return ret;
2584 }
2585
2586 int media_info_set_content_name(media_info_h media, const char *content_name)
2587 {
2588         int ret = MEDIA_CONTENT_ERROR_NONE;
2589         media_info_s *_media = (media_info_s*)media;
2590
2591         if (_media != NULL) {
2592                 SAFE_FREE(_media->content_name);
2593
2594                 if (STRING_VALID(content_name)) {
2595                         _media->content_name = strdup(content_name);
2596                         media_content_retvm_if(_media->content_name == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2597                 } else {
2598                         _media->content_name = NULL;
2599                 }
2600         } else {
2601                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2602                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2603         }
2604
2605         return ret;
2606 }
2607
2608 int media_info_set_category(media_info_h media, const char *category)
2609 {
2610         int ret = MEDIA_CONTENT_ERROR_NONE;
2611         media_info_s *_media = (media_info_s*)media;
2612
2613         if (_media != NULL) {
2614                 SAFE_FREE(_media->category);
2615
2616                 if (STRING_VALID(category)) {
2617                         _media->category = strdup(category);
2618                         media_content_retvm_if(_media->category == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2619                 } else {
2620                         _media->category = NULL;
2621                 }
2622         } else {
2623                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2624                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2625         }
2626
2627         return ret;
2628 }
2629
2630 int media_info_set_location_tag(media_info_h media, const char *location_tag)
2631 {
2632         int ret = MEDIA_CONTENT_ERROR_NONE;
2633         media_info_s *_media = (media_info_s*)media;
2634
2635         if (_media != NULL) {
2636                 SAFE_FREE(_media->location_tag);
2637
2638                 if (STRING_VALID(location_tag)) {
2639                         _media->location_tag = strdup(location_tag);
2640                         media_content_retvm_if(_media->location_tag == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2641                 } else {
2642                         _media->location_tag = NULL;
2643                 }
2644         } else {
2645                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2646                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2647         }
2648
2649         return ret;
2650 }
2651
2652 int media_info_set_age_rating(media_info_h media, const char *age_rating)
2653 {
2654         int ret = MEDIA_CONTENT_ERROR_NONE;
2655         media_info_s *_media = (media_info_s*)media;
2656
2657         if (_media != NULL) {
2658                 SAFE_FREE(_media->age_rating);
2659
2660                 if (STRING_VALID(age_rating)) {
2661                         _media->age_rating = strdup(age_rating);
2662                         media_content_retvm_if(_media->age_rating == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2663                 } else {
2664                         _media->age_rating = NULL;
2665                 }
2666         } else {
2667                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2668                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2669         }
2670
2671         return ret;
2672 }
2673
2674 int media_info_set_keyword(media_info_h media, const char *keyword)
2675 {
2676         int ret = MEDIA_CONTENT_ERROR_NONE;
2677         media_info_s *_media = (media_info_s*)media;
2678
2679         if (_media != NULL) {
2680                 SAFE_FREE(_media->keyword);
2681
2682                 if (STRING_VALID(keyword)) {
2683                         _media->keyword = strdup(keyword);
2684                         media_content_retvm_if(_media->keyword == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2685                 } else {
2686                         _media->keyword = NULL;
2687                 }
2688         } else {
2689                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2690                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2691         }
2692
2693         return ret;
2694 }
2695
2696 int media_info_update_to_db(media_info_h media)
2697 {
2698         int ret = MEDIA_CONTENT_ERROR_NONE;
2699         media_info_s *_media = (media_info_s*)media;
2700         char *set_sql = NULL;
2701         char *sql = NULL;
2702
2703         if (_media != NULL && STRING_VALID(_media->media_id)) {
2704                 /* This sql is due to sqlite3_mprintf's wrong operation when using floating point in the text format */
2705                 /* This code will be removed when sqlite3_mprintf works clearly */
2706                 char *test_sql = sqlite3_mprintf("%f, %f, %f", _media->longitude, _media->latitude, _media->altitude);
2707                 SQLITE3_SAFE_FREE(test_sql);
2708
2709                 /*Update Pinyin If Support Pinyin*/
2710                 char *file_name_pinyin = NULL;
2711                 char *description_pinyin = NULL;
2712                 char *author_pinyin = NULL;
2713                 char *provider_pinyin = NULL;
2714                 char *content_name_pinyin = NULL;
2715                 char *category_pinyin = NULL;
2716                 char *location_tag_pinyin = NULL;
2717                 char *age_rating_pinyin = NULL;
2718                 char *keyword_pinyin = NULL;
2719                 bool pinyin_support = FALSE;
2720
2721                 /*Update Pinyin If Support Pinyin*/
2722                 media_svc_check_pinyin_support(&pinyin_support);
2723                 if (pinyin_support) {
2724                         if (STRING_VALID(_media->display_name))
2725                                 media_svc_get_pinyin(_media->display_name, &file_name_pinyin);
2726                         if (STRING_VALID(_media->description))
2727                                 media_svc_get_pinyin(_media->description, &description_pinyin);
2728                         if (STRING_VALID(_media->author))
2729                                 media_svc_get_pinyin(_media->author, &author_pinyin);
2730                         if (STRING_VALID(_media->provider))
2731                                 media_svc_get_pinyin(_media->provider, &provider_pinyin);
2732                         if (STRING_VALID(_media->content_name))
2733                                 media_svc_get_pinyin(_media->content_name, &content_name_pinyin);
2734                         if (STRING_VALID(_media->category))
2735                                 media_svc_get_pinyin(_media->category, &category_pinyin);
2736                         if (STRING_VALID(_media->location_tag))
2737                                 media_svc_get_pinyin(_media->location_tag, &location_tag_pinyin);
2738                         if (STRING_VALID(_media->age_rating))
2739                                 media_svc_get_pinyin(_media->age_rating, &age_rating_pinyin);
2740                         if (STRING_VALID(_media->keyword))
2741                                 media_svc_get_pinyin(_media->keyword, &keyword_pinyin);
2742                 }
2743
2744                 char *album = NULL;
2745                 char *artist = NULL;
2746                 char *genre = NULL;
2747                 char *recorded_date = NULL;
2748
2749                 if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
2750                         if (_media->video_meta->album != NULL)
2751                                 album = strdup(_media->video_meta->album);
2752                         if (_media->video_meta->artist != NULL)
2753                                 artist = strdup(_media->video_meta->artist);
2754                         if (_media->video_meta->genre != NULL)
2755                                 genre = strdup(_media->video_meta->genre);
2756                         if (_media->video_meta->recorded_date != NULL)
2757                                 recorded_date = strdup(_media->video_meta->recorded_date);
2758                 } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
2759                         if (_media->audio_meta->album != NULL)
2760                                 album = strdup(_media->audio_meta->album);
2761                         if (_media->audio_meta->artist != NULL)
2762                                 artist = strdup(_media->audio_meta->artist);
2763                         if (_media->audio_meta->genre != NULL)
2764                                 genre = strdup(_media->audio_meta->genre);
2765                         if (_media->audio_meta->recorded_date != NULL)
2766                                 recorded_date = strdup(_media->audio_meta->recorded_date);
2767                 }
2768
2769 #ifdef _USE_SENIOR_MODE
2770                 if (_media_content_is_support_senior_mode()) {
2771                         set_sql = sqlite3_mprintf("file_name=%Q, added_time=%d, description=%Q, longitude=%f, latitude=%f, altitude=%f, \
2772                                 played_count=%d, last_played_time=%d, last_played_position=%d, \
2773                                 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, \
2774                                 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, title=%Q, contact=%Q, app_data=%Q",
2775                                 _media->display_name, _media->added_time, _media->description, _media->longitude, _media->latitude, _media->altitude, _media->played_count, _media->played_time, _media->played_position, _media->rating, _media->favourite,
2776                                 _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword, _media->weather, _media->sync_status,
2777                                 file_name_pinyin, description_pinyin, author_pinyin, provider_pinyin, content_name_pinyin, category_pinyin, location_tag_pinyin, age_rating_pinyin, keyword_pinyin, _media->title, _media->contact, _media->app_data);
2778                 } else
2779 #endif
2780                 {
2781                         set_sql = sqlite3_mprintf("file_name=%Q, added_time=%d, description=%Q, longitude=%f, latitude=%f, altitude=%f, \
2782                                 played_count=%d, last_played_time=%d, last_played_position=%d, \
2783                                 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, \
2784                                 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, title=%Q, \
2785                                 album=%Q, artist=%Q, genre=%Q, recorded_date=%Q",
2786                                 _media->display_name, _media->added_time, _media->description, _media->longitude, _media->latitude, _media->altitude, _media->played_count, _media->played_time, _media->played_position, _media->rating, _media->favourite,
2787                                 _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword, _media->weather, _media->sync_status,
2788                                 file_name_pinyin, description_pinyin, author_pinyin, provider_pinyin, content_name_pinyin, category_pinyin, location_tag_pinyin, age_rating_pinyin, keyword_pinyin, _media->title,
2789                                 album, artist, genre, recorded_date);
2790                 }
2791
2792                 sql = sqlite3_mprintf("UPDATE %Q SET %s WHERE media_uuid=%Q", _media->storage_uuid, set_sql, _media->media_id);
2793
2794                 ret = _content_query_sql(sql);
2795                 SQLITE3_SAFE_FREE(set_sql);
2796                 SQLITE3_SAFE_FREE(sql);
2797
2798                 SAFE_FREE(description_pinyin);
2799                 SAFE_FREE(author_pinyin);
2800                 SAFE_FREE(provider_pinyin);
2801                 SAFE_FREE(content_name_pinyin);
2802                 SAFE_FREE(category_pinyin);
2803                 SAFE_FREE(location_tag_pinyin);
2804                 SAFE_FREE(age_rating_pinyin);
2805                 SAFE_FREE(keyword_pinyin);
2806
2807                 SAFE_FREE(album);
2808                 SAFE_FREE(artist);
2809                 SAFE_FREE(genre);
2810                 SAFE_FREE(recorded_date);
2811
2812                 if (_media->storage_type == MEDIA_CONTENT_STORAGE_CLOUD) {
2813                         set_sql = NULL;
2814                         sql = NULL;
2815
2816                         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
2817                                 set_sql = sqlite3_mprintf("title=%Q, album=%Q, artist=%Q, genre=%Q, duration=%d, width=%d, height=%d", \
2818                                 _media->title, _media->video_meta->album, _media->video_meta->artist, _media->video_meta->genre, _media->video_meta->duration, _media->video_meta->width, _media->video_meta->height);
2819                         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
2820                                 set_sql = sqlite3_mprintf("title=%Q, album=%Q, artist=%Q, genre=%Q, duration=%d", \
2821                                 _media->title, _media->audio_meta->album, _media->audio_meta->artist, _media->audio_meta->genre, _media->audio_meta->duration);
2822                         } else if (_media->media_type == MEDIA_CONTENT_TYPE_IMAGE) {
2823                                 set_sql = sqlite3_mprintf("title=%Q, width=%d, height=%d", _media->title, _media->image_meta->width, _media->image_meta->height);
2824                         } else {
2825                                 set_sql = sqlite3_mprintf("title=%Q", _media->title);
2826                         }
2827
2828                         sql = sqlite3_mprintf("UPDATE %Q SET %s WHERE media_uuid=%Q", _media->storage_uuid, set_sql, _media->media_id);
2829
2830                         ret = _content_query_sql(sql);
2831
2832                         SQLITE3_SAFE_FREE(set_sql);
2833                         SQLITE3_SAFE_FREE(sql);
2834                 }
2835
2836                 if (ret == MEDIA_CONTENT_ERROR_NONE) {
2837                         /* Send notification for this update */
2838                         media_content_debug("Update is successfull. Send notification for this");
2839                         if (_media->file_path && _media->mime_type)
2840                                 media_svc_publish_noti(MS_MEDIA_ITEM_FILE, MS_MEDIA_ITEM_UPDATE, _media->file_path, _media->media_type, _media->media_id, _media->mime_type);
2841                         else
2842                                 media_content_error("Can't Send Noti : path or mime type is NULL");
2843                 }
2844         } else {
2845                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2846                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2847         }
2848
2849         return ret;
2850 }
2851
2852 int media_info_refresh_metadata_to_db(const char *media_id)
2853 {
2854         int ret = MEDIA_CONTENT_ERROR_NONE;
2855         media_info_h media = NULL;
2856         char *file_path = NULL;
2857         media_content_storage_e storage_type = 0;
2858         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
2859         char repl_path[MAX_QUERY_SIZE] = {0, };
2860
2861         if (!STRING_VALID(media_id)) {
2862                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2863                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2864         }
2865
2866         ret = media_info_get_media_from_db(media_id, &media);
2867         if (ret != MEDIA_CONTENT_ERROR_NONE) {
2868                 media_info_destroy(media);
2869                 return ret;
2870         }
2871
2872         ret = media_info_get_storage_type(media, &storage_type);
2873         if (ret != MEDIA_CONTENT_ERROR_NONE) {
2874                 media_info_destroy(media);
2875                 return ret;
2876         }
2877
2878         if (storage_type == MEDIA_CONTENT_STORAGE_CLOUD) {
2879                 media_info_destroy(media);
2880                 media_content_error("Can't refresh cloud content!!");
2881                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2882         }
2883
2884         ret = media_info_get_file_path(media, &file_path);
2885         if (ret != MEDIA_CONTENT_ERROR_NONE) {
2886                 media_info_destroy(media);
2887                 return ret;
2888         }
2889         memset(repl_path, 0, sizeof(repl_path));
2890         ret = _media_content_replace_path(file_path, repl_path);
2891
2892         ret = _media_util_check_file_exist(repl_path);
2893         if (ret != MEDIA_CONTENT_ERROR_NONE) {
2894                 SAFE_FREE(file_path);
2895                 media_info_destroy(media);
2896                 return ret;
2897         }
2898
2899         memset(storage_id, 0x00, sizeof(storage_id));
2900         ret = media_svc_get_storage_id(_content_get_db_handle(), repl_path, storage_id, tzplatform_getuid(TZ_USER_NAME));
2901         if (ret != MS_MEDIA_ERR_NONE) {
2902                 media_content_error("media_svc_get_storage_id failed : %d", ret);
2903                 SAFE_FREE(file_path);
2904                 media_info_destroy(media);
2905                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2906         }
2907
2908         ret = media_svc_refresh_item(_content_get_db_handle(), storage_id, storage_type, repl_path, tzplatform_getuid(TZ_USER_NAME));
2909         if (ret != MS_MEDIA_ERR_NONE)
2910                 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2911
2912         SAFE_FREE(file_path);
2913         media_info_destroy(media);
2914
2915         return ret;
2916 }
2917
2918 int media_info_move_to_db(media_info_h media, const char* dst_path)
2919 {
2920         int ret = MEDIA_CONTENT_ERROR_NONE;
2921         bool ignore_file = FALSE;
2922         bool ignore_dir = FALSE;
2923         char *folder_path = NULL;
2924         media_svc_storage_type_e src_storage_type = 0;
2925         media_svc_storage_type_e dst_storage_type = 0;
2926         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
2927         char repl_path[MAX_QUERY_SIZE] = {0, };
2928         char org_repl_path[MAX_QUERY_SIZE] = {0, };
2929
2930         media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid media");
2931         media_content_retvm_if(!STRING_VALID(dst_path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "invalid dst_path");
2932         memset(repl_path, 0, sizeof(repl_path));
2933         memset(org_repl_path, 0, sizeof(org_repl_path));
2934         ret = _media_content_replace_path(dst_path, repl_path);
2935         media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
2936
2937         media_info_s *_media = (media_info_s*)media;
2938
2939         ret = _media_util_check_ignore_file(repl_path, &ignore_file);
2940         media_content_retvm_if(ignore_file == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path");
2941         ret = _media_content_replace_path(_media->file_path, org_repl_path);
2942         media_content_retvm_if(!STRING_VALID(org_repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
2943
2944         ret = _media_util_check_file_exist(repl_path);
2945         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2946
2947         folder_path = g_path_get_dirname(repl_path);
2948         ret = _media_util_check_ignore_dir(folder_path, &ignore_dir);
2949         SAFE_FREE(folder_path);
2950
2951         media_content_retvm_if(ignore_dir == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid folder path");
2952
2953         ret = media_svc_get_storage_type(org_repl_path, &src_storage_type, tzplatform_getuid(TZ_USER_NAME));
2954         if (ret != MS_MEDIA_ERR_NONE) {
2955                 media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
2956                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2957         }
2958
2959         ret = media_svc_get_storage_type(repl_path, &dst_storage_type, tzplatform_getuid(TZ_USER_NAME));
2960         if (ret != MS_MEDIA_ERR_NONE) {
2961                 media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
2962                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2963         }
2964
2965         memset(storage_id, 0x00, sizeof(storage_id));
2966         ret = media_svc_get_storage_id(_content_get_db_handle(), org_repl_path, storage_id, tzplatform_getuid(TZ_USER_NAME));
2967         if (ret != MS_MEDIA_ERR_NONE) {
2968                 media_content_error("media_svc_get_storage_id failed : %d", ret);
2969                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2970         }
2971
2972         ret = media_svc_move_item(_content_get_db_handle(), storage_id, src_storage_type, org_repl_path, dst_storage_type, repl_path, tzplatform_getuid(TZ_USER_NAME));
2973         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2974 }
2975
2976 int media_info_create_thumbnail(media_info_h media, media_thumbnail_completed_cb callback, void *user_data)
2977 {
2978         int ret = MEDIA_CONTENT_ERROR_NONE;
2979         static unsigned int req_id = 0;
2980         char repl_path[MAX_QUERY_SIZE] = {0, };
2981         media_info_s *_media = (media_info_s*)media;
2982
2983         if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path)) {
2984                 memset(repl_path, 0, sizeof(repl_path));
2985                 ret = _media_content_replace_path(_media->file_path, repl_path);
2986                 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
2987
2988                 media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s*)calloc(1, sizeof(media_thumbnail_cb_s));
2989                 media_content_retvm_if(_thumb_cb == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
2990                 req_id++;
2991                 _media->request_id = req_id;
2992
2993                 _thumb_cb->handle = _media;
2994                 _thumb_cb->user_data = user_data;
2995                 _thumb_cb->thumbnail_completed_cb = callback;
2996
2997                 ret = thumbnail_request_from_db_async(_media->request_id, repl_path, (ThumbFunc)__media_info_thumbnail_completed_cb, (void *)_thumb_cb, tzplatform_getuid(TZ_USER_NAME));
2998                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
2999         } else {
3000                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3001                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3002         }
3003
3004         return ret;
3005 }
3006
3007 int media_info_cancel_thumbnail(media_info_h media)
3008 {
3009         int ret = MEDIA_CONTENT_ERROR_NONE;
3010         media_info_s *_media = (media_info_s*)media;
3011         char repl_path[MAX_QUERY_SIZE] = {0, };
3012
3013         if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path) && _media->request_id > 0) {
3014                 memset(repl_path, 0, sizeof(repl_path));
3015                 ret = _media_content_replace_path(_media->file_path, repl_path);
3016                 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3017
3018                 ret = thumbnail_request_cancel_media(_media->request_id, repl_path);
3019                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3020         } else {
3021                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3022                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3023         }
3024
3025         return ret;
3026 }
3027
3028 int media_info_start_face_detection(media_info_h media, media_face_detection_completed_cb callback, void *user_data)
3029 {
3030         int ret = MEDIA_CONTENT_ERROR_NONE;
3031         static unsigned int req_id = 0;
3032         media_info_s *_media = (media_info_s*)media;
3033         char repl_path[MAX_QUERY_SIZE] = {0, };
3034
3035         if (!__media_info_isFaceRecognition_feature_supported()) {
3036                 media_content_error("NOT_SUPPORTED(0x%08x)", MEDIA_CONTENT_ERROR_NOT_SUPPORTED);
3037                 return MEDIA_CONTENT_ERROR_NOT_SUPPORTED;
3038         }
3039
3040         if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path)) {
3041                 memset(repl_path, 0, sizeof(repl_path));
3042                 ret = _media_content_replace_path(_media->file_path, repl_path);
3043                 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3044                 media_face_cb_s *_face_cb = (media_face_cb_s*)calloc(1, sizeof(media_face_cb_s));
3045                 media_content_retvm_if(_face_cb == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3046                 req_id++;
3047                 _media->face_request_id = req_id;
3048
3049                 _face_cb->handle = _media;
3050                 _face_cb->user_data = user_data;
3051                 _face_cb->face_completed_cb = callback;
3052
3053                 ret = dcm_request_extract_face_async(_media->face_request_id, repl_path, (FaceFunc)__media_info_face_completed_cb, (void *)_face_cb, tzplatform_getuid(TZ_USER_NAME));
3054                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3055         } else {
3056                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3057                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3058         }
3059
3060         return ret;
3061 }
3062
3063 int media_info_cancel_face_detection(media_info_h media)
3064 {
3065         int ret = MEDIA_CONTENT_ERROR_NONE;
3066         media_info_s *_media = (media_info_s*)media;
3067         char repl_path[MAX_QUERY_SIZE] = {0, };
3068
3069         if (!__media_info_isFaceRecognition_feature_supported()) {
3070                 media_content_error("NOT_SUPPORTED(0x%08x)", MEDIA_CONTENT_ERROR_NOT_SUPPORTED);
3071                 return MEDIA_CONTENT_ERROR_NOT_SUPPORTED;
3072         }
3073
3074         if (_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path) && _media->face_request_id > 0) {
3075                 memset(repl_path, 0, sizeof(repl_path));
3076                 ret = _media_content_replace_path(_media->file_path, repl_path);
3077                 media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3078                 ret = dcm_request_cancel_face(_media->face_request_id, repl_path);
3079                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
3080         } else {
3081                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3082                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3083         }
3084
3085         return ret;
3086 }
3087
3088 static int __media_info_map_data_usr_to_svc(media_info_s *media, media_svc_content_info_s **service_content, media_content_storage_e storage_type)
3089 {
3090         media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid handle");
3091 #ifndef _USE_TV_PROFILE
3092         char repl_path[MAX_QUERY_SIZE] = {0, };
3093         char *tmp_path = NULL;
3094 #endif
3095
3096         media_svc_content_info_s *svc_content_info = calloc(1, sizeof(media_svc_content_info_s));
3097         media_content_retvm_if(svc_content_info == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3098
3099 #ifdef _USE_TV_PROFILE
3100         svc_content_info->path = g_strdup(media->file_path);
3101 #else
3102         memset(repl_path, 0, sizeof(repl_path));
3103         tmp_path = g_strdup(media->file_path);
3104         _media_content_replace_path(tmp_path, repl_path);
3105         svc_content_info->path = g_strdup(repl_path);
3106         SAFE_FREE(tmp_path);
3107 #endif
3108         svc_content_info->file_name = g_strdup(media->display_name);
3109         svc_content_info->media_type = media->media_type;
3110         svc_content_info->mime_type = g_strdup(media->mime_type);
3111         svc_content_info->size = media->size;
3112         svc_content_info->storage_type = storage_type;
3113         svc_content_info->storage_uuid = g_strdup(media->storage_uuid);
3114
3115         svc_content_info->added_time = media->added_time;
3116         svc_content_info->modified_time = media->modified_time;
3117         svc_content_info->thumbnail_path = g_strdup(media->thumbnail_path);
3118         svc_content_info->is_drm = media->is_drm;
3119         svc_content_info->last_played_time = media->played_time;
3120         svc_content_info->played_count = media->played_count;
3121         svc_content_info->favourate = media->favourite;
3122
3123 #ifdef _USE_SENIOR_MODE
3124         if (_media_content_is_support_senior_mode()) {
3125                 svc_content_info->contact = g_strdup(media->contact);
3126                 svc_content_info->app_data = g_strdup(media->app_data);
3127         }
3128 #endif
3129
3130         svc_content_info->media_meta.title = g_strdup(media->title);
3131         svc_content_info->media_meta.rating = media->rating;
3132         svc_content_info->media_meta.description = g_strdup(media->description);
3133         svc_content_info->media_meta.longitude = media->longitude;
3134         svc_content_info->media_meta.latitude = media->latitude;
3135         svc_content_info->media_meta.altitude = media->altitude;
3136         svc_content_info->media_meta.weather = g_strdup(media->weather);
3137         svc_content_info->media_meta.category = g_strdup(media->category);
3138         svc_content_info->media_meta.keyword = g_strdup(media->keyword);
3139         svc_content_info->media_meta.location_tag = g_strdup(media->location_tag);
3140         svc_content_info->media_meta.content_name = g_strdup(media->content_name);
3141         svc_content_info->media_meta.age_rating = g_strdup(media->age_rating);
3142         svc_content_info->media_meta.author = g_strdup(media->author);
3143         svc_content_info->media_meta.provider = g_strdup(media->provider);
3144
3145         svc_content_info->media_meta.album = g_strdup(media->audio_meta->album);
3146         svc_content_info->media_meta.artist = g_strdup(media->audio_meta->artist);
3147         svc_content_info->media_meta.genre = g_strdup(media->audio_meta->genre);
3148         svc_content_info->media_meta.recorded_date = g_strdup(media->audio_meta->recorded_date);
3149
3150         if (storage_type == MEDIA_CONTENT_STORAGE_CLOUD) {
3151                 switch (media->media_type) {
3152                 case MEDIA_CONTENT_TYPE_IMAGE:
3153                         svc_content_info->media_meta.width = media->image_meta->width;
3154                         svc_content_info->media_meta.height = media->image_meta->height;
3155                         svc_content_info->media_meta.datetaken = g_strdup(media->image_meta->date_taken);
3156                         svc_content_info->media_meta.orientation = media->image_meta->orientation;
3157                         break;
3158                 case MEDIA_CONTENT_TYPE_VIDEO:
3159                         svc_content_info->media_meta.album_artist = g_strdup(media->audio_meta->album_artist);
3160                         svc_content_info->media_meta.composer = g_strdup(media->audio_meta->composer);
3161                         svc_content_info->media_meta.year = g_strdup(media->audio_meta->year);
3162                         svc_content_info->media_meta.copyright = g_strdup(media->audio_meta->copyright);
3163                         svc_content_info->media_meta.track_num = g_strdup(media->audio_meta->track_num);
3164                         svc_content_info->media_meta.bitrate = media->audio_meta->bitrate;
3165                         svc_content_info->media_meta.duration = media->audio_meta->duration;
3166                         svc_content_info->media_meta.width = media->image_meta->width;
3167                         svc_content_info->media_meta.height = media->image_meta->height;
3168                         break;
3169                 case MEDIA_CONTENT_TYPE_SOUND:
3170                 case MEDIA_CONTENT_TYPE_MUSIC:
3171                         svc_content_info->media_meta.album_artist = g_strdup(media->audio_meta->album_artist);
3172                         svc_content_info->media_meta.composer = g_strdup(media->audio_meta->composer);
3173                         svc_content_info->media_meta.year = g_strdup(media->audio_meta->year);
3174                         svc_content_info->media_meta.copyright = g_strdup(media->audio_meta->copyright);
3175                         svc_content_info->media_meta.track_num = g_strdup(media->audio_meta->track_num);
3176                         svc_content_info->media_meta.bitrate = media->audio_meta->bitrate;
3177                         svc_content_info->media_meta.duration = media->audio_meta->duration;
3178                         svc_content_info->media_meta.channel = media->audio_meta->channel;
3179                         svc_content_info->media_meta.samplerate = media->audio_meta->samplerate;
3180                         break;
3181                 case MEDIA_CONTENT_TYPE_OTHERS:
3182                 default:
3183                         break;
3184                 }
3185         }
3186
3187         *service_content = svc_content_info;
3188
3189         return MEDIA_CONTENT_ERROR_NONE;
3190 }
3191
3192 static int __media_info_set_str_data(media_info_h media, media_info_item_e data_type, const char *str_data)
3193 {
3194         media_info_s *_media = (media_info_s*)media;
3195
3196         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3197
3198         switch (data_type) {
3199         case MEDIA_INFO_PATH:
3200                 SAFE_FREE(_media->file_path);
3201                 if (STRING_VALID(str_data)) {
3202                         _media->file_path = strdup(str_data);
3203                         media_content_retvm_if(_media->file_path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3204                 } else {
3205                         _media->file_path = NULL;
3206                 }
3207                 break;
3208         case MEDIA_INFO_MIME_TYPE:
3209                 SAFE_FREE(_media->mime_type);
3210                 if (STRING_VALID(str_data)) {
3211                         _media->mime_type = strdup(str_data);
3212                         media_content_retvm_if(_media->mime_type == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3213                 } else {
3214                         _media->mime_type = NULL;
3215                 }
3216                 break;
3217         case MEDIA_INFO_THUMBNAIL_PATH:
3218                 SAFE_FREE(_media->thumbnail_path);
3219                 if (STRING_VALID(str_data)) {
3220                         _media->thumbnail_path = strdup(str_data);
3221                         media_content_retvm_if(_media->thumbnail_path == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3222                 } else {
3223                         _media->thumbnail_path = NULL;
3224                 }
3225                 break;
3226         case MEDIA_INFO_TITLE:
3227                 SAFE_FREE(_media->title);
3228                 if (STRING_VALID(str_data)) {
3229                         _media->title = strdup(str_data);
3230                         media_content_retvm_if(_media->title == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3231                 } else {
3232                         _media->title = NULL;
3233                 }
3234                 break;
3235         case MEDIA_INFO_STORAGE_UUID:
3236                 SAFE_FREE(_media->storage_uuid);
3237                 if (STRING_VALID(str_data)) {
3238                         _media->storage_uuid = strdup(str_data);
3239                         media_content_retvm_if(_media->storage_uuid == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3240                 } else {
3241                         _media->storage_uuid = NULL;
3242                 }
3243                 break;
3244         case MEDIA_INFO_ALBUM:
3245                 if (STRING_VALID(_media->media_id)) {
3246                         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3247                                 SAFE_FREE(_media->video_meta->album);
3248                                 if (str_data != NULL) {
3249                                         _media->video_meta->album = strdup(str_data);
3250                                         media_content_retvm_if(_media->video_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3251                                 }
3252                         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3253                                 SAFE_FREE(_media->audio_meta->album);
3254                                 if (str_data != NULL) {
3255                                         _media->audio_meta->album = strdup(str_data);
3256                                         media_content_retvm_if(_media->audio_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3257                                 }
3258                         }
3259                 } else {
3260                         SAFE_FREE(_media->video_meta->album);
3261                         if (str_data != NULL) {
3262                                 _media->video_meta->album = strdup(str_data);
3263                                 media_content_retvm_if(_media->video_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3264                         }
3265
3266                         SAFE_FREE(_media->audio_meta->album);
3267                         if (str_data != NULL) {
3268                                 _media->audio_meta->album = strdup(str_data);
3269                                 media_content_retvm_if(_media->audio_meta->album == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3270                         }
3271                 }
3272                 break;
3273         case MEDIA_INFO_ARTIST:
3274                 if (STRING_VALID(_media->media_id)) {
3275                         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3276                                 SAFE_FREE(_media->video_meta->artist);
3277                                 if (str_data != NULL) {
3278                                         _media->video_meta->artist = strdup(str_data);
3279                                         media_content_retvm_if(_media->video_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3280                                 }
3281                         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3282                                 SAFE_FREE(_media->audio_meta->artist);
3283                                 if (str_data != NULL) {
3284                                         _media->audio_meta->artist = strdup(str_data);
3285                                         media_content_retvm_if(_media->audio_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3286                                 }
3287                         }
3288                 } else {
3289                         SAFE_FREE(_media->video_meta->artist);
3290                         if (str_data != NULL) {
3291                                 _media->video_meta->artist = strdup(str_data);
3292                                 media_content_retvm_if(_media->video_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3293                         }
3294
3295                         SAFE_FREE(_media->audio_meta->artist);
3296                         if (str_data != NULL) {
3297                                 _media->audio_meta->artist = strdup(str_data);
3298                                 media_content_retvm_if(_media->audio_meta->artist == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3299                         }
3300                 }
3301                 break;
3302         case MEDIA_INFO_GENRE:
3303                 if (STRING_VALID(_media->media_id)) {
3304                         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3305                                 SAFE_FREE(_media->video_meta->genre);
3306                                 if (str_data != NULL) {
3307                                         _media->video_meta->genre = strdup(str_data);
3308                                         media_content_retvm_if(_media->video_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3309                                 }
3310                         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3311                                 SAFE_FREE(_media->audio_meta->genre);
3312                                 if (str_data != NULL) {
3313                                         _media->audio_meta->genre = strdup(str_data);
3314                                         media_content_retvm_if(_media->audio_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3315                                 }
3316                         }
3317                 } else {
3318                         SAFE_FREE(_media->video_meta->genre);
3319                         if (str_data != NULL) {
3320                                 _media->video_meta->genre = strdup(str_data);
3321                                 media_content_retvm_if(_media->video_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3322                         }
3323
3324                         SAFE_FREE(_media->audio_meta->genre);
3325                         if (str_data != NULL) {
3326                                 _media->audio_meta->genre = strdup(str_data);
3327                                 media_content_retvm_if(_media->audio_meta->genre == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3328                         }
3329                 }
3330                 break;
3331         case MEDIA_INFO_RECORDED_DATE:
3332                 if (STRING_VALID(_media->media_id)) {
3333                         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
3334                                 SAFE_FREE(_media->video_meta->recorded_date);
3335                                 if (str_data != NULL) {
3336                                         _media->video_meta->recorded_date = strdup(str_data);
3337                                         media_content_retvm_if(_media->video_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3338                                 }
3339                         } else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
3340                                 SAFE_FREE(_media->audio_meta->recorded_date);
3341                                 if (str_data != NULL) {
3342                                         _media->audio_meta->recorded_date = strdup(str_data);
3343                                         media_content_retvm_if(_media->audio_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3344                                 }
3345                         }
3346                 } else {
3347                         SAFE_FREE(_media->video_meta->recorded_date);
3348                         if (str_data != NULL) {
3349                                 _media->video_meta->recorded_date = strdup(str_data);
3350                                 media_content_retvm_if(_media->video_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3351                         }
3352
3353                         SAFE_FREE(_media->audio_meta->recorded_date);
3354                         if (str_data != NULL) {
3355                                 _media->audio_meta->recorded_date = strdup(str_data);
3356                                 media_content_retvm_if(_media->audio_meta->recorded_date == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3357                         }
3358                 }
3359                 break;
3360         default:
3361                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3362                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3363         }
3364
3365         return MEDIA_CONTENT_ERROR_NONE;
3366 }
3367
3368 static int __media_info_destroy(media_info_h media)
3369 {
3370         int ret = MEDIA_CONTENT_ERROR_NONE;
3371         media_info_s *_media = (media_info_s*)media;
3372
3373         if (_media) {
3374                 SAFE_FREE(_media->media_id);
3375                 SAFE_FREE(_media->file_path);
3376                 SAFE_FREE(_media->display_name);
3377                 SAFE_FREE(_media->mime_type);
3378                 SAFE_FREE(_media->thumbnail_path);
3379                 SAFE_FREE(_media->description);
3380                 SAFE_FREE(_media->author);
3381                 SAFE_FREE(_media->provider);
3382                 SAFE_FREE(_media->content_name);
3383                 SAFE_FREE(_media->category);
3384                 SAFE_FREE(_media->location_tag);
3385                 SAFE_FREE(_media->age_rating);
3386                 SAFE_FREE(_media->keyword);
3387                 SAFE_FREE(_media->title);
3388                 SAFE_FREE(_media->weather);
3389                 SAFE_FREE(_media->storage_uuid);
3390
3391                 if (_media->image_meta) {
3392                         SAFE_FREE(_media->image_meta->media_id);
3393                         SAFE_FREE(_media->image_meta->date_taken);
3394                         SAFE_FREE(_media->image_meta->burst_id);
3395                         SAFE_FREE(_media->image_meta->exposure_time);
3396                         SAFE_FREE(_media->image_meta->model);
3397                         SAFE_FREE(_media->image_meta->title);
3398                         SAFE_FREE(_media->image_meta->weather);
3399
3400                         SAFE_FREE(_media->image_meta);
3401                 }
3402
3403                 if (_media->video_meta) {
3404                         SAFE_FREE(_media->video_meta->media_id);
3405                         SAFE_FREE(_media->video_meta->title);
3406                         SAFE_FREE(_media->video_meta->album);
3407                         SAFE_FREE(_media->video_meta->artist);
3408                         SAFE_FREE(_media->video_meta->album_artist);
3409                         SAFE_FREE(_media->video_meta->genre);
3410                         SAFE_FREE(_media->video_meta->composer);
3411                         SAFE_FREE(_media->video_meta->year);
3412                         SAFE_FREE(_media->video_meta->recorded_date);
3413                         SAFE_FREE(_media->video_meta->copyright);
3414                         SAFE_FREE(_media->video_meta->track_num);
3415
3416                         SAFE_FREE(_media->video_meta);
3417                 }
3418
3419                 if (_media->audio_meta) {
3420                         SAFE_FREE(_media->audio_meta->media_id);
3421                         SAFE_FREE(_media->audio_meta->title);
3422                         SAFE_FREE(_media->audio_meta->album);
3423                         SAFE_FREE(_media->audio_meta->artist);
3424                         SAFE_FREE(_media->audio_meta->album_artist);
3425                         SAFE_FREE(_media->audio_meta->genre);
3426                         SAFE_FREE(_media->audio_meta->composer);
3427                         SAFE_FREE(_media->audio_meta->year);
3428                         SAFE_FREE(_media->audio_meta->recorded_date);
3429                         SAFE_FREE(_media->audio_meta->copyright);
3430                         SAFE_FREE(_media->audio_meta->track_num);
3431
3432                         SAFE_FREE(_media->audio_meta);
3433                 }
3434
3435                 ret = MEDIA_CONTENT_ERROR_NONE;
3436         } else {
3437                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
3438                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3439         }
3440
3441         return ret;
3442 }
3443
3444 int media_info_insert_to_db_with_data(media_info_h media)
3445 {
3446         int ret = MEDIA_CONTENT_ERROR_NONE;
3447         int ret_cnt = 0;
3448         char repl_path[MAX_QUERY_SIZE] = {0, };
3449
3450         media_info_s *_media = (media_info_s*)media;
3451
3452         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3453         media_content_retvm_if(!STRING_VALID(_media->file_path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid file_path");
3454         media_content_retvm_if(!STRING_VALID(_media->storage_uuid), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid storage_uuid");
3455         media_content_retvm_if(_media->storage_type < 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid storage_type [%d]", _media->storage_type);
3456
3457         /* Cloud Item should be filled whole info*/
3458         if (_media->storage_type == MEDIA_CONTENT_STORAGE_CLOUD) {
3459                 media_content_retvm_if(!STRING_VALID(_media->mime_type), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid mime_type");
3460                 media_content_retvm_if(!STRING_VALID(_media->title), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid title");
3461                 media_content_retvm_if(_media->size <= 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid size [%d]", _media->size);
3462                 media_content_retvm_if(_media->modified_time <= 0, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid modified_time [%d]", _media->modified_time);
3463
3464                 if ((_media->media_type < MEDIA_CONTENT_TYPE_IMAGE) || (_media->media_type > MEDIA_CONTENT_TYPE_OTHERS)) {
3465                         media_content_error("invalid media type [%d]", _media->media_type);
3466                         return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3467                 }
3468         }
3469
3470         media_content_sec_debug("storage[%d], path[%s], media_type[%d]", _media->storage_type, _media->file_path, _media->media_type);
3471
3472         media_svc_content_info_s *svc_content_info = NULL;
3473
3474         ret = __media_info_map_data_usr_to_svc(_media, &svc_content_info, _media->storage_type);
3475         media_content_retvm_if(ret != MEDIA_CONTENT_ERROR_NONE, ret, "__media_info_map_data_usr_to_svc fail");
3476
3477         ret = media_svc_insert_item_immediately_with_data(_content_get_db_handle(), svc_content_info, tzplatform_getuid(TZ_USER_NAME));
3478         if (ret != MS_MEDIA_ERR_NONE) {
3479                 media_content_sec_error("media_svc_insert_item_immediately_with_data failed : %d (%s)", ret, _media->file_path);
3480                 media_svc_destroy_content_info(svc_content_info);
3481                 SAFE_FREE(svc_content_info);
3482                 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3483         }
3484         /*free the svc_content_info*/
3485         media_svc_destroy_content_info(svc_content_info);
3486         SAFE_FREE(svc_content_info);
3487
3488         /*Fill out the handle*/
3489         memset(repl_path, 0, sizeof(repl_path));
3490         ret = _media_content_replace_path(_media->file_path, repl_path);
3491         char *media_file_path = g_strdup(repl_path);
3492
3493         char *media_string_uuid = g_strdup(_media->storage_uuid);
3494
3495         __media_info_destroy(media);
3496 RETRY:
3497         ret = _media_info_get_media_info_from_db(media_file_path, media_string_uuid, media);
3498         if (ret != MEDIA_CONTENT_ERROR_NONE) {
3499                 media_content_error("_media_info_get_media_info_from_db fail", ret);
3500                 if (ret == MEDIA_CONTENT_ERROR_DB_FAILED && ret_cnt < 5) {
3501                         ret_cnt++;
3502                         media_content_error("RETRY GETTING DATA");
3503                         goto RETRY;
3504                 }
3505         }
3506
3507         SAFE_FREE(media_file_path);
3508         SAFE_FREE(media_string_uuid);
3509
3510         return ret;
3511 }
3512
3513 int media_info_create(const char *path, media_info_h *media)
3514 {
3515         int ret = MEDIA_CONTENT_ERROR_NONE;
3516         char storage_id[MEDIA_CONTENT_UUID_SIZE+1] = {0, };
3517         media_svc_storage_type_e storage_type = 0;
3518         bool ignore_file = FALSE;
3519         char repl_path[MAX_QUERY_SIZE] = {0, };
3520
3521         media_content_retvm_if(!STRING_VALID(path), MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path");
3522         media_content_retvm_if(media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3523         memset(repl_path, 0, sizeof(repl_path));
3524         ret = _media_content_replace_path(path, repl_path);
3525         media_content_retvm_if(!STRING_VALID(repl_path), MEDIA_CONTENT_ERROR_INVALID_OPERATION, "path replacement failed");
3526
3527         ret = _media_util_check_ignore_file(repl_path, &ignore_file);
3528         media_content_retvm_if(ignore_file == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid path");
3529
3530         memset(storage_id, 0x00, sizeof(storage_id));
3531
3532         if (STRING_VALID(MEDIA_ROOT_PATH_CLOUD) && (strstr(repl_path, MEDIA_ROOT_PATH_CLOUD) == NULL)) {
3533                 bool ignore_dir = FALSE;
3534                 char *folder_path = NULL;
3535
3536                 ret = _media_util_check_file_exist(repl_path);
3537                 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
3538
3539                 folder_path = g_path_get_dirname(repl_path);
3540                 ret = _media_util_check_ignore_dir(folder_path, &ignore_dir);
3541                 SAFE_FREE(folder_path);
3542                 media_content_retvm_if(ignore_dir == TRUE, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid folder path");
3543
3544                 ret = media_svc_get_storage_id(_content_get_db_handle(), repl_path, storage_id, tzplatform_getuid(TZ_USER_NAME));
3545                 if (ret != MS_MEDIA_ERR_NONE) {
3546                         media_content_error("media_svc_get_storage_id failed : %d", ret);
3547                         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3548                 }
3549
3550                 ret = media_svc_get_storage_type(repl_path, &storage_type, tzplatform_getuid(TZ_USER_NAME));
3551                 if (ret != MS_MEDIA_ERR_NONE) {
3552                         media_content_sec_error("media_svc_get_storage_type failed : %d", ret);
3553                         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
3554                 }
3555         }
3556
3557         media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
3558         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY, "OUT_OF_MEMORY");
3559
3560         _media->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
3561         if (_media->audio_meta == NULL) {
3562                 SAFE_FREE(_media);
3563                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
3564                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
3565         }
3566
3567         _media->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
3568         if (_media->video_meta == NULL) {
3569                 SAFE_FREE(_media->audio_meta);
3570                 SAFE_FREE(_media);
3571                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
3572                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
3573         }
3574
3575         _media->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
3576         if (_media->image_meta == NULL) {
3577                 SAFE_FREE(_media->audio_meta);
3578                 SAFE_FREE(_media->video_meta);
3579                 SAFE_FREE(_media);
3580                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
3581                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
3582         }
3583
3584         _media->file_path = g_strdup(path);
3585         _media->storage_type = -1;
3586         _media->media_type = 0;
3587         _media->modified_time = 0;
3588         _media->size = 0;
3589         _media->request_id = 0;
3590         _media->longitude = MEDIA_SVC_DEFAULT_GPS_VALUE;
3591         _media->latitude = MEDIA_SVC_DEFAULT_GPS_VALUE;
3592         _media->altitude = MEDIA_SVC_DEFAULT_GPS_VALUE;
3593
3594         if (STRING_VALID(storage_id)) {
3595                 _media->storage_uuid = g_strdup(storage_id);
3596                 _media->storage_type = storage_type;
3597         }
3598
3599         *media = (media_info_h)_media;
3600
3601         return ret;
3602 }
3603
3604 int media_info_set_mime_type(media_info_h media, const char *mime_type)
3605 {
3606         return __media_info_set_str_data(media, MEDIA_INFO_MIME_TYPE, mime_type);
3607 }
3608
3609 int media_info_set_title(media_info_h media, const char *title)
3610 {
3611         return __media_info_set_str_data(media, MEDIA_INFO_TITLE, title);
3612 }
3613
3614 int media_info_set_album(media_info_h media, const char *album)
3615 {
3616         return __media_info_set_str_data(media, MEDIA_INFO_ALBUM, album);
3617 }
3618
3619 int media_info_set_artist(media_info_h media, const char *artist)
3620 {
3621         return __media_info_set_str_data(media, MEDIA_INFO_ARTIST, artist);
3622 }
3623
3624 int media_info_set_genre(media_info_h media, const char *genre)
3625 {
3626         return __media_info_set_str_data(media, MEDIA_INFO_GENRE, genre);
3627 }
3628
3629 int media_info_set_recorded_date(media_info_h media, const char *recorded_date)
3630 {
3631         return __media_info_set_str_data(media, MEDIA_INFO_RECORDED_DATE, recorded_date);
3632 }
3633
3634 int media_info_set_thumbnail_path(media_info_h media, const char *thumbnail_path)
3635 {
3636         return __media_info_set_str_data(media, MEDIA_INFO_THUMBNAIL_PATH, thumbnail_path);
3637 }
3638
3639 int media_info_set_storage_id(media_info_h media, const char *storage_id)
3640 {
3641         return __media_info_set_str_data(media, MEDIA_INFO_STORAGE_UUID, storage_id);
3642 }
3643
3644 int media_info_set_size(media_info_h media, unsigned long long size)
3645 {
3646         media_info_s *_media = (media_info_s*)media;
3647
3648         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3649
3650         _media->size = size;
3651
3652         return MEDIA_CONTENT_ERROR_NONE;
3653 }
3654
3655 int media_info_set_modified_time(media_info_h media, time_t modified_time)
3656 {
3657         media_info_s *_media = (media_info_s*)media;
3658
3659         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3660
3661         _media->modified_time = modified_time;
3662
3663         return MEDIA_CONTENT_ERROR_NONE;
3664 }
3665
3666 int media_info_set_media_type(media_info_h media, media_content_type_e type)
3667 {
3668         media_info_s *_media = (media_info_s*)media;
3669
3670         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3671
3672         _media->media_type = type;
3673
3674         return MEDIA_CONTENT_ERROR_NONE;
3675 }
3676
3677 int media_info_set_duration(media_info_h media, int duration)
3678 {
3679         media_info_s *_media = (media_info_s*)media;
3680
3681         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3682
3683         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO)
3684                 _media->video_meta->duration = duration;
3685         else if ((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND))
3686                 _media->audio_meta->duration = duration;
3687         else {
3688                 media_content_error("Invalid media type");
3689                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3690         }
3691
3692         return MEDIA_CONTENT_ERROR_NONE;
3693 }
3694
3695 int media_info_set_width(media_info_h media, int width)
3696 {
3697         media_info_s *_media = (media_info_s*)media;
3698
3699         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3700
3701         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO)
3702                 _media->video_meta->width = width;
3703         else if (_media->media_type == MEDIA_CONTENT_TYPE_IMAGE)
3704                 _media->image_meta->width = width;
3705         else {
3706                 media_content_error("Invalid media type");
3707                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3708         }
3709
3710         return MEDIA_CONTENT_ERROR_NONE;
3711 }
3712
3713 int media_info_set_height(media_info_h media, int height)
3714 {
3715         media_info_s *_media = (media_info_s*)media;
3716
3717         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3718
3719         if (_media->media_type == MEDIA_CONTENT_TYPE_VIDEO)
3720                 _media->video_meta->height = height;
3721         else if (_media->media_type == MEDIA_CONTENT_TYPE_IMAGE)
3722                 _media->image_meta->height = height;
3723         else {
3724                 media_content_error("Invalid media type");
3725                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
3726         }
3727
3728         return MEDIA_CONTENT_ERROR_NONE;
3729 }
3730
3731 int media_info_set_storage_type(media_info_h media, media_content_storage_e storage_type)
3732 {
3733         media_info_s *_media = (media_info_s*)media;
3734
3735         media_content_retvm_if(_media == NULL, MEDIA_CONTENT_ERROR_INVALID_PARAMETER, "Invalid media");
3736
3737         _media->storage_type = storage_type;
3738
3739         return MEDIA_CONTENT_ERROR_NONE;
3740 }
3741
3742 #ifdef _USE_SENIOR_MODE
3743 int media_info_set_contact(media_info_h media, const char *contact)
3744 {
3745         return __media_info_set_str_data(media, MEDIA_INFO_CONTACT, contact);
3746 }
3747
3748 int media_info_set_app_data(media_info_h media, const char *app_data)
3749 {
3750         return __media_info_set_str_data(media, MEDIA_INFO_APP_DATA, app_data);
3751 }
3752 #endif
3753