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