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