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);
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);
31 static int __media_info_get_media_info_from_db(char *path, media_info_h media)
33 int ret = MEDIA_CONTENT_ERROR_NONE;
34 sqlite3_stmt *stmt = NULL;
35 char *select_query = NULL;
36 media_info_s *_media = (media_info_s*)media;
40 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
41 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
44 select_query = sqlite3_mprintf(SELECT_MEDIA_BY_PATH, path);
46 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
47 sqlite3_free(select_query);
48 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
50 if(sqlite3_step(stmt) == SQLITE_ROW)
52 _media_info_item_get_detail(stmt, (media_info_h)_media);
53 media_content_debug("New Media ID: %s", _media->media_id);
55 media_content_debug("There's no media!!");
58 while(sqlite3_step(stmt) == SQLITE_ROW)
60 _media_info_item_get_detail(stmt, (media_info_h)_media);
61 media_content_debug("New Media ID: %s", _media->media_id);
64 SQLITE3_FINALIZE(stmt);
69 static int __media_info_get_media_path_by_id_from_db(const char *media_id, char **path)
71 int ret = MEDIA_CONTENT_ERROR_NONE;
72 sqlite3_stmt *stmt = NULL;
73 char *select_query = NULL;
75 if(!STRING_VALID(media_id))
77 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
78 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
81 select_query = sqlite3_mprintf(SELECT_MEDIA_PATH_BY_ID, media_id);
83 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
84 sqlite3_free(select_query);
85 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
87 if(sqlite3_step(stmt) == SQLITE_ROW)
89 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
90 *path = strdup((const char *)sqlite3_column_text(stmt, 0));
92 media_content_debug("There's no media with this ID : %s", media_id);
94 ret = MEDIA_CONTENT_ERROR_DB_FAILED;
97 SQLITE3_FINALIZE(stmt);
102 static void __media_info_insert_completed_cb(media_request_result_s *result, void *user_data)
104 int ret = MEDIA_CONTENT_ERROR_NONE;
105 media_insert_cb_s *_cb_data = (media_insert_cb_s *)user_data;
109 ret = _content_error_capi(MEDIA_CONTENT_TYPE, result->result);
112 if (_cb_data->insert_completed_cb)
113 _cb_data->insert_completed_cb(ret, _cb_data->user_data);
115 if (STRING_VALID(_cb_data->insert_list_path)) {
116 if (unlink(_cb_data->insert_list_path) < 0) {
117 media_content_error("failed to delete : %s", strerror(errno));
119 SAFE_FREE(_cb_data->insert_list_path);
128 static void __media_info_thumbnail_completed_cb(int error, const char *path, void *user_data)
130 int error_value = MEDIA_CONTENT_ERROR_NONE;
132 media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s *)user_data;
133 media_info_s *media = NULL;
135 if(_thumb_cb != NULL)
137 media = _thumb_cb->handle;
138 if((media != NULL) && STRING_VALID(path))
140 SAFE_FREE(media->thumbnail_path);
141 media->thumbnail_path = strdup(path);
144 media_content_debug("error [%d], thumbnail_path [%s]", error, path);
145 error_value = _content_error_capi(MEDIA_THUMBNAIL_TYPE, error);
146 if (_thumb_cb->thumbnail_completed_cb)
147 _thumb_cb->thumbnail_completed_cb(error_value, path, _thumb_cb->user_data);
150 SAFE_FREE(_thumb_cb);
155 static bool __media_info_delete_batch_cb(media_info_h media, void *user_data)
157 char *thumb_path = NULL;
158 media_content_type_e media_type = 0;
162 media_content_debug("NO Item \n");
166 media_info_get_media_type(media, &media_type);
167 media_content_debug("media_type : [%d] \n", media_type);
169 media_info_get_thumbnail_path(media, &thumb_path);
170 if (STRING_VALID(thumb_path)) {
171 if (strncmp(MEDIA_CONTENT_THUMB_DEFAULT_PATH, thumb_path, strlen(MEDIA_CONTENT_THUMB_DEFAULT_PATH)) != 0) {
172 media_content_debug("Deleting thumbnail : [%s] \n", thumb_path);
173 if (unlink(thumb_path) < 0) {
174 media_content_error("failed to delete : %s", strerror(errno));
178 SAFE_FREE(thumb_path);
184 void _media_info_item_get_detail(sqlite3_stmt* stmt, media_info_h media)
186 //#define MEDIA_INFO_ITEM "media_uuid, path, file_name, media_type, mime_type, size, added_time, modified_time, thumbnail_path, description,
187 // 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"
189 media_info_s *_media = (media_info_s*)media;
191 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
192 _media->media_id = strdup((const char *)sqlite3_column_text(stmt, 0));
194 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 1)))
195 _media->file_path = strdup((const char *)sqlite3_column_text(stmt, 1));
197 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 2)))
198 _media->display_name = strdup((const char *)sqlite3_column_text(stmt, 2));
200 _media->media_type = (int)sqlite3_column_int(stmt, 3);
202 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 4)))
203 _media->mime_type = strdup((const char *)sqlite3_column_text(stmt, 4));
205 _media->size = (unsigned long long)sqlite3_column_int64(stmt, 5);
207 _media->added_time = (int)sqlite3_column_int(stmt, 6);
209 _media->modified_time = (int)sqlite3_column_int(stmt, 7);
211 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 8)))
212 _media->thumbnail_path= strdup((const char *)sqlite3_column_text(stmt, 8));
214 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 9)))
215 _media->description = strdup((const char *)sqlite3_column_text(stmt, 9));
217 _media->rating = (int)sqlite3_column_int(stmt,10);
219 _media->favourite = (int)sqlite3_column_int(stmt, 11);
221 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 12)))
222 _media->author = strdup((const char *)sqlite3_column_text(stmt, 12));
224 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 13)))
225 _media->provider = strdup((const char *)sqlite3_column_text(stmt, 13));
227 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 14)))
228 _media->content_name = strdup((const char *)sqlite3_column_text(stmt, 14));
230 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 15)))
231 _media->category = strdup((const char *)sqlite3_column_text(stmt, 15));
233 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 16)))
234 _media->location_tag = strdup((const char *)sqlite3_column_text(stmt, 16));
236 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 17)))
237 _media->age_rating = strdup((const char *)sqlite3_column_text(stmt, 17));
239 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 18)))
240 _media->keyword = strdup((const char *)sqlite3_column_text(stmt, 18));
242 _media->is_drm = (int)sqlite3_column_int(stmt, 19);
244 _media->storage_type = (int)sqlite3_column_int(stmt, 20);
246 _media->longitude = (double)sqlite3_column_double(stmt, 21);
247 _media->latitude = (double)sqlite3_column_double(stmt, 22);
248 _media->altitude = (double)sqlite3_column_double(stmt, 23);
250 if(_media->media_type == MEDIA_CONTENT_TYPE_IMAGE) {
251 _media->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
252 if(_media->image_meta) {
253 if(STRING_VALID(_media->media_id))
254 _media->image_meta->media_id = strdup(_media->media_id);
256 _media->image_meta->width = sqlite3_column_int(stmt, 24);
257 _media->image_meta->height = sqlite3_column_int(stmt, 25);
259 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 26)))
260 _media->image_meta->date_taken = strdup((const char *)sqlite3_column_text(stmt, 26));
262 _media->image_meta->orientation = sqlite3_column_int(stmt, 27);
264 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 44)))
265 _media->image_meta->burst_id = strdup((const char *)sqlite3_column_text(stmt, 44));
268 } else if(_media->media_type == MEDIA_CONTENT_TYPE_VIDEO) {
269 _media->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
270 if(_media->video_meta) {
271 if(STRING_VALID(_media->media_id))
272 _media->video_meta->media_id = strdup(_media->media_id);
274 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 28)))
275 _media->video_meta->title = strdup((const char *)sqlite3_column_text(stmt, 28));
277 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 29)))
278 _media->video_meta->album = strdup((const char *)sqlite3_column_text(stmt, 29));
280 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 30)))
281 _media->video_meta->artist = strdup((const char *)sqlite3_column_text(stmt, 30));
283 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 31)))
284 _media->video_meta->genre = strdup((const char *)sqlite3_column_text(stmt, 31));
286 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 32)))
287 _media->video_meta->composer = strdup((const char *)sqlite3_column_text(stmt, 32));
289 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 33)))
290 _media->video_meta->year = strdup((const char *)sqlite3_column_text(stmt, 33));
292 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 34)))
293 _media->video_meta->recorded_date = strdup((const char *)sqlite3_column_text(stmt, 34));
295 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 35)))
296 _media->video_meta->copyright = strdup((const char *)sqlite3_column_text(stmt, 35));
298 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 36)))
299 _media->video_meta->track_num = strdup((const char *)sqlite3_column_text(stmt, 36));
301 _media->video_meta->bitrate = sqlite3_column_int(stmt, 37);
302 _media->video_meta->duration = sqlite3_column_int(stmt, 38);
303 _media->video_meta->played_count = sqlite3_column_int(stmt, 39);
304 _media->video_meta->played_time = sqlite3_column_int(stmt, 40);
305 _media->video_meta->played_position = sqlite3_column_int(stmt, 41);
306 _media->video_meta->width = sqlite3_column_int(stmt, 24);
307 _media->video_meta->height = sqlite3_column_int(stmt, 25);
311 else if((_media->media_type == MEDIA_CONTENT_TYPE_MUSIC) || (_media->media_type == MEDIA_CONTENT_TYPE_SOUND)) {
312 _media->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
313 if(_media->audio_meta) {
314 if(STRING_VALID(_media->media_id))
315 _media->audio_meta->media_id = strdup(_media->media_id);
317 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 28)))
318 _media->audio_meta->title = strdup((const char *)sqlite3_column_text(stmt, 28));
320 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 29)))
321 _media->audio_meta->album = strdup((const char *)sqlite3_column_text(stmt, 29));
323 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 30)))
324 _media->audio_meta->artist = strdup((const char *)sqlite3_column_text(stmt, 30));
326 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 31)))
327 _media->audio_meta->genre = strdup((const char *)sqlite3_column_text(stmt, 31));
329 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 32)))
330 _media->audio_meta->composer = strdup((const char *)sqlite3_column_text(stmt, 32));
332 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 33)))
333 _media->audio_meta->year = strdup((const char *)sqlite3_column_text(stmt, 33));
335 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 34)))
336 _media->audio_meta->recorded_date = strdup((const char *)sqlite3_column_text(stmt, 34));
338 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 35)))
339 _media->audio_meta->copyright = strdup((const char *)sqlite3_column_text(stmt, 35));
341 if(STRING_VALID((const char *)sqlite3_column_text(stmt, 36)))
342 _media->audio_meta->track_num = strdup((const char *)sqlite3_column_text(stmt, 36));
344 _media->audio_meta->bitrate = sqlite3_column_int(stmt, 37);
345 _media->audio_meta->duration = sqlite3_column_int(stmt, 38);
346 _media->audio_meta->played_count = sqlite3_column_int(stmt, 39);
347 _media->audio_meta->played_time = sqlite3_column_int(stmt, 40);
348 _media->audio_meta->played_position = sqlite3_column_int(stmt, 41);
349 _media->audio_meta->samplerate = sqlite3_column_int(stmt, 42);
350 _media->audio_meta->channel = sqlite3_column_int(stmt, 43);
356 int media_info_insert_to_db (const char *path, media_info_h *info)
358 int ret = MEDIA_CONTENT_ERROR_NONE;
360 if(!STRING_VALID(path))
362 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
363 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
368 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
369 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
373 media_content_debug("Register: %s", path);
374 ret = media_file_register(path);
375 if(ret != MS_MEDIA_ERR_NONE)
377 media_content_error("media_file_register failed");
378 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
382 char *_path = strdup(path);
384 media_content_error("strdup failed : %s", path);
385 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
388 ret = media_svc_check_item_exist_by_path(_content_get_db_handle(), _path);
389 if (ret == MEDIA_INFO_ERROR_DATABASE_NO_RECORD) {
390 media_content_debug("media_svc_check_item_exist_by_path : no record : %s", _path);
392 media_svc_storage_type_e storage_type;
394 ret = media_svc_get_storage_type(_path, &storage_type);
396 media_content_error("media_svc_get_storage_type failed : %d (%s)", ret, _path);
398 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
401 media_content_debug("media_svc_insert_item_immediately: %s", _path);
402 ret = media_svc_insert_item_immediately(_content_get_db_handle(), storage_type, _path);
405 media_content_error("media_svc_insert_item_immediately failed : %d (%s)", ret, _path);
407 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
409 } else if (ret != MEDIA_INFO_ERROR_NONE) {
410 media_content_error("media_svc_check_item_exist_by_path failed : %d (%s)", ret, _path);
412 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
416 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
419 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
421 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
424 _media->file_path = _path;
425 if(_media->file_path == NULL)
427 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
429 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
432 ret = __media_info_get_media_info_from_db(_media->file_path, (media_info_h)_media);
434 *info = (media_info_h)_media;
438 static int __media_info_insert_batch(media_batch_insert_e insert_type, const char **path_array,
439 unsigned int array_length,
440 media_insert_completed_cb completed_cb,
443 int ret = MEDIA_CONTENT_ERROR_NONE;
445 char list_path[255] = {0,};
449 for (idx = 0; idx < BATCH_REQUEST_MAX; idx++) {
450 snprintf(list_path, sizeof(list_path), "%s/request-%ld-%d", MEDIA_CONTENT_INSERT_FILES_PATH, media_content_gettid(), idx);
452 if (g_file_test(list_path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
453 memset(list_path, 0x00, sizeof(list_path));
456 media_content_debug("The request file list path : %s", list_path);
461 if (idx == BATCH_REQUEST_MAX) {
462 media_content_error("Too many batch request for one thread");
463 return MEDIA_CONTENT_ERROR_DB_BUSY;
466 fp = fopen(list_path, "w");
468 media_content_error("failed to open file : %s [%s]", list_path, strerror(errno));
469 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
472 for (idx = 0; idx < array_length; idx++) {
473 if (STRING_VALID(path_array[idx])) {
474 int size = strlen(path_array[idx]);
476 nwrites = fwrite(path_array[idx], 1, size, fp);
477 if (nwrites != size) {
478 media_content_error("failed to write thumbnail : %s", strerror(errno));
480 if (unlink(list_path) < 0) {
481 media_content_error("failed to delete : %s", strerror(errno));
483 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
486 nwrites = fwrite("\n", 1, 1, fp);
488 media_content_error("failed to write thumbnail : %s", strerror(errno));
490 if (unlink(list_path) < 0) {
491 media_content_error("failed to delete : %s", strerror(errno));
493 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
496 media_content_error("path[%d] is invalid string", idx);
502 media_insert_cb_s *_cb_data = (media_insert_cb_s *)calloc(1, sizeof(media_insert_cb_s));
503 _cb_data->insert_completed_cb = completed_cb;
504 _cb_data->user_data = user_data;
505 _cb_data->insert_list_path = strdup(list_path);
507 if(insert_type == MEDIA_BATCH_INSERT_NORMAL)
508 ret = media_files_register(list_path, __media_info_insert_completed_cb, _cb_data);
509 else if(insert_type == MEDIA_BATCH_INSERT_BURSTSHOT)
510 ret = media_burstshot_register(list_path, __media_info_insert_completed_cb, _cb_data);
512 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
514 if (ret != MEDIA_CONTENT_ERROR_NONE) {
515 media_content_error("media_files_register failed : %d", ret);
516 if (unlink(list_path) < 0) {
517 media_content_error("failed to delete : %s", strerror(errno));
519 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
525 int media_info_insert_batch_to_db(
526 const char **path_array,
527 unsigned int array_length,
528 media_insert_completed_cb completed_cb,
531 if (path_array == NULL)
533 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
534 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
537 if (array_length <= 0)
539 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
540 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
543 return __media_info_insert_batch(MEDIA_BATCH_INSERT_NORMAL, path_array, array_length, completed_cb, user_data);
546 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)
548 if (path_array == NULL)
550 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
551 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
554 if (array_length <= 0)
556 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
557 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
560 return __media_info_insert_batch(MEDIA_BATCH_INSERT_BURSTSHOT, path_array, array_length, callback, user_data);
563 int media_info_delete_from_db(const char *media_id)
565 int ret = MEDIA_CONTENT_ERROR_NONE;
567 if(!STRING_VALID(media_id))
569 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
570 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
574 char *query_string = NULL;
575 query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA, media_id);
577 ret = _content_query_sql(query_string);
579 sqlite3_free(query_string);
585 ret = __media_info_get_media_path_by_id_from_db(media_id, &path);
586 if (ret < MEDIA_CONTENT_ERROR_NONE) {
587 media_content_error("__media_info_get_media_path_by_id_from_db failed : %d", ret);
592 ret = media_svc_delete_item_by_path(_content_get_db_handle(), path);
595 return _content_error_capi(ret,MEDIA_CONTENT_TYPE);
599 int media_info_delete_batch_from_db(filter_h filter)
601 int ret = MEDIA_CONTENT_ERROR_NONE;
603 char *query_string = NULL;
604 filter_s *_filter = NULL;
606 char *condition_query = NULL;
610 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
611 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
614 /* Delete thumbnail of each item */
615 ret = _media_db_get_group_item(NULL, filter, __media_info_delete_batch_cb, NULL, MEDIA_GROUP_NONE);
617 _filter = (filter_s*)filter;
618 attr = _content_get_attirbute_handle();
620 if(_filter->condition)
622 ret = _media_filter_attribute_generate(attr, _filter->condition, _filter->condition_collate_type, &condition_query);
623 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
626 if(STRING_VALID(condition_query))
628 query_string = sqlite3_mprintf(DELETE_MEDIA_FROM_MEDIA_BATCH, condition_query);
632 SAFE_FREE(condition_query);
633 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
636 ret = _content_query_sql(query_string);
637 if (ret == MEDIA_CONTENT_ERROR_NONE) {
638 /* Send notification for this
639 In this case, send noti for internal storage and external storage
641 media_content_debug("Batch deletion is successfull. Send notification for this");
642 media_db_update_send(getpid(), MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, MEDIA_CONTENT_PATH_PHONE, NULL, -1, NULL);
643 media_db_update_send(getpid(), MS_MEDIA_ITEM_DIRECTORY, MS_MEDIA_ITEM_UPDATE, MEDIA_CONTENT_PATH_MMC, NULL, -1, NULL);
646 SAFE_FREE(condition_query);
647 sqlite3_free(query_string);
652 int media_info_destroy(media_info_h media)
654 int ret = MEDIA_CONTENT_ERROR_NONE;
655 media_info_s *_media = (media_info_s*)media;
659 SAFE_FREE(_media->media_id);
660 SAFE_FREE(_media->file_path);
661 SAFE_FREE(_media->display_name);
662 SAFE_FREE(_media->mime_type);
663 SAFE_FREE(_media->thumbnail_path);
664 SAFE_FREE(_media->description);
665 SAFE_FREE(_media->author);
666 SAFE_FREE(_media->provider);
667 SAFE_FREE(_media->content_name);
668 SAFE_FREE(_media->category);
669 SAFE_FREE(_media->location_tag);
670 SAFE_FREE(_media->age_rating);
671 SAFE_FREE(_media->keyword);
673 if(_media->image_meta) {
674 SAFE_FREE(_media->image_meta->media_id);
675 SAFE_FREE(_media->image_meta->date_taken);
676 SAFE_FREE(_media->image_meta->burst_id);
678 SAFE_FREE(_media->image_meta);
679 } else if(_media->video_meta) {
680 SAFE_FREE(_media->video_meta->media_id);
681 SAFE_FREE(_media->video_meta->title);
682 SAFE_FREE(_media->video_meta->album);
683 SAFE_FREE(_media->video_meta->artist);
684 SAFE_FREE(_media->video_meta->genre);
685 SAFE_FREE(_media->video_meta->composer);
686 SAFE_FREE(_media->video_meta->year);
687 SAFE_FREE(_media->video_meta->recorded_date);
688 SAFE_FREE(_media->video_meta->copyright);
689 SAFE_FREE(_media->video_meta->track_num);
691 SAFE_FREE(_media->video_meta);
692 } else if(_media->audio_meta) {
693 SAFE_FREE(_media->audio_meta->media_id);
694 SAFE_FREE(_media->audio_meta->title);
695 SAFE_FREE(_media->audio_meta->album);
696 SAFE_FREE(_media->audio_meta->artist);
697 SAFE_FREE(_media->audio_meta->genre);
698 SAFE_FREE(_media->audio_meta->composer);
699 SAFE_FREE(_media->audio_meta->year);
700 SAFE_FREE(_media->audio_meta->recorded_date);
701 SAFE_FREE(_media->audio_meta->copyright);
702 SAFE_FREE(_media->audio_meta->track_num);
704 SAFE_FREE(_media->audio_meta);
709 ret = MEDIA_CONTENT_ERROR_NONE;
713 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
714 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
720 int media_info_clone(media_info_h *dst, media_info_h src)
722 int ret = MEDIA_CONTENT_ERROR_NONE;
723 media_info_s *_src = (media_info_s*)src;
728 media_info_s *_dst = (media_info_s*)calloc(1, sizeof(media_info_s));
732 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
733 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
736 if(STRING_VALID(_src->media_id))
738 _dst->media_id = strdup(_src->media_id);
739 if(_dst->media_id == NULL)
741 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
742 media_info_destroy((media_info_h)_dst);
743 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
746 if(STRING_VALID(_src->file_path))
748 _dst->file_path = strdup(_src->file_path);
749 if(_dst->file_path == NULL)
751 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
752 media_info_destroy((media_info_h)_dst);
753 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
756 if(STRING_VALID(_src->display_name))
758 _dst->display_name = strdup(_src->display_name);
759 if(_dst->display_name == NULL)
761 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
762 media_info_destroy((media_info_h)_dst);
763 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
766 if(STRING_VALID(_src->mime_type))
768 _dst->mime_type = strdup(_src->mime_type);
769 if(_dst->mime_type == NULL)
771 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
772 media_info_destroy((media_info_h)_dst);
773 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
776 if(STRING_VALID(_src->thumbnail_path))
778 _dst->thumbnail_path = strdup(_src->thumbnail_path);
779 if(_dst->thumbnail_path == NULL)
781 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
782 media_info_destroy((media_info_h)_dst);
783 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
786 if(STRING_VALID(_src->description))
788 _dst->description = strdup(_src->description);
789 if(_dst->description == NULL)
791 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
792 media_info_destroy((media_info_h)_dst);
793 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
796 if(STRING_VALID(_src->author))
798 _dst->author = strdup(_src->author);
799 if(_dst->author == NULL)
801 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
802 media_info_destroy((media_info_h)_dst);
803 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
806 if(STRING_VALID(_src->provider))
808 _dst->provider = strdup(_src->provider);
809 if(_dst->provider == NULL)
811 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
812 media_info_destroy((media_info_h)_dst);
813 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
816 if(STRING_VALID(_src->content_name))
818 _dst->content_name = strdup(_src->content_name);
819 if(_dst->content_name == NULL)
821 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
822 media_info_destroy((media_info_h)_dst);
823 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
826 if(STRING_VALID(_src->category))
828 _dst->category = strdup(_src->category);
829 if(_dst->category == NULL)
831 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
832 media_info_destroy((media_info_h)_dst);
833 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
836 if(STRING_VALID(_src->location_tag))
838 _dst->location_tag = strdup(_src->location_tag);
839 if(_dst->location_tag == NULL)
841 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
842 media_info_destroy((media_info_h)_dst);
843 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
846 if(STRING_VALID(_src->age_rating))
848 _dst->age_rating = strdup(_src->age_rating);
849 if(_dst->age_rating == NULL)
851 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
852 media_info_destroy((media_info_h)_dst);
853 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
856 if(STRING_VALID(_src->keyword))
858 _dst->keyword = strdup(_src->keyword);
859 if(_dst->keyword == NULL)
861 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
862 media_info_destroy((media_info_h)_dst);
863 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
867 _dst->media_type = _src->media_type;
868 _dst->size = _src->size;
869 _dst->added_time = _src->added_time;
870 _dst->modified_time = _src->modified_time;
871 _dst->longitude = _src->longitude;
872 _dst->latitude = _src->latitude;
873 _dst->altitude = _src->altitude;
874 _dst->rating = _src->rating;
875 _dst->favourite = _src->favourite;
876 _dst->is_drm = _src->is_drm;
877 _dst->storage_type = _src->storage_type;
879 if(_src->media_type == MEDIA_CONTENT_TYPE_IMAGE && _src->image_meta) {
880 _dst->image_meta = (image_meta_s *)calloc(1, sizeof(image_meta_s));
881 if(_dst->image_meta == NULL)
883 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
884 media_info_destroy((media_info_h)_dst);
885 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
888 if(STRING_VALID(_src->image_meta->media_id))
890 _dst->image_meta->media_id = strdup(_src->image_meta->media_id);
891 if(_dst->image_meta->media_id == NULL)
893 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
894 media_info_destroy((media_info_h)_dst);
895 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
899 if(STRING_VALID(_src->image_meta->date_taken))
901 _dst->image_meta->date_taken = strdup(_src->image_meta->date_taken);
902 if(_dst->image_meta->date_taken == NULL)
904 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
905 media_info_destroy((media_info_h)_dst);
906 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
910 if(STRING_VALID(_src->image_meta->burst_id))
912 _dst->image_meta->burst_id = strdup(_src->image_meta->burst_id);
913 if(_dst->image_meta->burst_id == NULL)
915 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
916 media_info_destroy((media_info_h)_dst);
917 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
920 _dst->image_meta->width = _src->image_meta->width;
921 _dst->image_meta->height = _src->image_meta->height;
922 _dst->image_meta->orientation = _src->image_meta->orientation;
924 } else if(_src->media_type == MEDIA_CONTENT_TYPE_VIDEO && _src->video_meta) {
925 _dst->video_meta = (video_meta_s *)calloc(1, sizeof(video_meta_s));
926 if(_dst->video_meta == NULL)
928 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
929 media_info_destroy((media_info_h)_dst);
930 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
933 if(STRING_VALID(_src->video_meta->media_id))
935 _dst->video_meta->media_id = strdup(_src->video_meta->media_id);
936 if(_dst->video_meta->media_id == NULL)
938 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
939 media_info_destroy((media_info_h)_dst);
940 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
943 if(STRING_VALID(_src->video_meta->title))
945 _dst->video_meta->title = strdup(_src->video_meta->title);
946 if(_dst->video_meta->title == NULL)
948 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
949 media_info_destroy((media_info_h)_dst);
950 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
953 if(STRING_VALID(_src->video_meta->album))
955 _dst->video_meta->album = strdup(_src->video_meta->album);
956 if(_dst->video_meta->album == NULL)
958 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
959 media_info_destroy((media_info_h)_dst);
960 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
963 if(STRING_VALID(_src->video_meta->artist))
965 _dst->video_meta->artist = strdup(_src->video_meta->artist);
966 if(_dst->video_meta->artist == NULL)
968 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
969 media_info_destroy((media_info_h)_dst);
970 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
973 if(STRING_VALID(_src->video_meta->genre))
975 _dst->video_meta->genre = strdup(_src->video_meta->genre);
976 if(_dst->video_meta->genre == NULL)
978 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
979 media_info_destroy((media_info_h)_dst);
980 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
983 if(STRING_VALID(_src->video_meta->composer))
985 _dst->video_meta->composer = strdup(_src->video_meta->composer);
986 if(_dst->video_meta->composer == NULL)
988 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
989 media_info_destroy((media_info_h)_dst);
990 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
993 if(STRING_VALID(_src->video_meta->year))
995 _dst->video_meta->year = strdup(_src->video_meta->year);
996 if(_dst->video_meta->year == NULL)
998 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
999 media_info_destroy((media_info_h)_dst);
1000 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1003 if(STRING_VALID(_src->video_meta->recorded_date))
1005 _dst->video_meta->recorded_date = strdup(_src->video_meta->recorded_date);
1006 if(_dst->video_meta->recorded_date == NULL)
1008 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1009 media_info_destroy((media_info_h)_dst);
1010 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1013 if(STRING_VALID(_src->video_meta->copyright))
1015 _dst->video_meta->copyright = strdup(_src->video_meta->copyright);
1016 if(_dst->video_meta->copyright == NULL)
1018 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1019 media_info_destroy((media_info_h)_dst);
1020 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1023 if(STRING_VALID(_src->video_meta->track_num))
1025 _dst->video_meta->track_num = strdup(_src->video_meta->track_num);
1026 if(_dst->video_meta->track_num == NULL)
1028 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1029 media_info_destroy((media_info_h)_dst);
1030 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1034 _dst->video_meta->width = _src->video_meta->width;
1035 _dst->video_meta->height = _src->video_meta->height;
1036 _dst->video_meta->duration = _src->video_meta->duration;
1037 _dst->video_meta->bitrate = _src->video_meta->bitrate;
1038 _dst->video_meta->played_count = _src->video_meta->played_count;
1039 _dst->video_meta->played_time = _src->video_meta->played_time;
1040 _dst->video_meta->played_position = _src->video_meta->played_position;
1042 } else if((_src->media_type == MEDIA_CONTENT_TYPE_MUSIC || _src->media_type == MEDIA_CONTENT_TYPE_SOUND) && _src->audio_meta) {
1043 _dst->audio_meta = (audio_meta_s *)calloc(1, sizeof(audio_meta_s));
1044 if(_dst->audio_meta == NULL)
1046 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1047 media_info_destroy((media_info_h)_dst);
1048 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1051 if(STRING_VALID(_src->audio_meta->media_id))
1053 _dst->audio_meta->media_id = strdup(_src->audio_meta->media_id);
1054 if(_dst->audio_meta->media_id == NULL)
1056 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1057 media_info_destroy((media_info_h)_dst);
1058 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1061 if(STRING_VALID(_src->audio_meta->title))
1063 _dst->audio_meta->title = strdup(_src->audio_meta->title);
1064 if(_dst->audio_meta->title == NULL)
1066 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1067 media_info_destroy((media_info_h)_dst);
1068 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1071 if(STRING_VALID(_src->audio_meta->album))
1073 _dst->audio_meta->album = strdup(_src->audio_meta->album);
1074 if(_dst->audio_meta->album == NULL)
1076 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1077 media_info_destroy((media_info_h)_dst);
1078 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1081 if(STRING_VALID(_src->audio_meta->artist))
1083 _dst->audio_meta->artist = strdup(_src->audio_meta->artist);
1084 if(_dst->audio_meta->artist == NULL)
1086 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1087 media_info_destroy((media_info_h)_dst);
1088 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1091 if(STRING_VALID(_src->audio_meta->genre))
1093 _dst->audio_meta->genre = strdup(_src->audio_meta->genre);
1094 if(_dst->audio_meta->genre == NULL)
1096 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1097 media_info_destroy((media_info_h)_dst);
1098 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1101 if(STRING_VALID(_src->audio_meta->composer))
1103 _dst->audio_meta->composer = strdup(_src->audio_meta->composer);
1104 if(_dst->audio_meta->composer == NULL)
1106 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1107 media_info_destroy((media_info_h)_dst);
1108 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1111 if(STRING_VALID(_src->audio_meta->year))
1113 _dst->audio_meta->year = strdup(_src->audio_meta->year);
1114 if(_dst->audio_meta->year == NULL)
1116 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1117 media_info_destroy((media_info_h)_dst);
1118 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1121 if(STRING_VALID(_src->audio_meta->recorded_date))
1123 _dst->audio_meta->recorded_date = strdup(_src->audio_meta->recorded_date);
1124 if(_dst->audio_meta->recorded_date == NULL)
1126 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1127 media_info_destroy((media_info_h)_dst);
1128 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1131 if(STRING_VALID(_src->audio_meta->copyright))
1133 _dst->audio_meta->copyright = strdup(_src->audio_meta->copyright);
1134 if(_dst->audio_meta->copyright == NULL)
1136 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1137 media_info_destroy((media_info_h)_dst);
1138 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1141 if(STRING_VALID(_src->audio_meta->track_num))
1143 _dst->audio_meta->track_num = strdup(_src->audio_meta->track_num);
1144 if(_dst->audio_meta->track_num == NULL)
1146 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1147 media_info_destroy((media_info_h)_dst);
1148 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1152 _dst->audio_meta->channel = _src->audio_meta->channel;
1153 _dst->audio_meta->samplerate = _src->audio_meta->samplerate;
1154 _dst->audio_meta->duration = _src->audio_meta->duration;
1155 _dst->audio_meta->bitrate = _src->audio_meta->bitrate;
1156 _dst->audio_meta->played_count = _src->audio_meta->played_count;
1157 _dst->audio_meta->played_time = _src->audio_meta->played_time;
1158 _dst->audio_meta->played_position = _src->audio_meta->played_position;
1161 *dst = (media_info_h)_dst;
1163 ret = MEDIA_CONTENT_ERROR_NONE;
1167 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1168 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1174 int media_info_get_media_count_from_db(filter_h filter, int *media_count)
1176 int ret = MEDIA_CONTENT_ERROR_NONE;
1178 media_content_debug_func();
1180 if(media_count == NULL)
1182 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1183 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1188 ret = _media_db_get_group_item_count(NULL, filter, MEDIA_GROUP_NONE, media_count);
1193 int media_info_foreach_media_from_db(filter_h filter, media_info_cb callback, void *user_data)
1195 int ret = MEDIA_CONTENT_ERROR_NONE;
1197 media_content_debug_func();
1199 if(callback == NULL)
1201 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1202 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1205 ret = _media_db_get_group_item(NULL, filter, callback, user_data, MEDIA_GROUP_NONE);
1210 int media_info_get_tag_count_from_db(const char *media_id, filter_h filter, int *tag_count)
1212 int ret = MEDIA_CONTENT_ERROR_NONE;
1214 media_content_debug_func();
1216 if(STRING_VALID(media_id) && tag_count)
1218 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_TAG_BY_MEDIA_ID, tag_count);
1222 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1223 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1229 int media_info_foreach_tag_from_db(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
1231 int ret = MEDIA_CONTENT_ERROR_NONE;
1233 media_content_debug_func();
1235 if((callback != NULL) && STRING_VALID(media_id))
1237 ret = _media_db_get_tag(media_id, filter, callback, user_data);
1241 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1242 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1248 int media_info_get_bookmark_count_from_db(const char *media_id, filter_h filter, int *bookmark_count)
1250 int ret = MEDIA_CONTENT_ERROR_NONE;
1252 media_content_debug_func();
1254 if(STRING_VALID(media_id) && bookmark_count)
1256 ret = _media_db_get_group_item_count(media_id, filter, MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID, bookmark_count);
1260 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1261 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1267 int media_info_foreach_bookmark_from_db (const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
1269 int ret = MEDIA_CONTENT_ERROR_NONE;
1271 media_content_debug_func();
1273 if((callback != NULL) && STRING_VALID(media_id))
1275 ret = _media_db_get_bookmark(media_id, filter, callback, user_data);
1279 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1280 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1286 int media_info_get_image(media_info_h media, image_meta_h *image)
1288 int ret = MEDIA_CONTENT_ERROR_NONE;
1290 media_info_s *_media = (media_info_s*)media;
1294 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1295 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1298 if(_media->media_type != MEDIA_CONTENT_TYPE_IMAGE)
1300 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1301 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1304 if(_media->image_meta == NULL)
1306 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1307 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1310 image_meta_s *_image = (image_meta_s*)calloc(1, sizeof(image_meta_s));
1314 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1315 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1318 if(STRING_VALID(_media->media_id)) {
1319 _image->media_id = strdup(_media->media_id);
1322 _image->width = _media->image_meta->width;
1323 _image->height = _media->image_meta->height;
1324 _image->orientation = _media->image_meta->orientation;
1326 if(STRING_VALID(_media->image_meta->date_taken)) {
1327 _image->date_taken = strdup(_media->image_meta->date_taken);
1330 if(STRING_VALID(_media->image_meta->title)) {
1331 _image->title = strdup(_media->image_meta->title);
1334 if(STRING_VALID(_media->image_meta->burst_id)) {
1335 _image->burst_id = strdup(_media->image_meta->burst_id);
1338 *image = (image_meta_h)_image;
1343 int media_info_get_video(media_info_h media, video_meta_h *video)
1345 int ret = MEDIA_CONTENT_ERROR_NONE;
1347 media_info_s *_media = (media_info_s*)media;
1351 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1352 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1355 if(_media->media_type != MEDIA_CONTENT_TYPE_VIDEO)
1357 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1358 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1361 if(_media->video_meta == NULL)
1363 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1364 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1367 video_meta_s *_video = (video_meta_s*)calloc(1, sizeof(video_meta_s));
1371 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1372 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1375 if(STRING_VALID(_media->media_id)) {
1376 _video->media_id = strdup(_media->media_id);
1379 if(STRING_VALID(_media->video_meta->title)) {
1380 _video->title = strdup(_media->video_meta->title);
1382 if(STRING_VALID(_media->video_meta->album)) {
1383 _video->album = strdup(_media->video_meta->album);
1385 if(STRING_VALID(_media->video_meta->artist)) {
1386 _video->artist = strdup(_media->video_meta->artist);
1388 if(STRING_VALID(_media->video_meta->genre)) {
1389 _video->genre = strdup(_media->video_meta->genre);
1391 if(STRING_VALID(_media->video_meta->composer)) {
1392 _video->composer = strdup(_media->video_meta->composer);
1394 if(STRING_VALID(_media->video_meta->year)) {
1395 _video->year = strdup(_media->video_meta->year);
1397 if(STRING_VALID(_media->video_meta->recorded_date)) {
1398 _video->recorded_date = strdup(_media->video_meta->recorded_date);
1400 if(STRING_VALID(_media->video_meta->copyright)) {
1401 _video->copyright = strdup(_media->video_meta->copyright);
1403 if(STRING_VALID(_media->video_meta->track_num)) {
1404 _video->track_num = strdup(_media->video_meta->track_num);
1407 _video->width = _media->video_meta->width;
1408 _video->height = _media->video_meta->height;
1409 _video->duration = _media->video_meta->duration;
1410 _video->bitrate = _media->video_meta->bitrate;
1411 _video->played_count = _media->video_meta->played_count;
1412 _video->played_time = _media->video_meta->played_time;
1413 _video->played_position = _media->video_meta->played_position;
1415 *video = (video_meta_h)_video;
1420 int media_info_get_audio(media_info_h media, audio_meta_h *audio)
1422 int ret = MEDIA_CONTENT_ERROR_NONE;
1424 media_info_s *_media = (media_info_s*)media;
1428 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1429 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1432 if(_media->media_type != MEDIA_CONTENT_TYPE_MUSIC && _media->media_type != MEDIA_CONTENT_TYPE_SOUND)
1434 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1435 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1438 if(_media->audio_meta == NULL)
1440 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1441 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1444 audio_meta_s *_audio = (audio_meta_s*)calloc(1, sizeof(audio_meta_s));
1448 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1449 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1452 if(STRING_VALID(_media->media_id)) {
1453 _audio->media_id = strdup(_media->media_id);
1456 if(STRING_VALID(_media->audio_meta->title)) {
1457 _audio->title = strdup(_media->audio_meta->title);
1459 if(STRING_VALID(_media->audio_meta->album)) {
1460 _audio->album = strdup(_media->audio_meta->album);
1462 if(STRING_VALID(_media->audio_meta->artist)) {
1463 _audio->artist = strdup(_media->audio_meta->artist);
1465 if(STRING_VALID(_media->audio_meta->genre)) {
1466 _audio->genre = strdup(_media->audio_meta->genre);
1468 if(STRING_VALID(_media->audio_meta->composer)) {
1469 _audio->composer = strdup(_media->audio_meta->composer);
1471 if(STRING_VALID(_media->audio_meta->year)) {
1472 _audio->year = strdup(_media->audio_meta->year);
1474 if(STRING_VALID(_media->audio_meta->recorded_date)) {
1475 _audio->recorded_date = strdup(_media->audio_meta->recorded_date);
1477 if(STRING_VALID(_media->audio_meta->copyright)) {
1478 _audio->copyright = strdup(_media->audio_meta->copyright);
1480 if(STRING_VALID(_media->audio_meta->track_num)) {
1481 _audio->track_num = strdup(_media->audio_meta->track_num);
1484 _audio->duration = _media->audio_meta->duration;
1485 _audio->bitrate = _media->audio_meta->bitrate;
1486 _audio->samplerate = _media->audio_meta->samplerate;
1487 _audio->channel = _media->audio_meta->channel;
1488 _audio->played_time = _media->audio_meta->played_time;
1489 _audio->played_count = _media->audio_meta->played_count;
1490 _audio->played_position = _media->audio_meta->played_position;
1492 *audio = (audio_meta_h)_audio;
1497 int media_info_get_media_id(media_info_h media, char **media_id)
1499 int ret = MEDIA_CONTENT_ERROR_NONE;
1500 media_info_s *_media = (media_info_s*)media;
1502 if(_media && media_id)
1504 if(STRING_VALID(_media->media_id))
1506 *media_id = strdup(_media->media_id);
1507 if(*media_id == NULL)
1509 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1510 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1517 ret = MEDIA_CONTENT_ERROR_NONE;
1521 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1522 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1528 int media_info_get_file_path(media_info_h media, char **path)
1530 int ret = MEDIA_CONTENT_ERROR_NONE;
1531 media_info_s *_media = (media_info_s*)media;
1535 if(STRING_VALID(_media->file_path))
1537 *path = strdup(_media->file_path);
1540 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1541 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1548 ret = MEDIA_CONTENT_ERROR_NONE;
1553 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1554 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1560 int media_info_get_display_name(media_info_h media, char **name)
1562 int ret = MEDIA_CONTENT_ERROR_NONE;
1563 media_info_s *_media = (media_info_s*)media;
1566 if(STRING_VALID(_media->display_name))
1568 *name = strdup(_media->display_name);
1571 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1572 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1579 ret = MEDIA_CONTENT_ERROR_NONE;
1584 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1585 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1591 int media_info_get_media_type(media_info_h media, media_content_type_e *type)
1593 int ret = MEDIA_CONTENT_ERROR_NONE;
1594 media_info_s *_media = (media_info_s*)media;
1597 *type = _media->media_type;
1598 ret = MEDIA_CONTENT_ERROR_NONE;
1602 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1603 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1609 int media_info_get_mime_type(media_info_h media, char **mime_type)
1611 int ret = MEDIA_CONTENT_ERROR_NONE;
1612 media_info_s *_media = (media_info_s*)media;
1614 if(_media && mime_type)
1616 if(STRING_VALID(_media->mime_type))
1618 *mime_type = strdup(_media->mime_type);
1619 if(*mime_type == NULL)
1621 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1622 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1629 ret = MEDIA_CONTENT_ERROR_NONE;
1633 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1634 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1640 int media_info_get_size(media_info_h media, unsigned long long *size)
1642 int ret = MEDIA_CONTENT_ERROR_NONE;
1643 media_info_s *_media = (media_info_s*)media;
1647 *size = _media->size;
1648 ret = MEDIA_CONTENT_ERROR_NONE;
1652 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1653 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1659 int media_info_get_added_time(media_info_h media, time_t *added_time)
1661 int ret = MEDIA_CONTENT_ERROR_NONE;
1662 media_info_s *_media = (media_info_s*)media;
1663 if(_media && added_time)
1665 *added_time = _media->added_time;
1666 ret = MEDIA_CONTENT_ERROR_NONE;
1670 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1671 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1677 int media_info_get_modified_time(media_info_h media, time_t* time)
1679 int ret = MEDIA_CONTENT_ERROR_NONE;
1680 media_info_s *_media = (media_info_s*)media;
1683 *time = _media->modified_time;
1684 ret = MEDIA_CONTENT_ERROR_NONE;
1688 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1689 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1695 int media_info_get_thumbnail_path(media_info_h media, char **path)
1697 int ret = MEDIA_CONTENT_ERROR_NONE;
1698 media_info_s *_media = (media_info_s*)media;
1701 if(STRING_VALID(_media->thumbnail_path))
1703 *path = strdup(_media->thumbnail_path);
1706 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1707 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1714 ret = MEDIA_CONTENT_ERROR_NONE;
1719 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1720 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1726 int media_info_get_description(media_info_h media, char **description)
1728 int ret = MEDIA_CONTENT_ERROR_NONE;
1729 media_info_s *_media = (media_info_s*)media;
1731 if(_media && description)
1733 if(STRING_VALID(_media->description))
1735 *description = strdup(_media->description);
1736 if(*description == NULL)
1738 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1739 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1744 *description = NULL;
1746 ret = MEDIA_CONTENT_ERROR_NONE;
1750 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1751 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1757 int media_info_get_longitude(media_info_h media, double* longitude)
1759 int ret = MEDIA_CONTENT_ERROR_NONE;
1760 media_info_s *_media = (media_info_s*)media;
1762 if(_media && longitude)
1764 *longitude = _media->longitude;
1765 ret = MEDIA_CONTENT_ERROR_NONE;
1769 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1770 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1775 int media_info_get_latitude(media_info_h media, double* latitude)
1777 int ret = MEDIA_CONTENT_ERROR_NONE;
1778 media_info_s *_media = (media_info_s*)media;
1780 if(_media && latitude)
1782 *latitude = _media->latitude;
1783 ret = MEDIA_CONTENT_ERROR_NONE;
1787 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1788 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1794 int media_info_get_altitude(media_info_h media, double *altitude)
1796 int ret = MEDIA_CONTENT_ERROR_NONE;
1797 media_info_s *_media = (media_info_s*)media;
1799 if(_media && altitude)
1801 *altitude = _media->altitude;
1802 ret = MEDIA_CONTENT_ERROR_NONE;
1806 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1807 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1813 int media_info_get_rating(media_info_h media, int *rating)
1815 int ret = MEDIA_CONTENT_ERROR_NONE;
1816 media_info_s *_media = (media_info_s*)media;
1818 if(_media && rating)
1820 *rating = _media->rating;
1821 ret = MEDIA_CONTENT_ERROR_NONE;
1825 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1826 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1832 int media_info_get_favorite(media_info_h media, bool* favorite)
1834 int ret = MEDIA_CONTENT_ERROR_NONE;
1835 media_info_s *_media = (media_info_s*)media;
1837 if(_media && favorite)
1840 *favorite = _media->favourite;
1841 ret = MEDIA_CONTENT_ERROR_NONE;
1845 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1846 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1852 int media_info_get_author(media_info_h media, char **author)
1854 int ret = MEDIA_CONTENT_ERROR_NONE;
1855 media_info_s *_media = (media_info_s*)media;
1857 if(_media && author)
1859 if(STRING_VALID(_media->author))
1861 *author = strdup(_media->author);
1864 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1865 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1872 ret = MEDIA_CONTENT_ERROR_NONE;
1876 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1877 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1883 int media_info_get_provider(media_info_h media, char **provider)
1885 int ret = MEDIA_CONTENT_ERROR_NONE;
1886 media_info_s *_media = (media_info_s*)media;
1888 if(_media && provider)
1890 if(STRING_VALID(_media->provider))
1892 *provider = strdup(_media->provider);
1893 if(*provider == NULL)
1895 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1896 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1903 ret = MEDIA_CONTENT_ERROR_NONE;
1907 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1908 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1914 int media_info_get_content_name(media_info_h media, char **content_name)
1916 int ret = MEDIA_CONTENT_ERROR_NONE;
1917 media_info_s *_media = (media_info_s*)media;
1919 if(_media && content_name)
1921 if(STRING_VALID(_media->content_name))
1923 *content_name = strdup(_media->content_name);
1924 if(*content_name == NULL)
1926 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1927 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1932 *content_name = NULL;
1934 ret = MEDIA_CONTENT_ERROR_NONE;
1938 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1939 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1945 int media_info_get_category(media_info_h media, char **category)
1947 int ret = MEDIA_CONTENT_ERROR_NONE;
1948 media_info_s *_media = (media_info_s*)media;
1950 if(_media && category)
1952 if(STRING_VALID(_media->category))
1954 *category = strdup(_media->category);
1955 if(*category == NULL)
1957 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1958 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1965 ret = MEDIA_CONTENT_ERROR_NONE;
1969 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1970 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1976 int media_info_get_location_tag(media_info_h media, char **location_tag)
1978 int ret = MEDIA_CONTENT_ERROR_NONE;
1979 media_info_s *_media = (media_info_s*)media;
1981 if(_media && location_tag)
1983 if(STRING_VALID(_media->location_tag))
1985 *location_tag = strdup(_media->location_tag);
1986 if(*location_tag == NULL)
1988 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1989 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1994 *location_tag = NULL;
1996 ret = MEDIA_CONTENT_ERROR_NONE;
2000 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2001 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2007 int media_info_get_age_rating(media_info_h media, char **age_rating)
2009 int ret = MEDIA_CONTENT_ERROR_NONE;
2010 media_info_s *_media = (media_info_s*)media;
2012 if(_media && age_rating)
2014 if(STRING_VALID(_media->age_rating))
2016 *age_rating = strdup(_media->age_rating);
2017 if(*age_rating == NULL)
2019 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2020 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2027 ret = MEDIA_CONTENT_ERROR_NONE;
2031 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2032 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2038 int media_info_get_keyword(media_info_h media, char **keyword)
2040 int ret = MEDIA_CONTENT_ERROR_NONE;
2041 media_info_s *_media = (media_info_s*)media;
2043 if(_media && keyword)
2045 if(STRING_VALID(_media->keyword))
2047 *keyword = strdup(_media->keyword);
2048 if(*keyword == NULL)
2050 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2051 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2058 ret = MEDIA_CONTENT_ERROR_NONE;
2062 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2063 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2069 int media_info_is_drm(media_info_h media, bool *is_drm)
2071 int ret = MEDIA_CONTENT_ERROR_NONE;
2072 media_info_s *_media = (media_info_s*)media;
2076 *is_drm = _media->is_drm;
2077 ret = MEDIA_CONTENT_ERROR_NONE;
2081 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2082 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2088 int media_info_get_storage_type(media_info_h media, media_content_storage_e *storage_type)
2090 int ret = MEDIA_CONTENT_ERROR_NONE;
2091 media_info_s *_media = (media_info_s*)media;
2093 if(_media && storage_type)
2095 *storage_type = _media->storage_type;
2096 ret = MEDIA_CONTENT_ERROR_NONE;
2100 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2101 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2107 int media_info_get_media_from_db(const char *media_id, media_info_h *media)
2109 int ret = MEDIA_CONTENT_ERROR_NONE;
2110 char select_query[DEFAULT_QUERY_SIZE];
2111 sqlite3_stmt *stmt = NULL;
2113 if(!STRING_VALID(media_id) || (media == NULL))
2115 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2116 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2119 memset(select_query, 0x00, sizeof(select_query));
2121 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_MEDIA, media_id);
2122 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
2123 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2125 while(sqlite3_step(stmt) == SQLITE_ROW)
2127 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
2131 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2132 SQLITE3_FINALIZE(stmt);
2133 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2136 _media_info_item_get_detail(stmt, (media_info_h)_media);
2138 *media = (media_info_h)_media;
2141 SQLITE3_FINALIZE(stmt);
2146 int media_info_set_display_name(media_info_h media, const char *display_name)
2148 int ret = MEDIA_CONTENT_ERROR_NONE;
2149 media_info_s *_media = (media_info_s*)media;
2151 if(_media != NULL && STRING_VALID(display_name))
2153 SAFE_FREE(_media->display_name);
2155 _media->display_name = strdup(display_name);
2156 if(_media->display_name == NULL)
2158 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2159 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2164 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2165 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2171 int media_info_set_description(media_info_h media, const char *description)
2173 int ret = MEDIA_CONTENT_ERROR_NONE;
2174 media_info_s *_media = (media_info_s*)media;
2178 SAFE_FREE(_media->description);
2180 if(STRING_VALID(description))
2182 _media->description = strdup(description);
2184 if(_media->description == NULL)
2186 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2187 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2192 _media->description = NULL;
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_longitude(media_info_h media, double longitude)
2206 int ret = MEDIA_CONTENT_ERROR_NONE;
2207 media_info_s *_media = (media_info_s*)media;
2211 _media->longitude = longitude;
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_latitude(media_info_h media, double latitude)
2224 int ret = MEDIA_CONTENT_ERROR_NONE;
2225 media_info_s *_media = (media_info_s*)media;
2229 _media->latitude = latitude;
2233 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2234 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2240 int media_info_set_altitude(media_info_h media, double altitude)
2242 int ret = MEDIA_CONTENT_ERROR_NONE;
2243 media_info_s *_media = (media_info_s*)media;
2247 _media->altitude = altitude;
2251 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2252 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2258 int media_info_set_rating(media_info_h media, int rating)
2260 int ret = MEDIA_CONTENT_ERROR_NONE;
2261 media_info_s *_media = (media_info_s*)media;
2265 _media->rating = rating;
2269 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2270 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2276 int media_info_set_added_time(media_info_h media, time_t added_time)
2278 int ret = MEDIA_CONTENT_ERROR_NONE;
2280 media_info_s *_media = (media_info_s*)media;
2282 if((_media != NULL) && (added_time >= 0))
2284 _media->added_time = added_time;
2288 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2289 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2295 int media_info_set_favorite(media_info_h media, bool favorite)
2297 int ret = MEDIA_CONTENT_ERROR_NONE;
2298 media_info_s *_media = (media_info_s*)media;
2302 _media->favourite = favorite;
2306 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2307 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2313 int media_info_set_author(media_info_h media, const char *author)
2315 int ret = MEDIA_CONTENT_ERROR_NONE;
2316 media_info_s *_media = (media_info_s*)media;
2320 if(STRING_VALID(author))
2322 _media->author = strdup(author);
2323 if(_media->author == NULL)
2325 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2326 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2331 _media->author = NULL;
2336 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2337 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2343 int media_info_set_provider(media_info_h media, const char *provider)
2345 int ret = MEDIA_CONTENT_ERROR_NONE;
2346 media_info_s *_media = (media_info_s*)media;
2350 SAFE_FREE(_media->provider);
2352 if(STRING_VALID(provider))
2354 _media->provider = strdup(provider);
2355 if(_media->provider == NULL)
2357 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2358 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2363 _media->provider = NULL;
2368 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2369 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2375 int media_info_set_content_name(media_info_h media, const char *content_name)
2377 int ret = MEDIA_CONTENT_ERROR_NONE;
2378 media_info_s *_media = (media_info_s*)media;
2382 SAFE_FREE(_media->content_name);
2384 if(STRING_VALID(content_name))
2386 _media->content_name = strdup(content_name);
2387 if(_media->content_name == NULL)
2389 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2390 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2395 _media->content_name = NULL;
2400 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2401 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2407 int media_info_set_category(media_info_h media, const char *category)
2409 int ret = MEDIA_CONTENT_ERROR_NONE;
2410 media_info_s *_media = (media_info_s*)media;
2414 SAFE_FREE(_media->category);
2416 if(STRING_VALID(category))
2418 _media->category = strdup(category);
2419 if(_media->category == NULL)
2421 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2422 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2427 _media->category = NULL;
2432 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2433 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2439 int media_info_set_location_tag(media_info_h media, const char *location_tag)
2441 int ret = MEDIA_CONTENT_ERROR_NONE;
2442 media_info_s *_media = (media_info_s*)media;
2446 SAFE_FREE(_media->location_tag);
2448 if(STRING_VALID(location_tag))
2450 _media->location_tag = strdup(location_tag);
2451 if(_media->location_tag == NULL)
2453 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2454 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2459 _media->location_tag = NULL;
2464 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2465 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2471 int media_info_set_age_rating(media_info_h media, const char *age_rating)
2473 int ret = MEDIA_CONTENT_ERROR_NONE;
2474 media_info_s *_media = (media_info_s*)media;
2478 SAFE_FREE(_media->age_rating);
2480 if(STRING_VALID(age_rating))
2482 _media->age_rating = strdup(age_rating);
2483 if(_media->age_rating == NULL)
2485 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2486 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2491 _media->age_rating = NULL;
2496 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2497 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2503 int media_info_set_keyword(media_info_h media, const char *keyword)
2505 int ret = MEDIA_CONTENT_ERROR_NONE;
2506 media_info_s *_media = (media_info_s*)media;
2510 SAFE_FREE(_media->keyword);
2512 if(STRING_VALID(keyword))
2514 _media->keyword = strdup(keyword);
2515 if(_media->keyword == NULL)
2517 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
2518 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
2523 _media->keyword = NULL;
2528 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2529 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2535 int media_info_update_to_db(media_info_h media)
2537 int ret = MEDIA_CONTENT_ERROR_NONE;
2539 media_info_s *_media = (media_info_s*)media;
2540 char *set_sql = NULL;
2541 char sql[MAX_QUERY_SIZE];
2542 memset(sql, '\0', sizeof(sql));
2544 if(_media != NULL && STRING_VALID(_media->media_id))
2546 /* This sql is due to sqlite3_mprintf's wrong operation when using floating point in the text format */
2547 /* This code will be removed when sqlite3_mprintf works clearly */
2548 char *test_sql = sqlite3_mprintf("%f, %f, %f", _media->longitude, _media->latitude, _media->altitude);
2549 sqlite3_free(test_sql);
2551 set_sql = sqlite3_mprintf("file_name=%Q, added_time=%d, description=%Q, longitude=%f, latitude=%f, altitude=%f, \
2552 rating=%d, favourite=%d, author=%Q, provider=%Q, content_name=%Q, category=%Q, location_tag=%Q, age_rating=%Q, keyword=%Q",
2553 _media->display_name, _media->added_time, _media->description, _media->longitude, _media->latitude, _media->altitude, _media->rating, _media->favourite,
2554 _media->author, _media->provider, _media->content_name, _media->category, _media->location_tag, _media->age_rating, _media->keyword);
2556 len = snprintf(sql, sizeof(sql), "UPDATE %s SET %s WHERE media_uuid='%s'", DB_TABLE_MEDIA, set_sql, _media->media_id);
2557 sqlite3_free(set_sql);
2561 media_content_error("snprintf failed");
2562 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2565 ret = _content_query_sql(sql);
2566 if (ret == MEDIA_CONTENT_ERROR_NONE) {
2567 /* Send notification for this update */
2568 media_content_debug("Update is successfull. Send notification for this");
2569 if (_media->file_path && _media->mime_type) {
2570 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);
2572 media_content_error("Can't media_db_update_send : path or mime type is NULL");
2578 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2579 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2585 int media_info_refresh_metadata_to_db(const char *media_id)
2587 int ret = MEDIA_CONTENT_ERROR_NONE;
2588 media_info_h media = NULL;
2589 char *file_path = NULL;
2590 media_content_storage_e storage_type = 0;
2592 if(!STRING_VALID(media_id))
2594 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2595 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2598 ret = media_info_get_media_from_db(media_id, &media);
2599 if(ret != MEDIA_CONTENT_ERROR_NONE)
2601 media_info_destroy(media);
2605 ret = media_info_get_storage_type(media, &storage_type);
2606 if(ret != MEDIA_CONTENT_ERROR_NONE)
2608 media_info_destroy(media);
2612 ret = media_info_get_file_path(media, &file_path);
2613 if(ret != MEDIA_CONTENT_ERROR_NONE)
2615 media_info_destroy(media);
2619 ret = media_svc_refresh_item(_content_get_db_handle(), storage_type, file_path);
2621 SAFE_FREE(file_path);
2622 media_info_destroy(media);
2627 int media_info_move_to_db(media_info_h media, const char* dst_path)
2629 int ret = MEDIA_CONTENT_ERROR_NONE;
2631 int src_storage_type = 0;
2632 int dst_storage_type = 0;
2634 if(media == NULL || !STRING_VALID(dst_path))
2636 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2637 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2640 media_info_s *_media = (media_info_s*)media;
2642 ret = _media_util_get_store_type_by_path(_media->file_path, &src_storage_type);
2643 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2644 ret = _media_util_get_store_type_by_path(dst_path, &dst_storage_type);
2645 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
2647 ret = media_svc_move_item(_content_get_db_handle(), src_storage_type, _media->file_path, dst_storage_type, dst_path);
2648 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
2651 int media_info_create_thumbnail(media_info_h media, media_thumbnail_completed_cb callback, void *user_data)
2653 int ret = MEDIA_CONTENT_ERROR_NONE;
2654 media_info_s *_media = (media_info_s*)media;
2656 if(_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path))
2658 media_thumbnail_cb_s *_thumb_cb = (media_thumbnail_cb_s*)calloc(1, sizeof(media_thumbnail_cb_s));
2659 _thumb_cb->handle = _media;
2660 _thumb_cb->user_data = user_data;
2661 _thumb_cb->thumbnail_completed_cb = callback;
2663 ret = thumbnail_request_from_db_async(_media->file_path, (ThumbFunc)__media_info_thumbnail_completed_cb, (void *)_thumb_cb);
2664 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
2668 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2669 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
2675 int media_info_cancel_thumbnail(media_info_h media)
2677 int ret = MEDIA_CONTENT_ERROR_NONE;
2678 media_info_s *_media = (media_info_s*)media;
2680 if(_media != NULL && STRING_VALID(_media->media_id) && STRING_VALID(_media->file_path))
2682 ret = thumbnail_request_cancel_media(_media->file_path);
2683 ret = _content_error_capi(MEDIA_THUMBNAIL_TYPE, ret);
2687 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
2688 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;