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