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