2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
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>
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);
30 static int __media_info_get_media_info_from_db(char *path, media_info_h media)
32 int ret = MEDIA_CONTENT_ERROR_NONE;
33 sqlite3_stmt *stmt = NULL;
34 char *select_query = NULL;
35 media_info_s *_media = (media_info_s*)media;
39 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
40 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
43 select_query = sqlite3_mprintf(SELECT_MEDIA_BY_PATH, path);
45 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
46 sqlite3_free(select_query);
47 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
49 if(sqlite3_step(stmt) == SQLITE_ROW)
51 _media_info_item_get_detail(stmt, (media_info_h)_media);
52 media_content_debug("New Media ID: %s", _media->media_id);
54 media_content_debug("There's no media!!");
57 while(sqlite3_step(stmt) == SQLITE_ROW)
59 _media_info_item_get_detail(stmt, (media_info_h)_media);
60 media_content_debug("New Media ID: %s", _media->media_id);
63 SQLITE3_FINALIZE(stmt);
68 static void __media_info_insert_completed_cb(media_request_result_s *result, void *user_data)
70 int ret = MEDIA_CONTENT_ERROR_NONE;
71 media_insert_cb_s *_cb_data = (media_insert_cb_s *)user_data;
73 if (_cb_data && _cb_data->insert_completed_cb) {
75 ret = _content_error_capi(MEDIA_CONTENT_TYPE, result->result);
78 _cb_data->insert_completed_cb(ret, _cb_data->user_data);
80 if (STRING_VALID(_cb_data->insert_list_path)) {
81 if (unlink(_cb_data->insert_list_path) < 0) {
82 media_content_error("failed to delete : %s", strerror(errno));
84 SAFE_FREE(_cb_data->insert_list_path);
93 static void __media_info_thumbnail_completed_cb(int error, const char *path, void *user_data)
95 int error_value = MEDIA_CONTENT_ERROR_NONE;
97 media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s *)user_data;
98 media_info_s *media = NULL;
100 if(_thumb_cb != NULL)
102 media = _thumb_cb->handle;
103 if((media != NULL) && STRING_VALID(path))
105 SAFE_FREE(media->thumbnail_path);
106 media->thumbnail_path = strdup(path);
109 media_content_debug("error [%d], thumbnail_path [%s]", error, path);
110 error_value = _content_error_capi(MEDIA_THUMBNAIL_TYPE, error);
111 if (_thumb_cb->thumbnail_completed_cb)
112 _thumb_cb->thumbnail_completed_cb(error_value, path, _thumb_cb->user_data);
115 SAFE_FREE(_thumb_cb);
120 static bool __media_info_delete_batch_cb(media_info_h media, void *user_data)
122 char *thumb_path = NULL;
123 media_content_type_e media_type = 0;
127 media_content_debug("NO Item \n");
131 media_info_get_media_type(media, &media_type);
132 media_content_debug("media_type : [%d] \n", media_type);
134 media_info_get_thumbnail_path(media, &thumb_path);
135 if (STRING_VALID(thumb_path)) {
136 if (strncmp(MEDIA_CONTENT_THUMB_DEFAULT_PATH, thumb_path, strlen(MEDIA_CONTENT_THUMB_DEFAULT_PATH)) != 0) {
137 media_content_debug("Deleting thumbnail : [%s] \n", thumb_path);
138 if (unlink(thumb_path) < 0) {
139 media_content_error("failed to delete : %s", strerror(errno));
143 SAFE_FREE(thumb_path);
149 void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media)
151 //#define MEDIA_INFO_ITEM "media_uuid, path, file_name, media_type, mime_type, size, added_time, modified_time, thumbnail_path, description,
152 // 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"
154 media_info_s *_media = (media_info_s*)media;
156 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
157 _media->media_id = strdup((const char *)sqlite3_column_text(stmt, 0));
159 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1)))
160 _media->file_path = strdup((const char *)sqlite3_column_text(stmt, 1));
162 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 2)))
163 _media->display_name = strdup((const char *)sqlite3_column_text(stmt, 2));
165 _media->media_type = (int)sqlite3_column_int(stmt, 3);
167 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 4)))
168 _media->mime_type = strdup((const char *)sqlite3_column_text(stmt, 4));
170 _media->size = (unsigned long long)sqlite3_column_int64(stmt, 5);
172 _media->added_time = (int)sqlite3_column_int(stmt, 6);
174 _media->modified_time = (int)sqlite3_column_int(stmt, 7);
176 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 8)))
177 _media->thumbnail_path= strdup((const char *)sqlite3_column_text(stmt, 8));
179 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 9)))
180 _media->description = strdup((const char *)sqlite3_column_text(stmt, 9));
182 _media->rating = (int)sqlite3_column_int(stmt,10);
184 _media->favourite = (int)sqlite3_column_int(stmt, 11);
186 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 12)))
187 _media->author = strdup((const char *)sqlite3_column_text(stmt, 12));
189 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 13)))
190 _media->provider = strdup((const char *)sqlite3_column_text(stmt, 13));
192 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 14)))
193 _media->content_name = strdup((const char *)sqlite3_column_text(stmt, 14));
195 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 15)))
196 _media->category = strdup((const char *)sqlite3_column_text(stmt, 15));
198 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 16)))
199 _media->location_tag = strdup((const char *)sqlite3_column_text(stmt, 16));
201 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 17)))
202 _media->age_rating = strdup((const char *)sqlite3_column_text(stmt, 17));
204 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 18)))
205 _media->keyword = strdup((const char *)sqlite3_column_text(stmt, 18));
207 _media->is_drm = (int)sqlite3_column_int(stmt, 19);
209 _media->storage_type = (int)sqlite3_column_int(stmt, 20);
211 _media->longitude = (double)sqlite3_column_double(stmt, 21);
212 _media->latitude = (double)sqlite3_column_double(stmt, 22);
213 _media->altitude = (double)sqlite3_column_double(stmt, 23);
215 if(_media->media_type == MEDIA_CONTENT_TYPE_IMAGE) {
216 _media->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
217 if(_media->image_meta) {
218 if(STRING_VALID(_media->media_id))
219 _media->image_meta->media_id = strdup(_media->media_id);
221 _media->image_meta->width = sqlite3_column_int(stmt, 24);
222 _media->image_meta->height = sqlite3_column_int(stmt, 25);
224 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 26)))
225 _media->image_meta->date_taken = strdup((const char *)sqlite3_column_text(stmt, 26));
227 _media->image_meta->orientation = sqlite3_column_int(stmt, 27);
230 } else if(_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
231 _media->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
232 if(_media->video_meta) {
233 if(STRING_VALID(_media->media_id))
234 _media->video_meta->media_id = strdup(_media->media_id);
236 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 28)))
237 _media->video_meta->title = strdup((const char *)sqlite3_column_text(stmt, 28));
239 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 29)))
240 _media->video_meta->album = strdup((const char *)sqlite3_column_text(stmt, 29));
242 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 30)))
243 _media->video_meta->artist = strdup((const char *)sqlite3_column_text(stmt, 30));
245 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 31)))
246 _media->video_meta->genre = strdup((const char *)sqlite3_column_text(stmt, 31));
248 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 32)))
249 _media->video_meta->composer = strdup((const char *)sqlite3_column_text(stmt, 32));
251 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 33)))
252 _media->video_meta->year = strdup((const char *)sqlite3_column_text(stmt, 33));
254 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 34)))
255 _media->video_meta->recorded_date = strdup((const char *)sqlite3_column_text(stmt, 34));
257 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 35)))
258 _media->video_meta->copyright = strdup((const char *)sqlite3_column_text(stmt, 35));
260 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 36)))
261 _media->video_meta->track_num = strdup((const char *)sqlite3_column_text(stmt, 36));
263 _media->video_meta->bitrate = sqlite3_column_int(stmt, 37);
264 _media->video_meta->duration = sqlite3_column_int(stmt, 38);
265 _media->video_meta->played_count = sqlite3_column_int(stmt, 39);
266 _media->video_meta->played_time = sqlite3_column_int(stmt, 40);
267 _media->video_meta->played_position = sqlite3_column_int(stmt, 41);
268 _media->video_meta->width = sqlite3_column_int(stmt, 24);
269 _media->video_meta->height = sqlite3_column_int(stmt, 25);
273 else if((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
274 _media->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
275 if(_media->audio_meta) {
276 if(STRING_VALID(_media->media_id))
277 _media->audio_meta->media_id = strdup(_media->media_id);
279 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 28)))
280 _media->audio_meta->title = strdup((const char *)sqlite3_column_text(stmt, 28));
282 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 29)))
283 _media->audio_meta->album = strdup((const char *)sqlite3_column_text(stmt, 29));
285 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 30)))
286 _media->audio_meta->artist = strdup((const char *)sqlite3_column_text(stmt, 30));
288 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 31)))
289 _media->audio_meta->genre = strdup((const char *)sqlite3_column_text(stmt, 31));
291 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 32)))
292 _media->audio_meta->composer = strdup((const char *)sqlite3_column_text(stmt, 32));
294 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 33)))
295 _media->audio_meta->year = strdup((const char *)sqlite3_column_text(stmt, 33));
297 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 34)))
298 _media->audio_meta->recorded_date = strdup((const char *)sqlite3_column_text(stmt, 34));
300 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 35)))
301 _media->audio_meta->copyright = strdup((const char *)sqlite3_column_text(stmt, 35));
303 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 36)))
304 _media->audio_meta->track_num = strdup((const char *)sqlite3_column_text(stmt, 36));
306 _media->audio_meta->bitrate = sqlite3_column_int(stmt, 37);
307 _media->audio_meta->duration = sqlite3_column_int(stmt, 38);
308 _media->audio_meta->played_count = sqlite3_column_int(stmt, 39);
309 _media->audio_meta->played_time = sqlite3_column_int(stmt, 40);
310 _media->audio_meta->played_position = sqlite3_column_int(stmt, 41);
311 _media->audio_meta->samplerate = sqlite3_column_int(stmt, 42);
312 _media->audio_meta->channel = sqlite3_column_int(stmt, 43);
318 int media_info_insert_to_db (const char *path, media_info_h *info)
320 int ret = MEDIA_CONTENT_ERROR_NONE;
322 if(!STRING_VALID(path))
324 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
325 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
330 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
331 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
334 media_content_debug("Register: %s", path);
335 ret = media_file_register(path);
336 if(ret != MS_MEDIA_ERR_NONE)
338 media_content_error("media_file_register failed");
339 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
342 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
345 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
346 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
349 _media->file_path = strdup(path);
350 if(_media->file_path == NULL)
352 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
354 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
357 ret = __media_info_get_media_info_from_db(_media->file_path, (media_info_h)_media);
359 *info = (media_info_h)_media;
364 int media_info_insert_batch_to_db(
365 const char **path_array,
366 unsigned int array_length,
367 media_insert_completed_cb completed_cb,
370 int ret = MEDIA_CONTENT_ERROR_NONE;
372 if (path_array == NULL)
374 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
375 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
378 if (array_length <= 0)
380 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
381 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
385 char list_path[255] = {0,};
389 for (i = 0; i < BATCH_REQUEST_MAX; i++) {
390 snprintf(list_path, sizeof(list_path), "%s/request-%ld-%d", MEDIA_CONTENT_INSERT_FILES_PATH, media_content_gettid(), i);
392 if (g_file_test(list_path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
393 memset(list_path, 0x00, sizeof(list_path));
396 media_content_debug("The request file list path : %s", list_path);
401 if (i == BATCH_REQUEST_MAX) {
402 media_content_error("Too many batch request for one thread");
403 return MEDIA_CONTENT_ERROR_DB_BUSY;
406 fp = fopen(list_path, "w");
408 media_content_error("failed to open file : %s [%s]", list_path, strerror(errno));
409 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
412 for (i = 0; i < array_length; i++) {
413 if (STRING_VALID(path_array[i])) {
414 int size = strlen(path_array[i]);
416 nwrites = fwrite(path_array[i], 1, size, fp);
417 if (nwrites != size) {
418 media_content_error("failed to write thumbnail : %s", strerror(errno));
420 if (unlink(list_path) < 0) {
421 media_content_error("failed to delete : %s", strerror(errno));
423 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
426 nwrites = fwrite("\n", 1, 1, fp);
428 media_content_error("failed to write thumbnail : %s", strerror(errno));
430 if (unlink(list_path) < 0) {
431 media_content_error("failed to delete : %s", strerror(errno));
433 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
436 media_content_error("path[%d] is invalid string", i);
442 media_insert_cb_s *_cb_data = (media_insert_cb_s *)calloc(1, sizeof(media_insert_cb_s));
443 _cb_data->insert_completed_cb = completed_cb;
444 _cb_data->user_data = user_data;
445 _cb_data->insert_list_path = strdup(list_path);
447 ret = media_files_register(list_path, __media_info_insert_completed_cb, _cb_data);
450 media_content_error("media_files_register failed : %d", ret);
451 if (unlink(list_path) < 0) {
452 media_content_error("failed to delete : %s", strerror(errno));
454 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
458 ret = media_svc_insert_item_begin(_content_get_db_handle(), array_length);
461 media_content_error("media_svc_insert_item_begin failed : %d", ret);
462 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
466 media_svc_media_type_e media_type;
467 media_svc_storage_type_e storage_type;
470 for (i = 0; i < array_length; i++) {
471 memset(mime_type, 0x00, sizeof(mime_type));
472 path = (char*)path_array[i];
474 ret = media_svc_get_storage_type(path, &storage_type);
476 media_content_error("media_svc_get_storage_type failed : %d (%s)", ret, path);
480 ret = media_svc_get_mime_type(path, mime_type);
482 media_content_error("media_svc_get_mime_type failed : %d (%s)", ret, path);
486 ret = media_svc_get_media_type(path, mime_type, &media_type);
488 media_content_error("media_svc_get_media_type failed : %d (%s)", ret, path);
492 ret = media_svc_insert_item_bulk(_content_get_db_handle(), storage_type, path, mime_type, media_type);
494 media_content_error("media_svc_insert_item_bulk failed : %d (%s)", ret, path);
499 ret = media_svc_insert_item_end(_content_get_db_handle());
502 media_content_error("media_svc_insert_item_end failed : %d", ret);
503 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
507 completed_cb(MEDIA_CONTENT_ERROR_NONE, user_data);
513 int media_info_delete_from_db(const char *media_id)
515 int ret = MEDIA_CONTENT_ERROR_NONE;
517 char *query_string = NULL;
519 if(!STRING_VALID(media_id))
521 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
522 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
525 query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA, media_id);
527 ret = _content_query_sql(query_string);
529 sqlite3_free(query_string);
534 int media_info_delete_batch_from_db(filter_h filter)
536 int ret = MEDIA_CONTENT_ERROR_NONE;
538 char *query_string = NULL;
539 filter_s *_filter = NULL;
541 char *condition_query = NULL;
545 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
546 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
549 /* Delete thumbnail of each item */
550 ret = _media_db_get_group_item(NULL, filter, __media_info_delete_batch_cb, NULL, MEDIA_GROUP_NONE);
552 _filter = (filter_s*)filter;
553 attr = _content_get_attirbute_handle();
555 if(_filter->condition)
557 ret = _media_filter_attribute_generate(attr, _filter->condition, _filter->condition_collate_type, &condition_query);
558 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
561 if(STRING_VALID(condition_query))
563 query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA_BATCH, condition_query);
567 SAFE_FREE(condition_query);
568 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
571 ret = _content_query_sql(query_string);
573 SAFE_FREE(condition_query);
574 sqlite3_free(query_string);
579 int media_info_destroy(media_info_h media)
581 int ret = MEDIA_CONTENT_ERROR_NONE;
582 media_info_s *_media = (media_info_s*)media;
586 SAFE_FREE(_media->media_id);
587 SAFE_FREE(_media->file_path);
588 SAFE_FREE(_media->display_name);
589 SAFE_FREE(_media->mime_type);
590 SAFE_FREE(_media->thumbnail_path);
591 SAFE_FREE(_media->description);
592 SAFE_FREE(_media->author);
593 SAFE_FREE(_media->provider);
594 SAFE_FREE(_media->content_name);
595 SAFE_FREE(_media->category);
596 SAFE_FREE(_media->location_tag);
597 SAFE_FREE(_media->age_rating);
598 SAFE_FREE(_media->keyword);
600 if(_media->image_meta) {
601 SAFE_FREE(_media->image_meta->media_id);
602 SAFE_FREE(_media->image_meta->date_taken);
604 SAFE_FREE(_media->image_meta);
605 } else if(_media->video_meta) {
606 SAFE_FREE(_media->video_meta->media_id);
607 SAFE_FREE(_media->video_meta->title);
608 SAFE_FREE(_media->video_meta->album);
609 SAFE_FREE(_media->video_meta->artist);
610 SAFE_FREE(_media->video_meta->genre);
611 SAFE_FREE(_media->video_meta->composer);
612 SAFE_FREE(_media->video_meta->year);
613 SAFE_FREE(_media->video_meta->recorded_date);
614 SAFE_FREE(_media->video_meta->copyright);
615 SAFE_FREE(_media->video_meta->track_num);
617 SAFE_FREE(_media->video_meta);
618 } else if(_media->audio_meta) {
619 SAFE_FREE(_media->audio_meta->media_id);
620 SAFE_FREE(_media->audio_meta->title);
621 SAFE_FREE(_media->audio_meta->album);
622 SAFE_FREE(_media->audio_meta->artist);
623 SAFE_FREE(_media->audio_meta->genre);
624 SAFE_FREE(_media->audio_meta->composer);
625 SAFE_FREE(_media->audio_meta->year);
626 SAFE_FREE(_media->audio_meta->recorded_date);
627 SAFE_FREE(_media->audio_meta->copyright);
628 SAFE_FREE(_media->audio_meta->track_num);
630 SAFE_FREE(_media->audio_meta);
635 ret = MEDIA_CONTENT_ERROR_NONE;
639 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
640 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
646 int media_info_clone(media_info_h *dst, media_info_h src)
648 int ret = MEDIA_CONTENT_ERROR_NONE;
649 media_info_s *_src = (media_info_s*)src;
654 media_info_s *_dst = (media_info_s*)calloc(1, sizeof(media_info_s));
658 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
659 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
662 if(STRING_VALID(_src->media_id))
664 _dst->media_id = strdup(_src->media_id);
665 if(_dst->media_id == NULL)
667 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
668 media_info_destroy((media_info_h)_dst);
669 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
672 if(STRING_VALID(_src->file_path))
674 _dst->file_path = strdup(_src->file_path);
675 if(_dst->file_path == NULL)
677 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
678 media_info_destroy((media_info_h)_dst);
679 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
682 if(STRING_VALID(_src->display_name))
684 _dst->display_name = strdup(_src->display_name);
685 if(_dst->display_name == NULL)
687 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
688 media_info_destroy((media_info_h)_dst);
689 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
692 if(STRING_VALID(_src->mime_type))
694 _dst->mime_type = strdup(_src->mime_type);
695 if(_dst->mime_type == NULL)
697 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
698 media_info_destroy((media_info_h)_dst);
699 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
702 if(STRING_VALID(_src->thumbnail_path))
704 _dst->thumbnail_path = strdup(_src->thumbnail_path);
705 if(_dst->thumbnail_path == NULL)
707 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
708 media_info_destroy((media_info_h)_dst);
709 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
712 if(STRING_VALID(_src->description))
714 _dst->description = strdup(_src->description);
715 if(_dst->description == NULL)
717 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
718 media_info_destroy((media_info_h)_dst);
719 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
722 if(STRING_VALID(_src->author))
724 _dst->author = strdup(_src->author);
725 if(_dst->author == NULL)
727 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
728 media_info_destroy((media_info_h)_dst);
729 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
732 if(STRING_VALID(_src->provider))
734 _dst->provider = strdup(_src->provider);
735 if(_dst->provider == NULL)
737 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
738 media_info_destroy((media_info_h)_dst);
739 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
742 if(STRING_VALID(_src->content_name))
744 _dst->content_name = strdup(_src->content_name);
745 if(_dst->content_name == NULL)
747 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
748 media_info_destroy((media_info_h)_dst);
749 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
752 if(STRING_VALID(_src->category))
754 _dst->category = strdup(_src->category);
755 if(_dst->category == NULL)
757 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
758 media_info_destroy((media_info_h)_dst);
759 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
762 if(STRING_VALID(_src->location_tag))
764 _dst->location_tag = strdup(_src->location_tag);
765 if(_dst->location_tag == NULL)
767 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
768 media_info_destroy((media_info_h)_dst);
769 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
772 if(STRING_VALID(_src->age_rating))
774 _dst->age_rating = strdup(_src->age_rating);
775 if(_dst->age_rating == NULL)
777 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
778 media_info_destroy((media_info_h)_dst);
779 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
782 if(STRING_VALID(_src->keyword))
784 _dst->keyword = strdup(_src->keyword);
785 if(_dst->keyword == NULL)
787 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
788 media_info_destroy((media_info_h)_dst);
789 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
793 _dst->media_type = _src->media_type;
794 _dst->size = _src->size;
795 _dst->added_time = _src->added_time;
796 _dst->modified_time = _src->modified_time;
797 _dst->longitude = _src->longitude;
798 _dst->latitude = _src->latitude;
799 _dst->altitude = _src->altitude;
800 _dst->rating = _src->rating;
801 _dst->favourite = _src->favourite;
802 _dst->is_drm = _src->is_drm;
804 if(_src->media_type == MEDIA_CONTENT_TYPE_IMAGE && _src->image_meta) {
805 _dst->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
806 if(_dst->image_meta == NULL)
808 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
809 media_info_destroy((media_info_h)_dst);
810 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
813 if(STRING_VALID(_src->image_meta->media_id))
815 _dst->image_meta->media_id = strdup(_src->image_meta->media_id);
816 if(_dst->image_meta->media_id == NULL)
818 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
819 media_info_destroy((media_info_h)_dst);
820 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
823 if(STRING_VALID(_src->image_meta->date_taken))
825 _dst->image_meta->date_taken = strdup(_src->image_meta->date_taken);
826 if(_dst->image_meta->date_taken == NULL)
828 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
829 media_info_destroy((media_info_h)_dst);
830 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
834 _dst->image_meta->width = _src->image_meta->width;
835 _dst->image_meta->height = _src->image_meta->height;
836 _dst->image_meta->orientation = _src->image_meta->orientation;
838 } else if(_src->media_type == MEDIA_CONTENT_TYPE_VIDEO && _src->video_meta) {
839 _dst->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
840 if(_dst->video_meta == NULL)
842 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
843 media_info_destroy((media_info_h)_dst);
844 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
847 if(STRING_VALID(_src->video_meta->media_id))
849 _dst->video_meta->media_id = strdup(_src->video_meta->media_id);
850 if(_dst->video_meta->media_id == NULL)
852 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
853 media_info_destroy((media_info_h)_dst);
854 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
857 if(STRING_VALID(_src->video_meta->title))
859 _dst->video_meta->title = strdup(_src->video_meta->title);
860 if(_dst->video_meta->title == NULL)
862 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
863 media_info_destroy((media_info_h)_dst);
864 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
867 if(STRING_VALID(_src->video_meta->album))
869 _dst->video_meta->album = strdup(_src->video_meta->album);
870 if(_dst->video_meta->album == NULL)
872 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
873 media_info_destroy((media_info_h)_dst);
874 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
877 if(STRING_VALID(_src->video_meta->artist))
879 _dst->video_meta->artist = strdup(_src->video_meta->artist);
880 if(_dst->video_meta->artist == NULL)
882 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
883 media_info_destroy((media_info_h)_dst);
884 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
887 if(STRING_VALID(_src->video_meta->genre))
889 _dst->video_meta->genre = strdup(_src->video_meta->genre);
890 if(_dst->video_meta->genre == NULL)
892 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
893 media_info_destroy((media_info_h)_dst);
894 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
897 if(STRING_VALID(_src->video_meta->composer))
899 _dst->video_meta->composer = strdup(_src->video_meta->composer);
900 if(_dst->video_meta->composer == NULL)
902 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
903 media_info_destroy((media_info_h)_dst);
904 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
907 if(STRING_VALID(_src->video_meta->year))
909 _dst->video_meta->year = strdup(_src->video_meta->year);
910 if(_dst->video_meta->year == NULL)
912 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
913 media_info_destroy((media_info_h)_dst);
914 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
917 if(STRING_VALID(_src->video_meta->recorded_date))
919 _dst->video_meta->recorded_date = strdup(_src->video_meta->recorded_date);
920 if(_dst->video_meta->recorded_date == NULL)
922 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
923 media_info_destroy((media_info_h)_dst);
924 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
927 if(STRING_VALID(_src->video_meta->copyright))
929 _dst->video_meta->copyright = strdup(_src->video_meta->copyright);
930 if(_dst->video_meta->copyright == NULL)
932 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
933 media_info_destroy((media_info_h)_dst);
934 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
937 if(STRING_VALID(_src->video_meta->track_num))
939 _dst->video_meta->track_num = strdup(_src->video_meta->track_num);
940 if(_dst->video_meta->track_num == NULL)
942 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
943 media_info_destroy((media_info_h)_dst);
944 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
948 _dst->video_meta->width = _src->video_meta->width;
949 _dst->video_meta->height = _src->video_meta->height;
950 _dst->video_meta->duration = _src->video_meta->duration;
951 _dst->video_meta->bitrate = _src->video_meta->bitrate;
952 _dst->video_meta->played_count = _src->video_meta->played_count;
953 _dst->video_meta->played_time = _src->video_meta->played_time;
954 _dst->video_meta->played_position = _src->video_meta->played_position;
956 } else if((_src->media_type == MEDIA_CONTENT_TYPE_MUSIC || _src->media_type == MEDIA_CONTENT_TYPE_SOUND) && _src->audio_meta) {
957 _dst->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
958 if(_dst->audio_meta == NULL)
960 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
961 media_info_destroy((media_info_h)_dst);
962 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
965 if(STRING_VALID(_src->audio_meta->media_id))
967 _dst->audio_meta->media_id = strdup(_src->audio_meta->media_id);
968 if(_dst->audio_meta->media_id == NULL)
970 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
971 media_info_destroy((media_info_h)_dst);
972 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
975 if(STRING_VALID(_src->audio_meta->title))
977 _dst->audio_meta->title = strdup(_src->audio_meta->title);
978 if(_dst->audio_meta->title == NULL)
980 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
981 media_info_destroy((media_info_h)_dst);
982 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
985 if(STRING_VALID(_src->audio_meta->album))
987 _dst->audio_meta->album = strdup(_src->audio_meta->album);
988 if(_dst->audio_meta->album == NULL)
990 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
991 media_info_destroy((media_info_h)_dst);
992 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
995 if(STRING_VALID(_src->audio_meta->artist))
997 _dst->audio_meta->artist = strdup(_src->audio_meta->artist);
998 if(_dst->audio_meta->artist == NULL)
1000 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1001 media_info_destroy((media_info_h)_dst);
1002 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1005 if(STRING_VALID(_src->audio_meta->genre))
1007 _dst->audio_meta->genre = strdup(_src->audio_meta->genre);
1008 if(_dst->audio_meta->genre == NULL)
1010 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1011 media_info_destroy((media_info_h)_dst);
1012 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1015 if(STRING_VALID(_src->audio_meta->composer))
1017 _dst->audio_meta->composer = strdup(_src->audio_meta->composer);
1018 if(_dst->audio_meta->composer == NULL)
1020 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1021 media_info_destroy((media_info_h)_dst);
1022 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1025 if(STRING_VALID(_src->audio_meta->year))
1027 _dst->audio_meta->year = strdup(_src->audio_meta->year);
1028 if(_dst->audio_meta->year == NULL)
1030 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1031 media_info_destroy((media_info_h)_dst);
1032 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1035 if(STRING_VALID(_src->audio_meta->recorded_date))
1037 _dst->audio_meta->recorded_date = strdup(_src->audio_meta->recorded_date);
1038 if(_dst->audio_meta->recorded_date == NULL)
1040 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1041 media_info_destroy((media_info_h)_dst);
1042 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1045 if(STRING_VALID(_src->audio_meta->copyright))
1047 _dst->audio_meta->copyright = strdup(_src->audio_meta->copyright);
1048 if(_dst->audio_meta->copyright == NULL)
1050 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1051 media_info_destroy((media_info_h)_dst);
1052 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1055 if(STRING_VALID(_src->audio_meta->track_num))
1057 _dst->audio_meta->track_num = strdup(_src->audio_meta->track_num);
1058 if(_dst->audio_meta->track_num == NULL)
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;
1066 _dst->audio_meta->channel = _src->audio_meta->channel;
1067 _dst->audio_meta->samplerate = _src->audio_meta->samplerate;
1068 _dst->audio_meta->duration = _src->audio_meta->duration;
1069 _dst->audio_meta->bitrate = _src->audio_meta->bitrate;
1070 _dst->audio_meta->played_count = _src->audio_meta->played_count;
1071 _dst->audio_meta->played_time = _src->audio_meta->played_time;
1072 _dst->audio_meta->played_position = _src->audio_meta->played_position;
1075 *dst = (media_info_h)_dst;
1077 ret = MEDIA_CONTENT_ERROR_NONE;
1081 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1082 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1088 int media_info_get_media_count_from_db(filter_h filter, int *media_count)
1090 int ret = MEDIA_CONTENT_ERROR_NONE;
1092 media_content_debug_func();
1094 if(media_count == NULL)
1096 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1097 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1102 ret = _media_db_get_group_item_count(NULL, filter, MEDIA_GROUP_NONE, media_count);
1107 int media_info_foreach_media_from_db(filter_h filter, media_info_cb callback, void *user_data)
1109 int ret = MEDIA_CONTENT_ERROR_NONE;
1111 media_content_debug_func();
1113 if(callback == NULL)
1115 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1116 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1119 ret = _media_db_get_group_item(NULL, filter, callback, user_data, MEDIA_GROUP_NONE);
1124 int media_info_get_tag_count_from_db(const char *media_id, filter_h filter, int *tag_count)
1126 int ret = MEDIA_CONTENT_ERROR_NONE;
1128 media_content_debug_func();
1130 if(STRING_VALID(media_id) && tag_count)
1132 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_TAG_BY_MEDIA_ID, tag_count);
1136 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1137 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1143 int media_info_foreach_tag_from_db(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
1145 int ret = MEDIA_CONTENT_ERROR_NONE;
1147 media_content_debug_func();
1149 if((callback != NULL) && STRING_VALID(media_id))
1151 ret = _media_db_get_tag(media_id, filter, callback, user_data);
1155 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1156 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1162 int media_info_get_bookmark_count_from_db(const char *media_id, filter_h filter, int *bookmark_count)
1164 int ret = MEDIA_CONTENT_ERROR_NONE;
1166 media_content_debug_func();
1168 if(STRING_VALID(media_id) && bookmark_count)
1170 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID, bookmark_count);
1174 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1175 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1181 int media_info_foreach_bookmark_from_db (const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
1183 int ret = MEDIA_CONTENT_ERROR_NONE;
1185 media_content_debug_func();
1187 if((callback != NULL) && STRING_VALID(media_id))
1189 ret = _media_db_get_bookmark(media_id, filter, callback, user_data);
1193 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1194 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1200 int media_info_get_image(media_info_h media, image_meta_h *image)
1202 int ret = MEDIA_CONTENT_ERROR_NONE;
1204 media_info_s *_media = (media_info_s*)media;
1205 media_content_debug_func();
1209 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1210 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1213 if(_media->media_type != MEDIA_CONTENT_TYPE_IMAGE)
1215 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1216 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1219 if(_media->image_meta == NULL)
1221 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1222 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1225 image_meta_s *_image = (image_meta_s*)calloc(1, sizeof(image_meta_s));
1229 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1230 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1233 if(STRING_VALID(_media->media_id)) {
1234 _image->media_id = strdup(_media->media_id);
1237 _image->width = _media->image_meta->width;
1238 _image->height = _media->image_meta->height;
1239 _image->orientation = _media->image_meta->orientation;
1241 if(STRING_VALID(_media->image_meta->date_taken)) {
1242 _image->date_taken = strdup(_media->image_meta->date_taken);
1245 *image = (image_meta_h)_image;
1250 int media_info_get_video(media_info_h media, video_meta_h *video)
1252 int ret = MEDIA_CONTENT_ERROR_NONE;
1254 media_info_s *_media = (media_info_s*)media;
1255 media_content_debug_func();
1259 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1260 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1263 if(_media->media_type != MEDIA_CONTENT_TYPE_VIDEO)
1265 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1266 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1269 if(_media->video_meta == NULL)
1271 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1272 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1275 video_meta_s *_video = (video_meta_s*)calloc(1, sizeof(video_meta_s));
1279 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1280 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1283 if(STRING_VALID(_media->media_id)) {
1284 _video->media_id = strdup(_media->media_id);
1287 if(STRING_VALID(_media->video_meta->title)) {
1288 _video->title = strdup(_media->video_meta->title);
1290 if(STRING_VALID(_media->video_meta->album)) {
1291 _video->album = strdup(_media->video_meta->album);
1293 if(STRING_VALID(_media->video_meta->artist)) {
1294 _video->artist = strdup(_media->video_meta->artist);
1296 if(STRING_VALID(_media->video_meta->genre)) {
1297 _video->genre = strdup(_media->video_meta->genre);
1299 if(STRING_VALID(_media->video_meta->composer)) {
1300 _video->composer = strdup(_media->video_meta->composer);
1302 if(STRING_VALID(_media->video_meta->year)) {
1303 _video->year = strdup(_media->video_meta->year);
1305 if(STRING_VALID(_media->video_meta->recorded_date)) {
1306 _video->recorded_date = strdup(_media->video_meta->recorded_date);
1308 if(STRING_VALID(_media->video_meta->copyright)) {
1309 _video->copyright = strdup(_media->video_meta->copyright);
1311 if(STRING_VALID(_media->video_meta->track_num)) {
1312 _video->track_num = strdup(_media->video_meta->track_num);
1315 _video->width = _media->video_meta->width;
1316 _video->height = _media->video_meta->height;
1317 _video->duration = _media->video_meta->duration;
1318 _video->bitrate = _media->video_meta->bitrate;
1319 _video->played_count = _media->video_meta->played_count;
1320 _video->played_time = _media->video_meta->played_time;
1321 _video->played_position = _media->video_meta->played_position;
1323 *video = (video_meta_h)_video;
1328 int media_info_get_audio(media_info_h media, audio_meta_h *audio)
1330 int ret = MEDIA_CONTENT_ERROR_NONE;
1332 media_info_s *_media = (media_info_s*)media;
1333 media_content_debug_func();
1337 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1338 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1341 if(_media->media_type != MEDIA_CONTENT_TYPE_MUSIC && _media->media_type != MEDIA_CONTENT_TYPE_SOUND)
1343 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1344 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1347 if(_media->audio_meta == NULL)
1349 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1350 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1353 audio_meta_s *_audio = (audio_meta_s*)calloc(1, sizeof(audio_meta_s));
1357 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1358 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1361 if(STRING_VALID(_media->media_id)) {
1362 _audio->media_id = strdup(_media->media_id);
1365 if(STRING_VALID(_media->audio_meta->title)) {
1366 _audio->title = strdup(_media->audio_meta->title);
1368 if(STRING_VALID(_media->audio_meta->album)) {
1369 _audio->album = strdup(_media->audio_meta->album);
1371 if(STRING_VALID(_media->audio_meta->artist)) {
1372 _audio->artist = strdup(_media->audio_meta->artist);
1374 if(STRING_VALID(_media->audio_meta->genre)) {
1375 _audio->genre = strdup(_media->audio_meta->genre);
1377 if(STRING_VALID(_media->audio_meta->composer)) {
1378 _audio->composer = strdup(_media->audio_meta->composer);
1380 if(STRING_VALID(_media->audio_meta->year)) {
1381 _audio->year = strdup(_media->audio_meta->year);
1383 if(STRING_VALID(_media->audio_meta->recorded_date)) {
1384 _audio->recorded_date = strdup(_media->audio_meta->recorded_date);
1386 if(STRING_VALID(_media->audio_meta->copyright)) {
1387 _audio->copyright = strdup(_media->audio_meta->copyright);
1389 if(STRING_VALID(_media->audio_meta->track_num)) {
1390 _audio->track_num = strdup(_media->audio_meta->track_num);
1393 _audio->duration = _media->audio_meta->duration;
1394 _audio->bitrate = _media->audio_meta->bitrate;
1395 _audio->samplerate = _media->audio_meta->samplerate;
1396 _audio->channel = _media->audio_meta->channel;
1397 _audio->played_time = _media->audio_meta->played_time;
1398 _audio->played_count = _media->audio_meta->played_count;
1399 _audio->played_position = _media->audio_meta->played_position;
1401 *audio = (audio_meta_h)_audio;
1406 int media_info_get_media_id(media_info_h media, char **media_id)
1408 int ret = MEDIA_CONTENT_ERROR_NONE;
1409 media_info_s *_media = (media_info_s*)media;
1411 if(_media && media_id)
1413 if(STRING_VALID(_media->media_id))
1415 *media_id = strdup(_media->media_id);
1416 if(*media_id == NULL)
1418 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1419 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1426 ret = MEDIA_CONTENT_ERROR_NONE;
1430 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1431 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1437 int media_info_get_file_path(media_info_h media, char **path)
1439 int ret = MEDIA_CONTENT_ERROR_NONE;
1440 media_info_s *_media = (media_info_s*)media;
1444 if(STRING_VALID(_media->file_path))
1446 *path = strdup(_media->file_path);
1449 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1450 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1457 ret = MEDIA_CONTENT_ERROR_NONE;
1462 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1463 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1469 int media_info_get_display_name(media_info_h media, char **name)
1471 int ret = MEDIA_CONTENT_ERROR_NONE;
1472 media_info_s *_media = (media_info_s*)media;
1475 if(STRING_VALID(_media->display_name))
1477 *name = strdup(_media->display_name);
1480 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1481 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1488 ret = MEDIA_CONTENT_ERROR_NONE;
1493 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1494 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1500 int media_info_get_media_type(media_info_h media, media_content_type_e *type)
1502 int ret = MEDIA_CONTENT_ERROR_NONE;
1503 media_info_s *_media = (media_info_s*)media;
1506 *type = _media->media_type;
1507 ret = MEDIA_CONTENT_ERROR_NONE;
1511 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1512 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1518 int media_info_get_mime_type(media_info_h media, char **mime_type)
1520 int ret = MEDIA_CONTENT_ERROR_NONE;
1521 media_info_s *_media = (media_info_s*)media;
1523 if(_media && mime_type)
1525 if(STRING_VALID(_media->mime_type))
1527 *mime_type = strdup(_media->mime_type);
1528 if(*mime_type == NULL)
1530 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1531 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1538 ret = MEDIA_CONTENT_ERROR_NONE;
1542 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1543 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1549 int media_info_get_size(media_info_h media, unsigned long long *size)
1551 int ret = MEDIA_CONTENT_ERROR_NONE;
1552 media_info_s *_media = (media_info_s*)media;
1556 *size = _media->size;
1557 ret = MEDIA_CONTENT_ERROR_NONE;
1561 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1562 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1568 int media_info_get_added_time(media_info_h media, time_t *added_time)
1570 int ret = MEDIA_CONTENT_ERROR_NONE;
1571 media_info_s *_media = (media_info_s*)media;
1572 if(_media && added_time)
1574 *added_time = _media->added_time;
1575 ret = MEDIA_CONTENT_ERROR_NONE;
1579 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1580 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1586 int media_info_get_modified_time(media_info_h media, time_t* time)
1588 int ret = MEDIA_CONTENT_ERROR_NONE;
1589 media_info_s *_media = (media_info_s*)media;
1592 *time = _media->modified_time;
1593 ret = MEDIA_CONTENT_ERROR_NONE;
1597 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1598 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1604 int media_info_get_thumbnail_path(media_info_h media, char **path)
1606 int ret = MEDIA_CONTENT_ERROR_NONE;
1607 media_info_s *_media = (media_info_s*)media;
1610 if(STRING_VALID(_media->thumbnail_path))
1612 *path = strdup(_media->thumbnail_path);
1615 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1616 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1623 ret = MEDIA_CONTENT_ERROR_NONE;
1628 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1629 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1635 int media_info_get_description(media_info_h media, char **description)
1637 int ret = MEDIA_CONTENT_ERROR_NONE;
1638 media_info_s *_media = (media_info_s*)media;
1640 if(_media && description)
1642 if(STRING_VALID(_media->description))
1644 *description = strdup(_media->description);
1645 if(*description == NULL)
1647 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1648 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1653 *description = NULL;
1655 ret = MEDIA_CONTENT_ERROR_NONE;
1659 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1660 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1666 int media_info_get_longitude(media_info_h media, double* longitude)
1668 int ret = MEDIA_CONTENT_ERROR_NONE;
1669 media_info_s *_media = (media_info_s*)media;
1671 if(_media && longitude)
1673 *longitude = _media->longitude;
1674 ret = MEDIA_CONTENT_ERROR_NONE;
1678 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1679 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1684 int media_info_get_latitude(media_info_h media, double* latitude)
1686 int ret = MEDIA_CONTENT_ERROR_NONE;
1687 media_info_s *_media = (media_info_s*)media;
1689 if(_media && latitude)
1691 *latitude = _media->latitude;
1692 ret = MEDIA_CONTENT_ERROR_NONE;
1696 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1697 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1703 int media_info_get_altitude(media_info_h media, double *altitude)
1705 int ret = MEDIA_CONTENT_ERROR_NONE;
1706 media_info_s *_media = (media_info_s*)media;
1708 if(_media && altitude)
1710 *altitude = _media->altitude;
1711 ret = MEDIA_CONTENT_ERROR_NONE;
1715 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1716 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1722 int media_info_get_rating(media_info_h media, int *rating)
1724 int ret = MEDIA_CONTENT_ERROR_NONE;
1725 media_info_s *_media = (media_info_s*)media;
1727 if(_media && rating)
1729 *rating = _media->rating;
1730 ret = MEDIA_CONTENT_ERROR_NONE;
1734 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1735 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1741 int media_info_get_favorite(media_info_h media, bool* favorite)
1743 int ret = MEDIA_CONTENT_ERROR_NONE;
1744 media_info_s *_media = (media_info_s*)media;
1746 if(_media && favorite)
1749 *favorite = _media->favourite;
1750 ret = MEDIA_CONTENT_ERROR_NONE;
1754 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1755 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1761 int media_info_get_author(media_info_h media, char **author)
1763 int ret = MEDIA_CONTENT_ERROR_NONE;
1764 media_info_s *_media = (media_info_s*)media;
1766 if(_media && author)
1768 if(STRING_VALID(_media->author))
1770 *author = strdup(_media->author);
1773 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1774 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1781 ret = MEDIA_CONTENT_ERROR_NONE;
1785 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1786 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1792 int media_info_get_provider(media_info_h media, char **provider)
1794 int ret = MEDIA_CONTENT_ERROR_NONE;
1795 media_info_s *_media = (media_info_s*)media;
1797 if(_media && provider)
1799 if(STRING_VALID(_media->provider))
1801 *provider = strdup(_media->provider);
1802 if(*provider == NULL)
1804 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1805 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1812 ret = MEDIA_CONTENT_ERROR_NONE;
1816 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1817 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1823 int media_info_get_content_name(media_info_h media, char **content_name)
1825 int ret = MEDIA_CONTENT_ERROR_NONE;
1826 media_info_s *_media = (media_info_s*)media;
1828 if(_media && content_name)
1830 if(STRING_VALID(_media->content_name))
1832 *content_name = strdup(_media->content_name);
1833 if(*content_name == NULL)
1835 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1836 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1841 *content_name = NULL;
1843 ret = MEDIA_CONTENT_ERROR_NONE;
1847 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1848 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1854 int media_info_get_category(media_info_h media, char **category)
1856 int ret = MEDIA_CONTENT_ERROR_NONE;
1857 media_info_s *_media = (media_info_s*)media;
1859 if(_media && category)
1861 if(STRING_VALID(_media->category))
1863 *category = strdup(_media->category);
1864 if(*category == NULL)
1866 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1867 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1874 ret = MEDIA_CONTENT_ERROR_NONE;
1878 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1879 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1885 int media_info_get_location_tag(media_info_h media, char **location_tag)
1887 int ret = MEDIA_CONTENT_ERROR_NONE;
1888 media_info_s *_media = (media_info_s*)media;
1890 if(_media && location_tag)
1892 if(STRING_VALID(_media->location_tag))
1894 *location_tag = strdup(_media->location_tag);
1895 if(*location_tag == NULL)
1897 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1898 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1903 *location_tag = NULL;
1905 ret = MEDIA_CONTENT_ERROR_NONE;
1909 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1910 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1916 int media_info_get_age_rating(media_info_h media, char **age_rating)
1918 int ret = MEDIA_CONTENT_ERROR_NONE;
1919 media_info_s *_media = (media_info_s*)media;
1921 if(_media && age_rating)
1923 if(STRING_VALID(_media->age_rating))
1925 *age_rating = strdup(_media->age_rating);
1926 if(*age_rating == NULL)
1928 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1929 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1936 ret = MEDIA_CONTENT_ERROR_NONE;
1940 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1941 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1947 int media_info_get_keyword(media_info_h media, char **keyword)
1949 int ret = MEDIA_CONTENT_ERROR_NONE;
1950 media_info_s *_media = (media_info_s*)media;
1952 if(_media && keyword)
1954 if(STRING_VALID(_media->keyword))
1956 *keyword = strdup(_media->keyword);
1957 if(*keyword == NULL)
1959 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1960 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1967 ret = MEDIA_CONTENT_ERROR_NONE;
1971 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1972 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1978 int media_info_is_drm(media_info_h media, bool *is_drm)
1980 int ret = MEDIA_CONTENT_ERROR_NONE;
1981 media_info_s *_media = (media_info_s*)media;
1985 *is_drm = _media->is_drm;
1986 ret = MEDIA_CONTENT_ERROR_NONE;
1990 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1991 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1997 int media_info_get_storage_type(media_info_h media, media_content_storage_e *storage_type)
1999 int ret = MEDIA_CONTENT_ERROR_NONE;
2000 media_info_s *_media = (media_info_s*)media;
2002 if(_media && storage_type)
2004 *storage_type = _media->storage_type;
2005 ret = MEDIA_CONTENT_ERROR_NONE;
2009 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2010 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2016 int media_info_get_media_from_db(const char *media_id, media_info_h *media)
2018 int ret = MEDIA_CONTENT_ERROR_NONE;
2019 char select_query[DEFAULT_QUERY_SIZE];
2020 sqlite3_stmt *stmt = NULL;
2022 if(!STRING_VALID(media_id) || (media == NULL))
2024 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2025 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2028 memset(select_query, 0x00, sizeof(select_query));
2030 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_MEDIA, media_id);
2031 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
2032 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2034 while(sqlite3_step(stmt) == SQLITE_ROW)
2036 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
2040 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2041 SQLITE3_FINALIZE(stmt);
2042 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2045 _media_info_item_get_detail(stmt, (media_info_h)_media);
2047 *media = (media_info_h)_media;
2050 SQLITE3_FINALIZE(stmt);
2055 int media_info_set_display_name(media_info_h media, const char *display_name)
2057 int ret = MEDIA_CONTENT_ERROR_NONE;
2058 media_info_s *_media = (media_info_s*)media;
2060 if(_media != NULL && STRING_VALID(display_name))
2062 SAFE_FREE(_media->display_name);
2064 _media->display_name = strdup(display_name);
2065 if(_media->display_name == NULL)
2067 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2068 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2073 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2074 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2080 int media_info_set_description(media_info_h media, const char *description)
2082 int ret = MEDIA_CONTENT_ERROR_NONE;
2083 media_info_s *_media = (media_info_s*)media;
2087 SAFE_FREE(_media->description);
2089 if(STRING_VALID(description))
2091 _media->description = strdup(description);
2093 if(_media->description == NULL)
2095 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2096 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2101 _media->description = NULL;
2106 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2107 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2113 int media_info_set_longitude(media_info_h media, double longitude)
2115 int ret = MEDIA_CONTENT_ERROR_NONE;
2116 media_info_s *_media = (media_info_s*)media;
2120 _media->longitude = longitude;
2124 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2125 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2131 int media_info_set_latitude(media_info_h media, double latitude)
2133 int ret = MEDIA_CONTENT_ERROR_NONE;
2134 media_info_s *_media = (media_info_s*)media;
2138 _media->latitude = latitude;
2142 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2143 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2149 int media_info_set_altitude(media_info_h media, double altitude)
2151 int ret = MEDIA_CONTENT_ERROR_NONE;
2152 media_info_s *_media = (media_info_s*)media;
2156 _media->altitude = altitude;
2160 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2161 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2167 int media_info_set_rating(media_info_h media, int rating)
2169 int ret = MEDIA_CONTENT_ERROR_NONE;
2170 media_info_s *_media = (media_info_s*)media;
2174 _media->rating = rating;
2178 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2179 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2185 int media_info_set_added_time(media_info_h media, time_t added_time)
2187 int ret = MEDIA_CONTENT_ERROR_NONE;
2189 media_info_s *_media = (media_info_s*)media;
2191 if((_media != NULL) && (added_time >= 0))
2193 _media->added_time = added_time;
2197 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2198 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2204 int media_info_set_favorite(media_info_h media, bool favorite)
2206 int ret = MEDIA_CONTENT_ERROR_NONE;
2207 media_info_s *_media = (media_info_s*)media;
2211 _media->favourite = favorite;
2215 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2216 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2222 int media_info_set_author(media_info_h media, const char *author)
2224 int ret = MEDIA_CONTENT_ERROR_NONE;
2225 media_info_s *_media = (media_info_s*)media;
2229 if(STRING_VALID(author))
2231 _media->author = strdup(author);
2232 if(_media->author == NULL)
2234 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2235 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2240 _media->author = NULL;
2245 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2246 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2252 int media_info_set_provider(media_info_h media, const char *provider)
2254 int ret = MEDIA_CONTENT_ERROR_NONE;
2255 media_info_s *_media = (media_info_s*)media;
2259 SAFE_FREE(_media->provider);
2261 if(STRING_VALID(provider))
2263 _media->provider = strdup(provider);
2264 if(_media->provider == NULL)
2266 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2267 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2272 _media->provider = NULL;
2277 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2278 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2284 int media_info_set_content_name(media_info_h media, const char *content_name)
2286 int ret = MEDIA_CONTENT_ERROR_NONE;
2287 media_info_s *_media = (media_info_s*)media;
2291 SAFE_FREE(_media->content_name);
2293 if(STRING_VALID(content_name))
2295 _media->content_name = strdup(content_name);
2296 if(_media->content_name == NULL)
2298 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2299 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2304 _media->content_name = NULL;
2309 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2310 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2316 int media_info_set_category(media_info_h media, const char *category)
2318 int ret = MEDIA_CONTENT_ERROR_NONE;
2319 media_info_s *_media = (media_info_s*)media;
2323 SAFE_FREE(_media->category);
2325 if(STRING_VALID(category))
2327 _media->category = strdup(category);
2328 if(_media->category == NULL)
2330 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2331 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2336 _media->category = NULL;
2341 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2342 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2348 int media_info_set_location_tag(media_info_h media, const char *location_tag)
2350 int ret = MEDIA_CONTENT_ERROR_NONE;
2351 media_info_s *_media = (media_info_s*)media;
2355 SAFE_FREE(_media->location_tag);
2357 if(STRING_VALID(location_tag))
2359 _media->location_tag = strdup(location_tag);
2360 if(_media->location_tag == NULL)
2362 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2363 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2368 _media->location_tag = NULL;
2373 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2374 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2380 int media_info_set_age_rating(media_info_h media, const char *age_rating)
2382 int ret = MEDIA_CONTENT_ERROR_NONE;
2383 media_info_s *_media = (media_info_s*)media;
2387 SAFE_FREE(_media->age_rating);
2389 if(STRING_VALID(age_rating))
2391 _media->age_rating = strdup(age_rating);
2392 if(_media->age_rating == NULL)
2394 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2395 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2400 _media->age_rating = NULL;
2405 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2406 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2412 int media_info_set_keyword(media_info_h media, const char *keyword)
2414 int ret = MEDIA_CONTENT_ERROR_NONE;
2415 media_info_s *_media = (media_info_s*)media;
2419 SAFE_FREE(_media->keyword);
2421 if(STRING_VALID(keyword))
2423 _media->keyword = strdup(keyword);
2424 if(_media->keyword == NULL)
2426 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2427 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2432 _media->keyword = NULL;
2437 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2438 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2444 int media_info_update_to_db(media_info_h media)
2446 int ret = MEDIA_CONTENT_ERROR_NONE;
2448 media_info_s *_media = (media_info_s*)media;
2449 char *set_sql = NULL;
2450 char sql[MAX_QUERY_SIZE];
2451 memset(sql, '\0', sizeof(sql));
2453 if(_media != NULL && STRING_VALID(_media->media_id))
2455 /* This sql is due to sqlite3_mprintf's wrong operation when using floating point in the text format */
2456 /* This code will be removed when sqlite3_mprintf works clearly */
2457 char *test_sql = sqlite3_mprintf("%f, %f, %f", _media->longitude, _media->latitude, _media->altitude);
2458 sqlite3_free(test_sql);
2460 set_sql = sqlite3_mprintf("file_name=%Q, added_time=%d, description=%Q, longitude=%f, latitude=%f, altitude=%f, \
2461 rating=%d, favourite=%d, author=%Q, provider=%Q, content_name=%Q, category=%Q, location_tag=%Q, age_rating=%Q, keyword=%Q",
2462 _media->display_name, _media->added_time, _media->description, _media->longitude, _media->latitude, _media->altitude, _media->rating, _media->favourite,
2463 _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword);
2465 len = snprintf(sql, sizeof(sql), "UPDATE %s SET %s WHERE media_uuid='%s'", DB_TABLE_MEDIA, set_sql, _media->media_id);
2466 sqlite3_free(set_sql);
2470 media_content_error("snprintf failed");
2471 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2474 ret = _content_query_sql(sql);
2478 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2479 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2485 int media_info_refresh_metadata_to_db(const char *media_id)
2487 int ret = MEDIA_CONTENT_ERROR_NONE;
2488 media_info_h media = NULL;
2489 char *file_path = NULL;
2490 media_content_type_e media_type = 0;
2491 media_content_storage_e storage_type = 0;
2493 if(!STRING_VALID(media_id))
2495 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2496 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2499 ret = media_info_get_media_from_db(media_id, &media);
2500 if(ret != MEDIA_CONTENT_ERROR_NONE)
2502 media_info_destroy(media);
2506 ret = media_info_get_media_type(media, &media_type);
2507 if(ret != MEDIA_CONTENT_ERROR_NONE)
2509 media_info_destroy(media);
2513 ret = media_info_get_storage_type(media, &storage_type);
2514 if(ret != MEDIA_CONTENT_ERROR_NONE)
2516 media_info_destroy(media);
2520 ret = media_info_get_file_path(media, &file_path);
2521 if(ret != MEDIA_CONTENT_ERROR_NONE)
2523 media_info_destroy(media);
2527 ret = media_svc_refresh_item(_content_get_db_handle(), storage_type, file_path, media_type);
2529 SAFE_FREE(file_path);
2530 media_info_destroy(media);
2535 int media_info_move_to_db(media_info_h media, const char* dst_path)
2537 int ret = MEDIA_CONTENT_ERROR_NONE;
2539 int src_storage_type = 0;
2540 int dst_storage_type = 0;
2542 if(media == NULL || !STRING_VALID(dst_path))
2544 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2545 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2548 media_info_s *_media = (media_info_s*)media;
2550 ret = _media_util_get_store_type_by_path(_media->file_path, &src_storage_type);
2551 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2552 ret = _media_util_get_store_type_by_path(dst_path, &dst_storage_type);
2553 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2555 ret = media_svc_move_item(_content_get_db_handle(), src_storage_type, _media->file_path, dst_storage_type, dst_path);
2556 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2559 int media_info_create_thumbnail(media_info_h media, media_thumbnail_completed_cb callback, void *user_data)
2561 int ret = MEDIA_CONTENT_ERROR_NONE;
2562 media_info_s *_media = (media_info_s*)media;
2564 if(_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path))
2566 media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s*)calloc(1, sizeof(media_thumbnail_cb_s));
2567 _thumb_cb->handle = _media;
2568 _thumb_cb->user_data = user_data;
2569 _thumb_cb->thumbnail_completed_cb = callback;
2571 ret = thumbnail_request_from_db_async(_media->file_path, (ThumbFunc)__media_info_thumbnail_completed_cb, (void *)_thumb_cb);
2572 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
2576 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2577 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2583 int media_info_cancel_thumbnail(media_info_h media)
2585 int ret = MEDIA_CONTENT_ERROR_NONE;
2586 media_info_s *_media = (media_info_s*)media;
2588 if(_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path))
2590 ret = thumbnail_request_cancel_media(_media->file_path);
2591 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
2595 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2596 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;