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