modify DB schema.
[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->played_count = _src->audio_meta->played_count;
1279                         _dst->audio_meta->played_time = _src->audio_meta->played_time;
1280                         _dst->audio_meta->played_position = _src->audio_meta->played_position;
1281
1282                 }
1283                 *dst = (media_info_h)_dst;
1284
1285                 ret = MEDIA_CONTENT_ERROR_NONE;
1286         }
1287         else
1288         {
1289                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1290                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1291         }
1292
1293         return ret;
1294 }
1295
1296 int media_info_get_media_count_from_db(filter_h filter, int *media_count)
1297 {
1298         int ret = MEDIA_CONTENT_ERROR_NONE;
1299
1300         media_content_debug_func();
1301
1302         if(media_count == NULL)
1303         {
1304                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1305                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1306
1307                 return ret;
1308         }
1309
1310         ret = _media_db_get_group_item_count(NULL, filter, MEDIA_GROUP_NONE, media_count);
1311
1312         return ret;
1313 }
1314
1315 int media_info_foreach_media_from_db(filter_h filter, media_info_cb callback, void *user_data)
1316 {
1317         int ret = MEDIA_CONTENT_ERROR_NONE;
1318
1319         media_content_debug_func();
1320
1321         if(callback == NULL)
1322         {
1323                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1324                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1325         }
1326
1327         ret = _media_db_get_group_item(NULL, filter, callback, user_data, MEDIA_GROUP_NONE);
1328
1329         return ret;
1330 }
1331
1332 int media_info_get_tag_count_from_db(const char *media_id, filter_h filter, int *tag_count)
1333 {
1334         int ret = MEDIA_CONTENT_ERROR_NONE;
1335
1336         media_content_debug_func();
1337
1338         if(STRING_VALID(media_id) && tag_count)
1339         {
1340                 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_TAG_BY_MEDIA_ID, tag_count);
1341         }
1342         else
1343         {
1344                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1345                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1346         }
1347
1348         return ret;
1349 }
1350
1351 int media_info_foreach_tag_from_db(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
1352 {
1353         int ret = MEDIA_CONTENT_ERROR_NONE;
1354
1355         media_content_debug_func();
1356
1357         if((callback != NULL) && STRING_VALID(media_id))
1358         {
1359                 ret = _media_db_get_tag(media_id, filter, callback, user_data);
1360         }
1361         else
1362         {
1363                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1364                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1365         }
1366
1367         return ret;
1368 }
1369
1370 int media_info_get_bookmark_count_from_db(const char *media_id, filter_h filter, int *bookmark_count)
1371 {
1372         int ret = MEDIA_CONTENT_ERROR_NONE;
1373
1374         media_content_debug_func();
1375
1376         if(STRING_VALID(media_id) && bookmark_count)
1377         {
1378                 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID, bookmark_count);
1379         }
1380         else
1381         {
1382                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1383                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1384         }
1385
1386         return ret;
1387 }
1388
1389 int media_info_foreach_bookmark_from_db (const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
1390 {
1391         int ret = MEDIA_CONTENT_ERROR_NONE;
1392
1393         media_content_debug_func();
1394
1395         if((callback != NULL) && STRING_VALID(media_id))
1396         {
1397                 ret = _media_db_get_bookmark(media_id, filter, callback, user_data);
1398         }
1399         else
1400         {
1401                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1402                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1403         }
1404
1405         return ret;
1406 }
1407
1408 int media_info_get_image(media_info_h media, image_meta_h *image)
1409 {
1410         int ret = MEDIA_CONTENT_ERROR_NONE;
1411
1412         media_info_s *_media = (media_info_s*)media;
1413
1414         if(_media == NULL)
1415         {
1416                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1417                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1418         }
1419
1420         if(_media->media_type != MEDIA_CONTENT_TYPE_IMAGE)
1421         {
1422                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1423                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1424         }
1425
1426         if(_media->image_meta == NULL)
1427         {
1428                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1429                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1430         }
1431
1432         image_meta_s *_image = (image_meta_s*)calloc(1, sizeof(image_meta_s));
1433
1434         if(_image == NULL)
1435         {
1436                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1437                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1438         }
1439
1440         if(STRING_VALID(_media->media_id)) {
1441                 _image->media_id = strdup(_media->media_id);
1442         }
1443
1444         _image->width = _media->image_meta->width;
1445         _image->height = _media->image_meta->height;
1446         _image->orientation = _media->image_meta->orientation;
1447
1448         if(STRING_VALID(_media->image_meta->date_taken)) {
1449                 _image->date_taken = strdup(_media->image_meta->date_taken);
1450         }
1451
1452         if(STRING_VALID(_media->image_meta->title)) {
1453                 _image->title = strdup(_media->image_meta->title);
1454         }
1455
1456         if(STRING_VALID(_media->image_meta->burst_id)) {
1457                 _image->burst_id = strdup(_media->image_meta->burst_id);
1458         }
1459
1460         if(STRING_VALID(_media->image_meta->weather)) {
1461                 _image->weather = strdup(_media->image_meta->weather);
1462         }
1463
1464         *image = (image_meta_h)_image;
1465
1466         return ret;
1467 }
1468
1469 int media_info_get_video(media_info_h media, video_meta_h *video)
1470 {
1471         int ret = MEDIA_CONTENT_ERROR_NONE;
1472
1473         media_info_s *_media = (media_info_s*)media;
1474
1475         if(_media == NULL)
1476         {
1477                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1478                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1479         }
1480
1481         if(_media->media_type != MEDIA_CONTENT_TYPE_VIDEO)
1482         {
1483                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1484                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1485         }
1486
1487         if(_media->video_meta == NULL)
1488         {
1489                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1490                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1491         }
1492
1493         video_meta_s *_video = (video_meta_s*)calloc(1, sizeof(video_meta_s));
1494
1495         if(_video == NULL)
1496         {
1497                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1498                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1499         }
1500
1501         if(STRING_VALID(_media->media_id)) {
1502                 _video->media_id = strdup(_media->media_id);
1503         }
1504
1505         if(STRING_VALID(_media->video_meta->title)) {
1506                 _video->title = strdup(_media->video_meta->title);
1507         }
1508         if(STRING_VALID(_media->video_meta->album)) {
1509                 _video->album = strdup(_media->video_meta->album);
1510         }
1511         if(STRING_VALID(_media->video_meta->artist)) {
1512                 _video->artist = strdup(_media->video_meta->artist);
1513         }
1514         if(STRING_VALID(_media->video_meta->genre)) {
1515                 _video->genre = strdup(_media->video_meta->genre);
1516         }
1517         if(STRING_VALID(_media->video_meta->composer)) {
1518                 _video->composer = strdup(_media->video_meta->composer);
1519         }
1520         if(STRING_VALID(_media->video_meta->year)) {
1521                 _video->year = strdup(_media->video_meta->year);
1522         }
1523         if(STRING_VALID(_media->video_meta->recorded_date)) {
1524                 _video->recorded_date = strdup(_media->video_meta->recorded_date);
1525         }
1526         if(STRING_VALID(_media->video_meta->copyright)) {
1527                 _video->copyright = strdup(_media->video_meta->copyright);
1528         }
1529         if(STRING_VALID(_media->video_meta->track_num)) {
1530                 _video->track_num = strdup(_media->video_meta->track_num);
1531         }
1532
1533         _video->width = _media->video_meta->width;
1534         _video->height = _media->video_meta->height;
1535         _video->duration = _media->video_meta->duration;
1536         _video->bitrate = _media->video_meta->bitrate;
1537         _video->played_count = _media->video_meta->played_count;
1538         _video->played_time = _media->video_meta->played_time;
1539         _video->played_position = _media->video_meta->played_position;
1540
1541         *video = (video_meta_h)_video;
1542
1543         return ret;
1544 }
1545
1546 int media_info_get_audio(media_info_h media, audio_meta_h *audio)
1547 {
1548         int ret = MEDIA_CONTENT_ERROR_NONE;
1549
1550         media_info_s *_media = (media_info_s*)media;
1551
1552         if(_media == NULL)
1553         {
1554                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1555                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1556         }
1557
1558         if(_media->media_type != MEDIA_CONTENT_TYPE_MUSIC && _media->media_type != MEDIA_CONTENT_TYPE_SOUND)
1559         {
1560                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1561                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1562         }
1563
1564         if(_media->audio_meta == NULL)
1565         {
1566                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1567                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1568         }
1569
1570         audio_meta_s *_audio = (audio_meta_s*)calloc(1, sizeof(audio_meta_s));
1571
1572         if(_audio == NULL)
1573         {
1574                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1575                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1576         }
1577
1578         if(STRING_VALID(_media->media_id)) {
1579                 _audio->media_id = strdup(_media->media_id);
1580         }
1581
1582         if(STRING_VALID(_media->audio_meta->title)) {
1583                 _audio->title = strdup(_media->audio_meta->title);
1584         }
1585         if(STRING_VALID(_media->audio_meta->album)) {
1586                 _audio->album = strdup(_media->audio_meta->album);
1587         }
1588         if(STRING_VALID(_media->audio_meta->artist)) {
1589                 _audio->artist = strdup(_media->audio_meta->artist);
1590         }
1591         if(STRING_VALID(_media->audio_meta->genre)) {
1592                 _audio->genre = strdup(_media->audio_meta->genre);
1593         }
1594         if(STRING_VALID(_media->audio_meta->composer)) {
1595                 _audio->composer = strdup(_media->audio_meta->composer);
1596         }
1597         if(STRING_VALID(_media->audio_meta->year)) {
1598                 _audio->year = strdup(_media->audio_meta->year);
1599         }
1600         if(STRING_VALID(_media->audio_meta->recorded_date)) {
1601                 _audio->recorded_date = strdup(_media->audio_meta->recorded_date);
1602         }
1603         if(STRING_VALID(_media->audio_meta->copyright)) {
1604                 _audio->copyright = strdup(_media->audio_meta->copyright);
1605         }
1606         if(STRING_VALID(_media->audio_meta->track_num)) {
1607                 _audio->track_num = strdup(_media->audio_meta->track_num);
1608         }
1609
1610         _audio->duration = _media->audio_meta->duration;
1611         _audio->bitrate = _media->audio_meta->bitrate;
1612         _audio->samplerate = _media->audio_meta->samplerate;
1613         _audio->channel = _media->audio_meta->channel;
1614         _audio->played_time = _media->audio_meta->played_time;
1615         _audio->played_count = _media->audio_meta->played_count;
1616         _audio->played_position = _media->audio_meta->played_position;
1617
1618         *audio = (audio_meta_h)_audio;
1619
1620         return ret;
1621 }
1622
1623 int media_info_get_media_id(media_info_h media, char **media_id)
1624 {
1625         int ret = MEDIA_CONTENT_ERROR_NONE;
1626         media_info_s *_media = (media_info_s*)media;
1627
1628         if(_media && media_id)
1629         {
1630                 if(STRING_VALID(_media->media_id))
1631                 {
1632                         *media_id = strdup(_media->media_id);
1633                         if(*media_id == NULL)
1634                         {
1635                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1636                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1637                         }
1638                 }
1639                 else
1640                 {
1641                         *media_id = NULL;
1642                 }
1643                 ret = MEDIA_CONTENT_ERROR_NONE;
1644         }
1645         else
1646         {
1647                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1648                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1649         }
1650
1651         return ret;
1652 }
1653
1654 int media_info_get_file_path(media_info_h media, char **path)
1655 {
1656         int ret = MEDIA_CONTENT_ERROR_NONE;
1657         media_info_s *_media = (media_info_s*)media;
1658
1659         if(_media && path)
1660         {
1661                 if(STRING_VALID(_media->file_path))
1662                 {
1663                         *path = strdup(_media->file_path);
1664                         if(*path == NULL)
1665                         {
1666                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1667                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1668                         }
1669                 }
1670                 else
1671                 {
1672                         *path = NULL;
1673                 }
1674                 ret = MEDIA_CONTENT_ERROR_NONE;
1675
1676         }
1677         else
1678         {
1679                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1680                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1681         }
1682
1683         return ret;
1684 }
1685
1686 int media_info_get_display_name(media_info_h media, char **name)
1687 {
1688         int ret = MEDIA_CONTENT_ERROR_NONE;
1689         media_info_s *_media = (media_info_s*)media;
1690         if(_media && name)
1691         {
1692                 if(STRING_VALID(_media->display_name))
1693                 {
1694                         *name = strdup(_media->display_name);
1695                         if(*name == NULL)
1696                         {
1697                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1698                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1699                         }
1700                 }
1701                 else
1702                 {
1703                         *name = NULL;
1704                 }
1705                 ret = MEDIA_CONTENT_ERROR_NONE;
1706
1707         }
1708         else
1709         {
1710                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1711                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1712         }
1713
1714         return ret;
1715 }
1716
1717 int media_info_get_media_type(media_info_h media, media_content_type_e *type)
1718 {
1719         int ret = MEDIA_CONTENT_ERROR_NONE;
1720         media_info_s *_media = (media_info_s*)media;
1721         if(_media && type)
1722         {
1723                 *type = _media->media_type;
1724                 ret = MEDIA_CONTENT_ERROR_NONE;
1725         }
1726         else
1727         {
1728                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1729                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1730         }
1731
1732         return ret;
1733 }
1734
1735 int media_info_get_mime_type(media_info_h media, char **mime_type)
1736 {
1737         int ret = MEDIA_CONTENT_ERROR_NONE;
1738         media_info_s *_media = (media_info_s*)media;
1739
1740         if(_media && mime_type)
1741         {
1742                 if(STRING_VALID(_media->mime_type))
1743                 {
1744                         *mime_type = strdup(_media->mime_type);
1745                         if(*mime_type == NULL)
1746                         {
1747                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1748                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1749                         }
1750                 }
1751                 else
1752                 {
1753                         *mime_type = NULL;
1754                 }
1755                 ret = MEDIA_CONTENT_ERROR_NONE;
1756         }
1757         else
1758         {
1759                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1760                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1761         }
1762
1763         return ret;
1764 }
1765
1766 int media_info_get_size(media_info_h media, unsigned long long *size)
1767 {
1768         int ret = MEDIA_CONTENT_ERROR_NONE;
1769         media_info_s *_media = (media_info_s*)media;
1770
1771         if(_media && size)
1772         {
1773                 *size = _media->size;
1774                 ret = MEDIA_CONTENT_ERROR_NONE;
1775         }
1776         else
1777         {
1778                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1779                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1780         }
1781
1782         return ret;
1783 }
1784
1785 int media_info_get_added_time(media_info_h media, time_t *added_time)
1786 {
1787         int ret = MEDIA_CONTENT_ERROR_NONE;
1788         media_info_s *_media = (media_info_s*)media;
1789         if(_media && added_time)
1790         {
1791                 *added_time = _media->added_time;
1792                 ret = MEDIA_CONTENT_ERROR_NONE;
1793         }
1794         else
1795         {
1796                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1797                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1798         }
1799
1800         return ret;
1801 }
1802
1803 int media_info_get_modified_time(media_info_h media, time_t* time)
1804 {
1805         int ret = MEDIA_CONTENT_ERROR_NONE;
1806         media_info_s *_media = (media_info_s*)media;
1807         if(_media && time)
1808         {
1809                 *time = _media->modified_time;
1810                 ret = MEDIA_CONTENT_ERROR_NONE;
1811         }
1812         else
1813         {
1814                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1815                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1816         }
1817
1818         return ret;
1819 }
1820
1821 int media_info_get_timeline(media_info_h media, time_t* time)
1822 {
1823         int ret = MEDIA_CONTENT_ERROR_NONE;
1824         media_info_s *_media = (media_info_s*)media;
1825         if(_media && time)
1826         {
1827                 *time = _media->timeline;
1828                 ret = MEDIA_CONTENT_ERROR_NONE;
1829         }
1830         else
1831         {
1832                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1833                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1834         }
1835
1836         return ret;
1837 }
1838
1839 int media_info_get_thumbnail_path(media_info_h media, char **path)
1840 {
1841         int ret = MEDIA_CONTENT_ERROR_NONE;
1842         media_info_s *_media = (media_info_s*)media;
1843         if(_media && path)
1844         {
1845                 if(STRING_VALID(_media->thumbnail_path))
1846                 {
1847                         *path = strdup(_media->thumbnail_path);
1848                         if(*path == NULL)
1849                         {
1850                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1851                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1852                         }
1853                 }
1854                 else
1855                 {
1856                         *path = NULL;
1857                 }
1858                 ret = MEDIA_CONTENT_ERROR_NONE;
1859
1860         }
1861         else
1862         {
1863                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1864                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1865         }
1866
1867         return ret;
1868 }
1869
1870 int media_info_get_title(media_info_h media, char **title)
1871 {
1872         int ret = MEDIA_CONTENT_ERROR_NONE;
1873         media_info_s *_media = (media_info_s*)media;
1874
1875         if(_media && title)
1876         {
1877                 if(STRING_VALID(_media->title))
1878                 {
1879                         *title = strdup(_media->title);
1880                         if(*title == NULL)
1881                         {
1882                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1883                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1884                         }
1885                 }
1886                 else
1887                 {
1888                         *title = NULL;
1889                 }
1890                 ret = MEDIA_CONTENT_ERROR_NONE;
1891         }
1892         else
1893         {
1894                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1895                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1896         }
1897
1898         return ret;
1899 }
1900
1901 int media_info_get_description(media_info_h media, char **description)
1902 {
1903         int ret = MEDIA_CONTENT_ERROR_NONE;
1904         media_info_s *_media = (media_info_s*)media;
1905
1906         if(_media && description)
1907         {
1908                 if(STRING_VALID(_media->description))
1909                 {
1910                         *description = strdup(_media->description);
1911                         if(*description == NULL)
1912                         {
1913                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1914                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1915                         }
1916                 }
1917                 else
1918                 {
1919                         *description = NULL;
1920                 }
1921                 ret = MEDIA_CONTENT_ERROR_NONE;
1922         }
1923         else
1924         {
1925                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1926                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1927         }
1928
1929         return ret;
1930 }
1931
1932 int media_info_get_longitude(media_info_h media, double* longitude)
1933 {
1934         int ret = MEDIA_CONTENT_ERROR_NONE;
1935         media_info_s *_media = (media_info_s*)media;
1936
1937         if(_media && longitude)
1938         {
1939                 *longitude = _media->longitude;
1940                 ret = MEDIA_CONTENT_ERROR_NONE;
1941         }
1942         else
1943         {
1944                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1945                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1946         }
1947
1948         return ret;
1949 }
1950 int media_info_get_latitude(media_info_h media, double* latitude)
1951 {
1952         int ret = MEDIA_CONTENT_ERROR_NONE;
1953         media_info_s *_media = (media_info_s*)media;
1954
1955         if(_media && latitude)
1956         {
1957                 *latitude = _media->latitude;
1958                 ret = MEDIA_CONTENT_ERROR_NONE;
1959         }
1960         else
1961         {
1962                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1963                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1964         }
1965
1966         return ret;
1967 }
1968
1969 int media_info_get_altitude(media_info_h media, double *altitude)
1970 {
1971         int ret = MEDIA_CONTENT_ERROR_NONE;
1972         media_info_s *_media = (media_info_s*)media;
1973
1974         if(_media && altitude)
1975         {
1976                 *altitude = _media->altitude;
1977                 ret = MEDIA_CONTENT_ERROR_NONE;
1978         }
1979         else
1980         {
1981                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1982                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1983         }
1984
1985         return ret;
1986 }
1987
1988 int media_info_get_weather(media_info_h media, char **weather)
1989 {
1990         int ret = MEDIA_CONTENT_ERROR_NONE;
1991         media_info_s *_media = (media_info_s*)media;
1992
1993         if(_media && weather)
1994         {
1995                 if(STRING_VALID(_media->weather))
1996                 {
1997                         *weather = strdup(_media->weather);
1998                         if(*weather == NULL)
1999                         {
2000                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2001                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2002                         }
2003                 }
2004                 else
2005                 {
2006                         *weather = NULL;
2007                 }
2008                 ret = MEDIA_CONTENT_ERROR_NONE;
2009         }
2010         else
2011         {
2012                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2013                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2014         }
2015
2016         return ret;
2017 }
2018
2019 int media_info_get_rating(media_info_h media, int *rating)
2020 {
2021         int ret = MEDIA_CONTENT_ERROR_NONE;
2022         media_info_s *_media = (media_info_s*)media;
2023
2024         if(_media && rating)
2025         {
2026                 *rating = _media->rating;
2027                 ret = MEDIA_CONTENT_ERROR_NONE;
2028         }
2029         else
2030         {
2031                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2032                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2033         }
2034
2035         return ret;
2036 }
2037
2038 int media_info_get_favorite(media_info_h media, bool* favorite)
2039 {
2040         int ret = MEDIA_CONTENT_ERROR_NONE;
2041         media_info_s *_media = (media_info_s*)media;
2042
2043         if(_media && favorite)
2044         {
2045
2046                 *favorite = _media->favourite;
2047                 ret = MEDIA_CONTENT_ERROR_NONE;
2048         }
2049         else
2050         {
2051                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2052                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2053         }
2054
2055         return ret;
2056 }
2057
2058 int media_info_get_author(media_info_h media, char **author)
2059 {
2060         int ret = MEDIA_CONTENT_ERROR_NONE;
2061         media_info_s *_media = (media_info_s*)media;
2062
2063         if(_media && author)
2064         {
2065                 if(STRING_VALID(_media->author))
2066                 {
2067                         *author = strdup(_media->author);
2068                         if(*author == NULL)
2069                         {
2070                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2071                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2072                         }
2073                 }
2074                 else
2075                 {
2076                         *author = NULL;
2077                 }
2078                 ret = MEDIA_CONTENT_ERROR_NONE;
2079         }
2080         else
2081         {
2082                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2083                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2084         }
2085
2086         return ret;
2087 }
2088
2089 int media_info_get_provider(media_info_h media, char **provider)
2090 {
2091         int ret = MEDIA_CONTENT_ERROR_NONE;
2092         media_info_s *_media = (media_info_s*)media;
2093
2094         if(_media && provider)
2095         {
2096                 if(STRING_VALID(_media->provider))
2097                 {
2098                         *provider = strdup(_media->provider);
2099                         if(*provider == NULL)
2100                         {
2101                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2102                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2103                         }
2104                 }
2105                 else
2106                 {
2107                         *provider = NULL;
2108                 }
2109                 ret = MEDIA_CONTENT_ERROR_NONE;
2110         }
2111         else
2112         {
2113                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2114                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2115         }
2116
2117         return ret;
2118 }
2119
2120 int media_info_get_content_name(media_info_h media, char **content_name)
2121 {
2122         int ret = MEDIA_CONTENT_ERROR_NONE;
2123         media_info_s *_media = (media_info_s*)media;
2124
2125         if(_media && content_name)
2126         {
2127                 if(STRING_VALID(_media->content_name))
2128                 {
2129                         *content_name = strdup(_media->content_name);
2130                         if(*content_name == NULL)
2131                         {
2132                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2133                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2134                         }
2135                 }
2136                 else
2137                 {
2138                         *content_name = NULL;
2139                 }
2140                 ret = MEDIA_CONTENT_ERROR_NONE;
2141         }
2142         else
2143         {
2144                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2145                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2146         }
2147
2148         return ret;
2149 }
2150
2151 int media_info_get_category(media_info_h media, char **category)
2152 {
2153         int ret = MEDIA_CONTENT_ERROR_NONE;
2154         media_info_s *_media = (media_info_s*)media;
2155
2156         if(_media && category)
2157         {
2158                 if(STRING_VALID(_media->category))
2159                 {
2160                         *category = strdup(_media->category);
2161                         if(*category == NULL)
2162                         {
2163                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2164                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2165                         }
2166                 }
2167                 else
2168                 {
2169                         *category = NULL;
2170                 }
2171                 ret = MEDIA_CONTENT_ERROR_NONE;
2172         }
2173         else
2174         {
2175                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2176                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2177         }
2178
2179         return ret;
2180 }
2181
2182 int media_info_get_location_tag(media_info_h media, char **location_tag)
2183 {
2184         int ret = MEDIA_CONTENT_ERROR_NONE;
2185         media_info_s *_media = (media_info_s*)media;
2186
2187         if(_media && location_tag)
2188         {
2189                 if(STRING_VALID(_media->location_tag))
2190                 {
2191                         *location_tag = strdup(_media->location_tag);
2192                         if(*location_tag == NULL)
2193                         {
2194                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2195                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2196                         }
2197                 }
2198                 else
2199                 {
2200                         *location_tag = NULL;
2201                 }
2202                 ret = MEDIA_CONTENT_ERROR_NONE;
2203         }
2204         else
2205         {
2206                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2207                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2208         }
2209
2210         return ret;
2211 }
2212
2213 int media_info_get_age_rating(media_info_h media, char **age_rating)
2214 {
2215         int ret = MEDIA_CONTENT_ERROR_NONE;
2216         media_info_s *_media = (media_info_s*)media;
2217
2218         if(_media && age_rating)
2219         {
2220                 if(STRING_VALID(_media->age_rating))
2221                 {
2222                         *age_rating = strdup(_media->age_rating);
2223                         if(*age_rating == NULL)
2224                         {
2225                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2226                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2227                         }
2228                 }
2229                 else
2230                 {
2231                         *age_rating = NULL;
2232                 }
2233                 ret = MEDIA_CONTENT_ERROR_NONE;
2234         }
2235         else
2236         {
2237                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2238                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2239         }
2240
2241         return ret;
2242 }
2243
2244 int media_info_get_keyword(media_info_h media, char **keyword)
2245 {
2246         int ret = MEDIA_CONTENT_ERROR_NONE;
2247         media_info_s *_media = (media_info_s*)media;
2248
2249         if(_media && keyword)
2250         {
2251                 if(STRING_VALID(_media->keyword))
2252                 {
2253                         *keyword = strdup(_media->keyword);
2254                         if(*keyword == NULL)
2255                         {
2256                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2257                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2258                         }
2259                 }
2260                 else
2261                 {
2262                         *keyword = NULL;
2263                 }
2264                 ret = MEDIA_CONTENT_ERROR_NONE;
2265         }
2266         else
2267         {
2268                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2269                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2270         }
2271
2272         return ret;
2273 }
2274
2275 int media_info_is_drm(media_info_h media, bool *is_drm)
2276 {
2277         int ret = MEDIA_CONTENT_ERROR_NONE;
2278         media_info_s *_media = (media_info_s*)media;
2279
2280         if(_media)
2281         {
2282                 *is_drm = _media->is_drm;
2283                 ret = MEDIA_CONTENT_ERROR_NONE;
2284         }
2285         else
2286         {
2287                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2288                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2289         }
2290
2291         return ret;
2292 }
2293
2294 int media_info_get_storage_type(media_info_h media, media_content_storage_e *storage_type)
2295 {
2296         int ret = MEDIA_CONTENT_ERROR_NONE;
2297         media_info_s *_media = (media_info_s*)media;
2298
2299         if(_media && storage_type)
2300         {
2301                 *storage_type = _media->storage_type;
2302                 ret = MEDIA_CONTENT_ERROR_NONE;
2303         }
2304         else
2305         {
2306                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2307                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2308         }
2309
2310         return ret;
2311 }
2312
2313 int media_info_get_media_from_db(const char *media_id, media_info_h *media)
2314 {
2315         int ret = MEDIA_CONTENT_ERROR_NONE;
2316         int ret_view = MEDIA_CONTENT_ERROR_NONE;
2317         char select_query[DEFAULT_QUERY_SIZE];
2318         sqlite3_stmt *stmt = NULL;
2319
2320         if(!STRING_VALID(media_id) || (media == NULL))
2321         {
2322                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2323                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2324         }
2325
2326         memset(select_query, 0x00, sizeof(select_query));
2327
2328         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_MEDIA, media_id);
2329         ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
2330         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2331
2332         while(sqlite3_step(stmt) == SQLITE_ROW)
2333         {
2334                 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
2335
2336                 if(_media == NULL)
2337                 {
2338                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2339                         SQLITE3_FINALIZE(stmt);
2340                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2341                 }
2342
2343                 _media_info_item_get_detail(stmt, (media_info_h)_media);
2344
2345                 *media = (media_info_h)_media;
2346         }
2347
2348         SQLITE3_FINALIZE(stmt);
2349         return ret;
2350 }
2351
2352 int media_info_set_display_name(media_info_h media, const char *display_name)
2353 {
2354         int ret = MEDIA_CONTENT_ERROR_NONE;
2355         media_info_s *_media = (media_info_s*)media;
2356
2357         if(_media != NULL && STRING_VALID(display_name))
2358         {
2359                 SAFE_FREE(_media->display_name);
2360
2361                 _media->display_name = strdup(display_name);
2362                 if(_media->display_name == NULL)
2363                 {
2364                         media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2365                         return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2366                 }
2367         }
2368         else
2369         {
2370                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2371                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2372         }
2373
2374         return ret;
2375 }
2376
2377 int media_info_set_description(media_info_h media, const char *description)
2378 {
2379         int ret = MEDIA_CONTENT_ERROR_NONE;
2380         media_info_s *_media = (media_info_s*)media;
2381
2382         if(_media != NULL)
2383         {
2384                 SAFE_FREE(_media->description);
2385
2386                 if(STRING_VALID(description))
2387                 {
2388                         _media->description = strdup(description);
2389
2390                         if(_media->description == NULL)
2391                         {
2392                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2393                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2394                         }
2395                 }
2396                 else
2397                 {
2398                         _media->description = NULL;
2399                 }
2400         }
2401         else
2402         {
2403                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2404                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2405         }
2406
2407         return ret;
2408 }
2409
2410 int media_info_set_longitude(media_info_h media, double longitude)
2411 {
2412         int ret = MEDIA_CONTENT_ERROR_NONE;
2413         media_info_s *_media = (media_info_s*)media;
2414
2415         if(_media != NULL)
2416         {
2417                 _media->longitude = longitude;
2418         }
2419         else
2420         {
2421                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2422                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2423         }
2424
2425         return ret;
2426 }
2427
2428 int media_info_set_latitude(media_info_h media, double latitude)
2429 {
2430         int ret = MEDIA_CONTENT_ERROR_NONE;
2431         media_info_s *_media = (media_info_s*)media;
2432
2433         if(_media != NULL)
2434         {
2435                 _media->latitude = latitude;
2436         }
2437         else
2438         {
2439                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2440                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2441         }
2442
2443         return ret;
2444 }
2445
2446 int media_info_set_altitude(media_info_h media, double altitude)
2447 {
2448         int ret = MEDIA_CONTENT_ERROR_NONE;
2449         media_info_s *_media = (media_info_s*)media;
2450
2451         if(_media != NULL)
2452         {
2453                 _media->altitude = altitude;
2454         }
2455         else
2456         {
2457                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2458                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2459         }
2460
2461         return ret;
2462 }
2463
2464 int media_info_set_weather(media_info_h media, const char *weather)
2465 {
2466         int ret = MEDIA_CONTENT_ERROR_NONE;
2467         media_info_s *_media = (media_info_s*)media;
2468
2469         if(_media != NULL)
2470         {
2471                 SAFE_FREE(_media->weather);
2472
2473                 if(STRING_VALID(weather))
2474                 {
2475                         _media->weather = strdup(weather);
2476
2477                         if(_media->weather == NULL)
2478                         {
2479                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2480                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2481                         }
2482                 }
2483                 else
2484                 {
2485                         _media->weather = NULL;
2486                 }
2487         }
2488         else
2489         {
2490                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2491                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2492         }
2493
2494         return ret;
2495 }
2496
2497 int media_info_set_rating(media_info_h media, int rating)
2498 {
2499         int ret = MEDIA_CONTENT_ERROR_NONE;
2500         media_info_s *_media = (media_info_s*)media;
2501
2502         if(_media != NULL)
2503         {
2504                 _media->rating = rating;
2505         }
2506         else
2507         {
2508                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2509                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2510         }
2511
2512         return ret;
2513 }
2514
2515 int media_info_set_added_time(media_info_h media, time_t added_time)
2516 {
2517         int ret = MEDIA_CONTENT_ERROR_NONE;
2518
2519         media_info_s *_media = (media_info_s*)media;
2520
2521         if((_media != NULL) && (added_time >= 0))
2522         {
2523                 _media->added_time = added_time;
2524         }
2525         else
2526         {
2527                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2528                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2529         }
2530
2531         return ret;
2532 }
2533
2534 int media_info_set_favorite(media_info_h media, bool favorite)
2535 {
2536         int ret = MEDIA_CONTENT_ERROR_NONE;
2537         media_info_s *_media = (media_info_s*)media;
2538
2539         if(_media != NULL)
2540         {
2541                 _media->favourite = favorite;
2542         }
2543         else
2544         {
2545                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2546                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2547         }
2548
2549         return ret;
2550 }
2551
2552 int media_info_set_author(media_info_h media, const char *author)
2553 {
2554         int ret = MEDIA_CONTENT_ERROR_NONE;
2555         media_info_s *_media = (media_info_s*)media;
2556
2557         if(_media != NULL)
2558         {
2559                 if(STRING_VALID(author))
2560                 {
2561                         _media->author = strdup(author);
2562                         if(_media->author == NULL)
2563                         {
2564                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2565                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2566                         }
2567                 }
2568                 else
2569                 {
2570                         _media->author = NULL;
2571                 }
2572         }
2573         else
2574         {
2575                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2576                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2577         }
2578
2579         return ret;
2580 }
2581
2582 int media_info_set_provider(media_info_h media, const char *provider)
2583 {
2584         int ret = MEDIA_CONTENT_ERROR_NONE;
2585         media_info_s *_media = (media_info_s*)media;
2586
2587         if(_media != NULL)
2588         {
2589                 SAFE_FREE(_media->provider);
2590
2591                 if(STRING_VALID(provider))
2592                 {
2593                         _media->provider = strdup(provider);
2594                         if(_media->provider == NULL)
2595                         {
2596                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2597                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2598                         }
2599                 }
2600                 else
2601                 {
2602                         _media->provider = NULL;
2603                 }
2604         }
2605         else
2606         {
2607                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2608                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2609         }
2610
2611         return ret;
2612 }
2613
2614 int media_info_set_content_name(media_info_h media, const char *content_name)
2615 {
2616         int ret = MEDIA_CONTENT_ERROR_NONE;
2617         media_info_s *_media = (media_info_s*)media;
2618
2619         if(_media != NULL)
2620         {
2621                 SAFE_FREE(_media->content_name);
2622
2623                 if(STRING_VALID(content_name))
2624                 {
2625                         _media->content_name = strdup(content_name);
2626                         if(_media->content_name == NULL)
2627                         {
2628                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2629                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2630                         }
2631                 }
2632                 else
2633                 {
2634                         _media->content_name = NULL;
2635                 }
2636         }
2637         else
2638         {
2639                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2640                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2641         }
2642
2643         return ret;
2644 }
2645
2646 int media_info_set_category(media_info_h media, const char *category)
2647 {
2648         int ret = MEDIA_CONTENT_ERROR_NONE;
2649         media_info_s *_media = (media_info_s*)media;
2650
2651         if(_media != NULL)
2652         {
2653                 SAFE_FREE(_media->category);
2654
2655                 if(STRING_VALID(category))
2656                 {
2657                         _media->category = strdup(category);
2658                         if(_media->category == NULL)
2659                         {
2660                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2661                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2662                         }
2663                 }
2664                 else
2665                 {
2666                         _media->category = NULL;
2667                 }
2668         }
2669         else
2670         {
2671                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2672                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2673         }
2674
2675         return ret;
2676 }
2677
2678 int media_info_set_location_tag(media_info_h media, const char *location_tag)
2679 {
2680         int ret = MEDIA_CONTENT_ERROR_NONE;
2681         media_info_s *_media = (media_info_s*)media;
2682
2683         if(_media != NULL)
2684         {
2685                 SAFE_FREE(_media->location_tag);
2686
2687                 if(STRING_VALID(location_tag))
2688                 {
2689                         _media->location_tag = strdup(location_tag);
2690                         if(_media->location_tag == NULL)
2691                         {
2692                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2693                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2694                         }
2695                 }
2696                 else
2697                 {
2698                         _media->location_tag = NULL;
2699                 }
2700         }
2701         else
2702         {
2703                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2704                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2705         }
2706
2707         return ret;
2708 }
2709
2710 int media_info_set_age_rating(media_info_h media, const char *age_rating)
2711 {
2712         int ret = MEDIA_CONTENT_ERROR_NONE;
2713         media_info_s *_media = (media_info_s*)media;
2714
2715         if(_media != NULL)
2716         {
2717                 SAFE_FREE(_media->age_rating);
2718
2719                 if(STRING_VALID(age_rating))
2720                 {
2721                         _media->age_rating = strdup(age_rating);
2722                         if(_media->age_rating == NULL)
2723                         {
2724                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2725                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2726                         }
2727                 }
2728                 else
2729                 {
2730                         _media->age_rating = NULL;
2731                 }
2732         }
2733         else
2734         {
2735                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2736                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2737         }
2738
2739         return ret;
2740 }
2741
2742 int media_info_set_keyword(media_info_h media, const char *keyword)
2743 {
2744         int ret = MEDIA_CONTENT_ERROR_NONE;
2745         media_info_s *_media = (media_info_s*)media;
2746
2747         if(_media != NULL)
2748         {
2749                 SAFE_FREE(_media->keyword);
2750
2751                 if(STRING_VALID(keyword))
2752                 {
2753                         _media->keyword = strdup(keyword);
2754                         if(_media->keyword == NULL)
2755                         {
2756                                 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2757                                 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2758                         }
2759                 }
2760                 else
2761                 {
2762                         _media->keyword = NULL;
2763                 }
2764         }
2765         else
2766         {
2767                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2768                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2769         }
2770
2771         return ret;
2772 }
2773
2774 int media_info_update_to_db(media_info_h media)
2775 {
2776         int ret = MEDIA_CONTENT_ERROR_NONE;
2777         int len = 0;
2778         media_info_s *_media = (media_info_s*)media;
2779         char *set_sql = NULL;
2780         char sql[MAX_QUERY_SIZE];
2781         memset(sql, '\0', sizeof(sql));
2782
2783         if(_media != NULL && STRING_VALID(_media->media_id))
2784         {
2785                 /* This sql is due to sqlite3_mprintf's wrong operation when using floating point in the text format */
2786                 /* This code will be removed when sqlite3_mprintf works clearly */
2787                 char *test_sql = sqlite3_mprintf("%f, %f, %f", _media->longitude, _media->latitude, _media->altitude);
2788                 sqlite3_free(test_sql);
2789
2790                 /*Update Pinyin If Support Pinyin*/
2791                 char *file_name_pinyin = NULL;
2792                 char *description_pinyin = NULL;
2793                 char *author_pinyin = NULL;
2794                 char *provider_pinyin = NULL;
2795                 char *content_name_pinyin = NULL;
2796                 char *category_pinyin = NULL;
2797                 char *location_tag_pinyin = NULL;
2798                 char *age_rating_pinyin = NULL;
2799                 char *keyword_pinyin = NULL;
2800                 bool pinyin_support = FALSE;
2801
2802                 /*Update Pinyin If Support Pinyin*/
2803                 media_svc_check_pinyin_support(&pinyin_support);
2804                 if(pinyin_support)
2805                 {
2806                         if(STRING_VALID(_media->display_name))
2807                                 media_svc_get_pinyin(_content_get_db_handle(), _media->display_name, &file_name_pinyin);
2808                         if(STRING_VALID(_media->description))
2809                                 media_svc_get_pinyin(_content_get_db_handle(), _media->description, &description_pinyin);
2810                         if(STRING_VALID(_media->author))
2811                                 media_svc_get_pinyin(_content_get_db_handle(), _media->author, &author_pinyin);
2812                         if(STRING_VALID(_media->provider))
2813                                 media_svc_get_pinyin(_content_get_db_handle(), _media->provider, &provider_pinyin);
2814                         if(STRING_VALID(_media->content_name))
2815                                 media_svc_get_pinyin(_content_get_db_handle(), _media->content_name, &content_name_pinyin);
2816                         if(STRING_VALID(_media->category))
2817                                 media_svc_get_pinyin(_content_get_db_handle(), _media->category, &category_pinyin);
2818                         if(STRING_VALID(_media->location_tag))
2819                                 media_svc_get_pinyin(_content_get_db_handle(), _media->location_tag, &location_tag_pinyin);
2820                         if(STRING_VALID(_media->age_rating))
2821                                 media_svc_get_pinyin(_content_get_db_handle(), _media->age_rating, &age_rating_pinyin);
2822                         if(STRING_VALID(_media->keyword))
2823                                 media_svc_get_pinyin(_content_get_db_handle(), _media->keyword, &keyword_pinyin);
2824                 }
2825
2826                 set_sql = sqlite3_mprintf("file_name=%Q, added_time=%d, description=%Q, longitude=%f, latitude=%f, altitude=%f, \
2827                         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, \
2828                         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",
2829                         _media->display_name, _media->added_time, _media->description, _media->longitude, _media->latitude, _media->altitude, _media->rating, _media->favourite,
2830                         _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword, _media->weather, _media->sync_status,
2831                         file_name_pinyin, description_pinyin, author_pinyin, provider_pinyin, content_name_pinyin, category_pinyin, location_tag_pinyin, age_rating_pinyin, keyword_pinyin);
2832
2833                 len = snprintf(sql, sizeof(sql), "UPDATE %s SET %s WHERE media_uuid='%s'", DB_TABLE_MEDIA, set_sql, _media->media_id);
2834                 sqlite3_free(set_sql);
2835                 
2836                 SAFE_FREE(description_pinyin);
2837                 SAFE_FREE(author_pinyin);
2838                 SAFE_FREE(provider_pinyin);
2839                 SAFE_FREE(content_name_pinyin);
2840                 SAFE_FREE(category_pinyin);
2841                 SAFE_FREE(location_tag_pinyin);
2842                 SAFE_FREE(age_rating_pinyin);
2843                 SAFE_FREE(keyword_pinyin);
2844                 
2845                 if (len > 0) {
2846                         sql[len] = '\0';
2847                 } else {
2848                         media_content_error("snprintf failed");
2849                         return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2850                 }
2851
2852
2853                 ret = _content_query_sql(sql);
2854                 if (ret == MEDIA_CONTENT_ERROR_NONE) {
2855                         /*  Send notification for this update */
2856                         media_content_debug("Update is successfull. Send notification for this");
2857                         if (_media->file_path && _media->mime_type) {
2858                                 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);
2859                         } else {
2860                                 media_content_error("Can't media_db_update_send : path or mime type is NULL");
2861                         }
2862                 }
2863         }
2864         else
2865         {
2866                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2867                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2868         }
2869
2870         return ret;
2871 }
2872
2873 int media_info_refresh_metadata_to_db(const char *media_id)
2874 {
2875         int ret = MEDIA_CONTENT_ERROR_NONE;
2876         media_info_h media = NULL;
2877         char *file_path = NULL;
2878         media_content_storage_e storage_type = 0;
2879
2880         if(!STRING_VALID(media_id))
2881         {
2882                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2883                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2884         }
2885
2886         ret = media_info_get_media_from_db(media_id, &media);
2887         if(ret != MEDIA_CONTENT_ERROR_NONE)
2888         {
2889                 media_info_destroy(media);
2890                 return ret;
2891         }
2892
2893         ret = media_info_get_storage_type(media, &storage_type);
2894         if(ret != MEDIA_CONTENT_ERROR_NONE)
2895         {
2896                 media_info_destroy(media);
2897                 return ret;
2898         }
2899
2900         ret = media_info_get_file_path(media, &file_path);
2901         if(ret != MEDIA_CONTENT_ERROR_NONE)
2902         {
2903                 media_info_destroy(media);
2904                 return ret;
2905         }
2906
2907         ret = media_svc_refresh_item(_content_get_db_handle(), storage_type, file_path, tzplatform_getuid(TZ_USER_NAME));
2908
2909         SAFE_FREE(file_path);
2910         media_info_destroy(media);
2911
2912         return ret;
2913 }
2914
2915 int media_info_move_to_db(media_info_h media, const char* dst_path)
2916 {
2917         int ret = MEDIA_CONTENT_ERROR_NONE;
2918
2919         int src_storage_type = 0;
2920         int dst_storage_type = 0;
2921
2922         if(media == NULL || !STRING_VALID(dst_path))
2923         {
2924                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2925                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2926         }
2927
2928         media_info_s *_media = (media_info_s*)media;
2929
2930         ret = _media_util_get_store_type_by_path(_media->file_path, &src_storage_type);
2931         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2932         ret = _media_util_get_store_type_by_path(dst_path, &dst_storage_type);
2933         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2934
2935         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));
2936         return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2937 }
2938
2939 int media_info_create_thumbnail(media_info_h media, media_thumbnail_completed_cb callback, void *user_data)
2940 {
2941         int ret = MEDIA_CONTENT_ERROR_NONE;
2942         media_info_s *_media = (media_info_s*)media;
2943
2944         if(_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path))
2945         {
2946                 media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s*)calloc(1, sizeof(media_thumbnail_cb_s));
2947                 _thumb_cb->handle = _media;
2948                 _thumb_cb->user_data = user_data;
2949                 _thumb_cb->thumbnail_completed_cb = callback;
2950
2951                 ret = thumbnail_request_from_db_async(_media->file_path, (ThumbFunc)__media_info_thumbnail_completed_cb, (void *)_thumb_cb, tzplatform_getuid(TZ_USER_NAME));
2952                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
2953         }
2954         else
2955         {
2956                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2957                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2958         }
2959
2960         return ret;
2961 }
2962
2963 int media_info_cancel_thumbnail(media_info_h media)
2964 {
2965         int ret = MEDIA_CONTENT_ERROR_NONE;
2966         media_info_s *_media = (media_info_s*)media;
2967
2968         if(_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path))
2969         {
2970                 ret = thumbnail_request_cancel_media(_media->file_path, tzplatform_getuid(TZ_USER_NAME));
2971                 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
2972         }
2973         else
2974         {
2975                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2976                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2977         }
2978
2979         return ret;
2980 }