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