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