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