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