2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
\r
4 * Licensed under the Apache License, Version 2.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.apache.org/licenses/LICENSE-2.0
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
18 #include <media_content.h>
\r
19 #include <media_info_private.h>
\r
20 #include <media-svc.h>
\r
21 #include <audio-svc.h>
\r
22 #include <audio-svc-error.h>
\r
23 #include <audio-svc-types.h>
\r
25 #include <visual-svc-error.h>
\r
26 #include <visual-svc-types.h>
\r
27 #include <visual-svc.h>
\r
29 #include <drm-service.h>
\r
38 #define LOG_TAG "TIZEN_N_MEDIACONTENT"
\r
40 extern MediaSvcHandle* db_handle;
\r
43 #define SELECT_AUDIO_FROM_MEDIA "select audio_uuid,genre,album,artist,author,year,copyright,description,format,bitrate,track_num,duration,rating,played_count,last_played_time,added_time,size,category from audio_media where audio_uuid='%s' "
\r
44 #define SELECT_TAG_LIST_FROM_MEDIA "select t._id, t.tag_name from (select _id, tag_name from visual_tag ORDER BY tag_name ASC ) t, ( select visual_uuid, tag_id from visual_tag_map where visual_uuid='%s' ) tm, ( select visual_uuid, folder_uuid from visual_media) m, ( select folder_uuid, lock_status from visual_folder where valid=1 ) f where tm.tag_id = t._id and m.visual_uuid = tm.visual_uuid and m.folder_uuid = f.folder_uuid and f.lock_status=0; "
\r
46 int media_info_insert_to_db(media_content_type_e type,const char* path)
\r
48 int ret= MEDIA_CONTENT_ERROR_NONE;
\r
51 minfo_file_type _type;
\r
54 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
55 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
60 case MEDIA_CONTENT_TYPE_IMAGE:
\r
61 _type = MINFO_ITEM_IMAGE;
\r
62 ret = minfo_add_media(db_handle, path, _type);
\r
63 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
\r
65 case MEDIA_CONTENT_TYPE_VIDEO:
\r
66 _type = MINFO_ITEM_VIDEO;
\r
67 ret = minfo_add_media(db_handle, path, _type);
\r
68 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
\r
71 case MEDIA_CONTENT_TYPE_AUDIO:
\r
72 storage_type = _content_get_storage_type(path);
\r
73 ret = _content_get_audio_category(path,&category);
\r
76 ret = audio_svc_insert_item(db_handle, storage_type,path,category);
\r
80 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
81 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
87 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
88 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
99 int media_info_destroy(media_info_h item)
\r
103 media_info_s* _item = (media_info_s*)item;
\r
108 free(_item->item_id);
\r
111 if(_item->file_path)
\r
113 free(_item->file_path);
\r
115 if(_item->display_name)
\r
117 free(_item->display_name);
\r
119 if(_item->thumbnail)
\r
121 free(_item->thumbnail);
\r
124 ret = MEDIA_CONTENT_ERROR_NONE;
\r
128 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
129 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
136 int media_info_clone(media_info_h* dst, media_info_h src)
\r
139 media_info_s* _src = (media_info_s*)src;
\r
144 media_info_s* _dst = (media_info_s*)calloc(1,sizeof(media_info_s));
\r
148 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
149 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
152 _dst->item_id = strdup(_src->item_id);
\r
153 if( _dst->item_id == NULL)
\r
155 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
156 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
158 _dst->date_modified= _src->date_modified;
\r
159 _dst->favorite = _src->favorite;
\r
160 _dst->media_type = _src->media_type;
\r
161 if((_src->file_path != NULL) && (strlen(_src->file_path) > 0))
\r
163 _dst->file_path = strdup(_src->file_path);
\r
164 if(_dst->file_path == NULL)
\r
166 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
167 media_info_destroy((media_info_h)_dst);
\r
168 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
171 if((_src->display_name != NULL) && (strlen(_src->display_name) > 0))
\r
173 _dst->display_name = strdup(_src->display_name);
\r
174 if(_dst->display_name == NULL)
\r
176 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
177 media_info_destroy((media_info_h)_dst);
\r
178 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
181 if((_src->thumbnail != NULL) && (strlen(_src->thumbnail) > 0))
\r
183 _dst->thumbnail = strdup(_src->thumbnail);
\r
184 if(_dst->thumbnail == NULL)
\r
186 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
187 media_info_destroy((media_info_h)_dst);
\r
188 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
192 *dst = (media_info_h)_dst;
\r
193 ret = MEDIA_CONTENT_ERROR_NONE;
\r
197 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
198 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
204 int media_info_get_file_path(media_info_h item, char** path)
\r
207 media_info_s* _item = (media_info_s*)item;
\r
211 if((_item->file_path != NULL) && (strlen(_item->file_path) > 0))
\r
213 *path = strdup(_item->file_path);
\r
216 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
217 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
224 ret = MEDIA_CONTENT_ERROR_NONE;
\r
229 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
230 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
237 int media_info_get_display_name(media_info_h item, char** name)
\r
240 media_info_s* _item = (media_info_s*)item;
\r
243 if((_item->display_name != NULL) && (strlen(_item->display_name) > 0))
\r
245 *name = strdup(_item->display_name);
\r
248 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
249 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
256 ret = MEDIA_CONTENT_ERROR_NONE;
\r
261 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
262 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
269 int media_info_get_thumbnail_path(media_info_h item, char** path)
\r
272 media_info_s* _item = (media_info_s*)item;
\r
275 if((_item->thumbnail != NULL) && (strlen(_item->thumbnail) > 0))
\r
277 *path = strdup(_item->thumbnail);
\r
280 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
281 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
288 ret = MEDIA_CONTENT_ERROR_NONE;
\r
293 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
294 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
301 int media_info_get_date_modified(media_info_h item, time_t* time)
\r
304 media_info_s* _item = (media_info_s*)item;
\r
307 *time = _item->date_modified;
\r
308 ret = MEDIA_CONTENT_ERROR_NONE;
\r
312 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
313 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
320 int media_info_get_media_type(media_info_h item, int* type)
\r
323 media_info_s* _item = (media_info_s*)item;
\r
326 *type = _item->media_type;
\r
327 ret = MEDIA_CONTENT_ERROR_NONE;
\r
331 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
332 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
339 int media_info_get_favorite(media_info_h media, int* favorite)
\r
342 media_info_s* _media = (media_info_s*)media;
\r
346 *favorite = _media->favorite;
\r
347 ret = MEDIA_CONTENT_ERROR_NONE;
\r
351 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
352 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
360 int media_info_update_favorite_to_db(media_info_h media, int favorite)
\r
362 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
363 media_info_s* _media = (media_info_s*)media;
\r
367 if(_media->media_type == MEDIA_CONTENT_TYPE_AUDIO)
\r
371 ret = audio_svc_add_item_to_playlist( db_handle, AUDIO_SVC_FAVORITE_LIST_ID, _media->item_id);
\r
375 ret = audio_svc_remove_item_from_playlist_by_audio_id(db_handle, AUDIO_SVC_FAVORITE_LIST_ID, _media->item_id);
\r
380 ret = minfo_update_media_favorite(db_handle, _media->item_id,favorite);
\r
382 ret = _content_error_capi(MEDIA_CONTENT_TYPE,ret);
\r
383 if(ret == MEDIA_CONTENT_ERROR_NONE)
\r
385 _media->favorite = favorite;
\r
390 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
391 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
400 int media_info_foreach_media_from_db(media_info_filter_h filter,media_info_cb callback, void* user_data)
\r
402 int ret= MEDIA_CONTENT_ERROR_NONE;
\r
404 char limit_query[MIN_QUERY_SIZE];
\r
405 char condition_query[DEFAULT_QUERY_SIZE];
\r
406 char search_query[MAX_KEYWORD_SIZE];
\r
407 char condition_type[MIN_QUERY_SIZE];
\r
408 char select_query[DEFAULT_QUERY_SIZE];
\r
409 char order_query[MIN_QUERY_SIZE];
\r
412 sqlite3_stmt *stmt = NULL;
\r
415 media_info_filter_s* _filter = NULL;
\r
417 if( callback == NULL )
\r
419 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
420 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
427 _filter = (media_info_filter_s*)filter;
\r
429 if(!(_filter->media_type & (MEDIA_CONTENT_TYPE_IMAGE | MEDIA_CONTENT_TYPE_VIDEO | MEDIA_CONTENT_TYPE_AUDIO)) )
\r
431 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
432 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
437 ret = media_info_filter_create((media_info_filter_h*)&_filter);
\r
439 if(ret != MEDIA_CONTENT_ERROR_NONE)
\r
444 if(_filter->media_type == 0)
\r
446 _filter->media_type = (MEDIA_CONTENT_TYPE_IMAGE | MEDIA_CONTENT_TYPE_VIDEO | MEDIA_CONTENT_TYPE_AUDIO);
\r
450 memset(order_query,0x00,sizeof(order_query));
\r
451 memset(condition_type,0x00,sizeof(condition_type));
\r
452 memset(condition_query,0x00,sizeof(condition_query));
\r
453 memset(limit_query,0x00,sizeof(limit_query));
\r
454 memset(search_query,0x00,sizeof(search_query));
\r
455 memset(select_query,0x00,sizeof(select_query));
\r
458 if((_filter->keyword != NULL) && strlen(_filter->keyword) > 0)
\r
460 if(strlen(_filter->keyword) < sizeof(search_query))
\r
462 snprintf(search_query,sizeof(search_query)," and display_name like '%%%s%%'", _filter->keyword);
\r
466 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
467 if((media_info_filter_s*)filter != _filter)
\r
468 media_info_filter_destroy((media_info_filter_h)_filter);
\r
469 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
474 search_query[0] = ' ';
\r
477 snprintf(limit_query,sizeof(limit_query),"%s %d,%d",QUERY_KEYWORD_LIMIT,_filter->offset,_filter->count);
\r
480 if(_filter->media_type & MEDIA_CONTENT_TYPE_IMAGE)
\r
482 strncat(condition_type,CONDITION_TYPE_IMAGE,strlen(CONDITION_TYPE_IMAGE));
\r
484 if(_filter->media_type & MEDIA_CONTENT_TYPE_VIDEO)
\r
486 if(strlen(condition_type) > 0 )
\r
488 strncat(condition_type,QUERY_KEYWORD_SPACE, strlen(QUERY_KEYWORD_SPACE));
\r
489 strncat(condition_type,QUERY_KEYWORD_OR, strlen(QUERY_KEYWORD_OR));
\r
490 strncat(condition_type,QUERY_KEYWORD_SPACE, strlen(QUERY_KEYWORD_SPACE));
\r
492 strncat(condition_type,CONDITION_TYPE_VIDEO,strlen(CONDITION_TYPE_VIDEO));
\r
495 if(_filter->media_type & MEDIA_CONTENT_TYPE_AUDIO)
\r
497 if(strlen(condition_type) > 0 )
\r
499 strncat(condition_type,QUERY_KEYWORD_SPACE, strlen(QUERY_KEYWORD_SPACE));
\r
500 strncat(condition_type,QUERY_KEYWORD_OR, strlen(QUERY_KEYWORD_OR));
\r
501 strncat(condition_type,QUERY_KEYWORD_SPACE, strlen(QUERY_KEYWORD_SPACE));
\r
504 strncat(condition_type,CONDITION_TYPE_AUDIO,strlen(CONDITION_TYPE_AUDIO));
\r
508 snprintf(select_query,sizeof(select_query),"%s", SELECT_MEDIA_ITEM);
\r
510 snprintf(condition_query,sizeof(condition_query), "%s (%s)", QUERY_KEYWORD_AND, condition_type);
\r
512 if(_filter->order == MEDIA_CONTENT_SORT_BY_NAME_ASC)
\r
514 snprintf(order_query,sizeof(order_query),"%s %s",QUERY_KEYWORD_ORDER_BY,DB_FILED_DISPLAY_NAME);
\r
516 else if(_filter->order == MEDIA_CONTENT_SORT_BY_NAME_DESC)
\r
518 snprintf(order_query,sizeof(order_query),"%s %s %s",QUERY_KEYWORD_ORDER_BY,DB_FILED_DISPLAY_NAME,QUERY_KEYWORD_DESC);
\r
520 else if(_filter->order == MEDIA_CONTENT_SORT_BY_DATE_ASC)
\r
522 snprintf(order_query,sizeof(order_query),"%s %s",QUERY_KEYWORD_ORDER_BY,DB_FILED_DATE_MODIFIED);
\r
524 else if(_filter->order == MEDIA_CONTENT_SORT_BY_DATE_DESC)
\r
526 snprintf(order_query,sizeof(order_query),"%s %s %s",QUERY_KEYWORD_ORDER_BY,DB_FILED_DATE_MODIFIED,QUERY_KEYWORD_DESC);
\r
530 if((media_info_filter_s*)filter != _filter)
\r
531 media_info_filter_destroy((media_info_filter_h)_filter);
\r
534 ret = _content_query_prepare(&stmt,select_query,condition_query, search_query,limit_query,order_query);
\r
535 if( ret != MEDIA_CONTENT_ERROR_NONE)
\r
539 while( sqlite3_step(stmt) == SQLITE_ROW)
\r
541 media_info_s* item1 = (media_info_s*)calloc(1,sizeof(media_info_s));
\r
545 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
546 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
548 _content_item_get_detail(stmt,(media_info_h)item1);
\r
550 if( callback((media_info_h)item1,user_data) == false)
\r
552 media_info_destroy((media_info_h) item1);
\r
555 media_info_destroy((media_info_h) item1);
\r
560 sqlite3_finalize(stmt);
\r
569 int media_info_get_image_from_db(media_info_h item, image_meta_h* image)
\r
572 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
573 Mitem* p_item = NULL;
\r
574 image_meta_s* _image = NULL;
\r
578 media_info_s* _item = (media_info_s*)item;
\r
580 if( _item == NULL )
\r
582 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
583 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
586 if(_item->media_type != MEDIA_CONTENT_TYPE_IMAGE)
\r
588 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
589 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
592 p_ret = minfo_get_item_by_id(db_handle, _item->item_id,&p_item);
\r
594 ret = _content_error_capi(MEDIA_CONTENT_TYPE,p_ret);
\r
595 if( (ret == MEDIA_CONTENT_ERROR_NONE) && ( p_item != NULL))
\r
597 ret = minfo_get_meta_info(db_handle, _item->item_id,&(p_item->meta_info));
\r
598 ret = _content_error_capi(MEDIA_CONTENT_TYPE,p_ret);
\r
600 if( ret != MEDIA_CONTENT_ERROR_NONE)
\r
602 minfo_destroy_mtype_item(p_item);
\r
605 _image = (image_meta_s*)calloc(1, sizeof(image_meta_s));
\r
608 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
609 minfo_destroy_mtype_item(p_item);
\r
610 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
614 _image->image_id = strdup(p_item->uuid);
\r
615 if(p_item->thumb_url != NULL)
\r
616 _image->thumbnail = strdup(p_item->thumb_url);
\r
617 if(p_item->rate > 0)
\r
618 _image->favorite = true;
\r
620 _image->favorite = false;
\r
622 if(p_item->meta_info != NULL)
\r
624 _image->longitude = p_item->meta_info->longitude;
\r
625 _image->latitude = p_item->meta_info->latitude;
\r
626 _image->width = p_item->meta_info->width;
\r
627 _image->height = p_item->meta_info->height;
\r
628 _image->date_taken = p_item->meta_info->datetaken;
\r
629 if(p_item->meta_info->description != NULL)
\r
630 _image->description = strdup(p_item->meta_info->description);
\r
632 if((p_item->meta_info != NULL) && (p_item->meta_info->image_info != NULL))
\r
634 _image->orientation = p_item->meta_info->image_info->orientation;
\r
637 *image = (image_meta_h)_image;
\r
638 p_ret = minfo_destroy_mtype_item(p_item);
\r
639 ret = _content_error_capi(MEDIA_CONTENT_TYPE,p_ret);
\r
647 int media_info_get_video_from_db(media_info_h item, video_meta_h* video)
\r
651 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
652 Mitem* p_item = NULL;
\r
653 video_meta_s* _video = NULL;
\r
656 media_info_s* _item = (media_info_s*)item;
\r
657 if( _item == NULL )
\r
659 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
660 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
663 if(_item->media_type != MEDIA_CONTENT_TYPE_VIDEO)
\r
665 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
666 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
669 p_ret = minfo_get_item_by_id(db_handle, _item->item_id,&p_item);
\r
672 ret = _content_error_capi(MEDIA_CONTENT_TYPE,p_ret);
\r
673 if( (ret == MEDIA_CONTENT_ERROR_NONE) && ( p_item != NULL))
\r
675 ret = minfo_get_meta_info(db_handle, _item->item_id,&(p_item->meta_info));
\r
676 ret = _content_error_capi(MEDIA_CONTENT_TYPE,p_ret);
\r
677 if( ret != MEDIA_CONTENT_ERROR_NONE)
\r
679 minfo_destroy_mtype_item(p_item);
\r
683 _video = (video_meta_s*)calloc(1,sizeof(video_meta_s));
\r
684 if( _video == NULL)
\r
686 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
687 minfo_destroy_mtype_item(p_item);
\r
688 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
691 _video->video_id = strdup(p_item->uuid);
\r
692 if(p_item->thumb_url)
\r
693 _video->thumbnail = strdup(p_item->thumb_url);
\r
695 if(p_item->rate > 0)
\r
696 _video->favorite = true;
\r
698 _video->favorite = false;
\r
701 if(p_item->meta_info != NULL)
\r
703 _video->longitude = p_item->meta_info->longitude;
\r
704 _video->latitude = p_item->meta_info->latitude;
\r
705 _video->width = p_item->meta_info->width;
\r
706 _video->height = p_item->meta_info->height;
\r
707 _video->date_taken = p_item->meta_info->datetaken;
\r
708 if(p_item->meta_info->description)
\r
709 _video->description = strdup(p_item->meta_info->description);
\r
711 if((p_item->meta_info != NULL) && (p_item->meta_info->video_info != NULL))
\r
713 if(p_item->meta_info->video_info->album_name != NULL)
\r
715 _video->album = strdup(p_item->meta_info->video_info->album_name);
\r
717 if(p_item->meta_info->video_info->artist_name != NULL)
\r
718 _video->artist = strdup(p_item->meta_info->video_info->artist_name);
\r
719 if(p_item->meta_info->video_info->title != NULL)
\r
720 _video->title = strdup(p_item->meta_info->video_info->title);
\r
723 _video->time_played = p_item->meta_info->video_info->last_played_pos;
\r
724 _video->duration = p_item->meta_info->video_info->duration;
\r
726 *video = (video_meta_h)_video;
\r
727 p_ret = minfo_destroy_mtype_item(p_item);
\r
728 ret = _content_error_capi(MEDIA_CONTENT_TYPE,p_ret);
\r
734 int media_info_get_audio_from_db(media_info_h item, audio_meta_h* audio)
\r
736 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
738 media_info_s* _item = (media_info_s*)item;
\r
740 char select_query[DEFAULT_QUERY_SIZE];
\r
741 sqlite3_stmt *stmt = NULL;
\r
745 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
746 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
749 if(_item->media_type != MEDIA_CONTENT_TYPE_AUDIO)
\r
751 LOGE("[%s] the type of media is not an audio.",__func__);
\r
752 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
756 memset(select_query,0x00,sizeof(select_query));
\r
758 snprintf(select_query,sizeof(select_query), SELECT_AUDIO_FROM_MEDIA,_item->item_id);
\r
760 ret = _content_query_prepare(&stmt,select_query,NULL,NULL,NULL,NULL);
\r
763 if( ret != MEDIA_CONTENT_ERROR_NONE)
\r
767 audio_meta_s* _audio = (audio_meta_s*)calloc(1,sizeof(audio_meta_s));
\r
770 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
771 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
775 while( sqlite3_step(stmt) == SQLITE_ROW)
\r
777 _audio->audio_id = strdup((const char *)sqlite3_column_text(stmt, 0));
\r
778 _audio->genre = strdup((const char *)sqlite3_column_text(stmt, 1));
\r
779 _audio->album = strdup((const char *)sqlite3_column_text(stmt, 2));
\r
780 _audio->artist= strdup((const char *)sqlite3_column_text(stmt, 3));
\r
781 _audio->author= strdup((const char *)sqlite3_column_text(stmt, 4));
\r
782 _audio->year= strdup((const char *)sqlite3_column_text(stmt, 5));
\r
783 _audio->copyright= strdup((const char *)sqlite3_column_text(stmt, 6));
\r
784 _audio->description= strdup((const char *)sqlite3_column_text(stmt, 7));
\r
785 _audio->format= strdup((const char *)sqlite3_column_text(stmt, 8));
\r
786 _audio->bitrate = (int)sqlite3_column_int(stmt,9);
\r
787 _audio->track_num = (int)sqlite3_column_int(stmt,10);
\r
788 _audio->duration = (int)sqlite3_column_int(stmt,11);
\r
789 _audio->rating = (int)sqlite3_column_int(stmt,12);
\r
790 _audio->count_played = (int)sqlite3_column_int(stmt,13);
\r
791 _audio->time_played = (int)sqlite3_column_int(stmt,14);
\r
792 _audio->time_added = (int)sqlite3_column_int(stmt,15);
\r
793 _audio->size = (int)sqlite3_column_int(stmt,16);
\r
794 _audio->category = (int)sqlite3_column_int(stmt,17);
\r
796 *audio = (audio_meta_h)_audio;
\r
799 sqlite3_finalize(stmt);
\r
808 int media_info_foreach_tag_from_db(media_info_h item, media_tag_cb callback, void *user_data)
\r
810 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
811 char select_query[DEFAULT_QUERY_SIZE];
\r
812 sqlite3_stmt *stmt = NULL;
\r
814 media_info_s* _item = (media_info_s*)item;
\r
818 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
819 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
821 if(callback == NULL)
\r
823 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
824 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
827 snprintf(select_query,sizeof(select_query),SELECT_TAG_LIST_FROM_MEDIA,_item->item_id);
\r
828 ret = _content_query_prepare(&stmt,select_query,NULL,NULL,NULL,NULL);
\r
829 if(ret != MEDIA_CONTENT_ERROR_NONE)
\r
832 while( sqlite3_step(stmt) == SQLITE_ROW)
\r
834 media_tag_s* _tag = (media_tag_s*)calloc(1,sizeof(media_tag_s));
\r
838 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
839 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
842 _tag->tag_id = (int)sqlite3_column_int(stmt,0);
\r
843 _tag->name = strdup((const char *)sqlite3_column_text(stmt, 1));
\r
844 if(callback((media_tag_h)_tag,user_data) == false)
\r
846 media_tag_destroy((media_tag_h) _tag);
\r
849 media_tag_destroy((media_tag_h) _tag);
\r
855 sqlite3_finalize(stmt);
\r
862 void _content_item_get_detail(sqlite3_stmt* stmt, media_info_h item)
\r
864 //item_id, file_path, display_name, thumbnail, date_modified,content_type, valid
\r
865 media_info_s* _item = (media_info_s*)item;
\r
866 _item->item_id = strdup((const char *)sqlite3_column_text(stmt, 0));
\r
867 _item->file_path= strdup((const char *)sqlite3_column_text(stmt, 1));
\r
868 _item->display_name=strdup((const char *)sqlite3_column_text(stmt, 2));
\r
869 _item->thumbnail=strdup((const char *)sqlite3_column_text(stmt, 3));
\r
870 _item->date_modified = (int)sqlite3_column_int(stmt,4);
\r
871 _item->media_type = (int)sqlite3_column_int(stmt,5);
\r
872 _item->media_type = _item->media_type==3?4:_item->media_type;
\r
873 _item->favorite = (int)sqlite3_column_int(stmt,6);
\r
876 int _content_get_storage_type(const char* full_path)
\r
878 if (full_path != NULL) {
\r
879 if (strncmp(full_path, MEDIA_CONTENT_PATH_PHONE , strlen(MEDIA_CONTENT_PATH_PHONE )) == 0)
\r
881 return MEDIA_CONTENT_STORAGE_INTERNAL;
\r
883 else if (strncmp(full_path, MEDIA_CONTENT_PATH_MMC , strlen(MEDIA_CONTENT_PATH_MMC )) == 0)
\r
885 return MEDIA_CONTENT_STORAGE_EXTERNAL;
\r
889 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
893 #define CONTENT_TYPE_NUM 4
\r
894 #define FEX_CATEGORY_UNKNOWN 0x00000000 /**< Default */
\r
895 #define FEX_CATEGORY_ETC 0x00000001 /**< ETC category */
\r
896 #define FEX_CATEGORY_IMAGE 0x00000002 /**< Image category */
\r
897 #define FEX_CATEGORY_VIDEO 0x00000004 /**< Video category */
\r
898 #define FEX_CATEGORY_MUSIC 0x00000008 /**< Music category */
\r
899 #define FEX_CATEGORY_SOUND 0x00000010 /**< Sound category */
\r
900 #define FEX_CATEGORY_DRM 0x00000020 /**< DRM category */
\r
901 #define SOUND_MIME_NUM 1
\r
902 #define MINE_LENGTH 30
\r
903 #define MUSIC_MIME_NUM 12
\r
908 char content_type[15];
\r
909 int category_by_mime;
\r
910 }fex_content_table_t;
\r
912 static const fex_content_table_t content_category[CONTENT_TYPE_NUM] = {
\r
913 {"audio", FEX_CATEGORY_SOUND},
\r
914 {"image", FEX_CATEGORY_IMAGE},
\r
915 {"video", FEX_CATEGORY_VIDEO},
\r
916 {"application", FEX_CATEGORY_ETC},
\r
919 static const char sound_mime_table[SOUND_MIME_NUM][MINE_LENGTH] = {
\r
922 static const char music_mime_table[MUSIC_MIME_NUM][MINE_LENGTH] = {
\r
927 "vnd.rn-realaudio",
\r
937 #define FMS_DRM_CONTENT_TYPE_LENGTH 100
\r
939 int _content_get_audio_category(const char* file_full_path,int* category)
\r
942 char mimetype[255] = {0,};
\r
944 bool is_drm = false;
\r
945 drm_content_info_t contentInfo = {0};
\r
947 if (file_full_path == NULL)
\r
948 return FEX_CATEGORY_UNKNOWN;
\r
951 if (drm_svc_is_drm_file(file_full_path) == DRM_TRUE)
\r
954 // 2008.8.13 han. In this case, use drm_svc_get_content_info api.
\r
955 result = drm_svc_get_content_info(file_full_path, &contentInfo);
\r
956 if (result != DRM_RESULT_SUCCESS)
\r
958 *category = FEX_CATEGORY_UNKNOWN;
\r
961 strncpy(mimetype, contentInfo.contentType, strlen(contentInfo.contentType)+1);
\r
962 *category = *category | FEX_CATEGORY_DRM;
\r
967 result = aul_get_mime_from_file(file_full_path, mimetype, sizeof(mimetype));
\r
970 *category = FEX_CATEGORY_UNKNOWN;
\r
975 for(i = 0; i < CONTENT_TYPE_NUM; i ++)
\r
977 if (strstr(mimetype, content_category[i].content_type) != NULL)
\r
979 *category = (*category | content_category[i].category_by_mime);
\r
983 if (*category & FEX_CATEGORY_ETC)
\r
985 int prefix_len = strlen(content_category[0].content_type);
\r
987 for(i = 0; i < SOUND_MIME_NUM; i ++)
\r
989 if (strstr(mimetype+prefix_len, sound_mime_table[i]) != NULL)
\r
991 *category = FEX_CATEGORY_SOUND;
\r
997 *category = *category | FEX_CATEGORY_DRM;;
\r
1000 if (!(*category & FEX_CATEGORY_SOUND))
\r
1006 if(is_drm) //if sound file is DRM, it is always music file.
\r
1008 *category = FEX_CATEGORY_MUSIC;
\r
1009 *category = *category | FEX_CATEGORY_DRM;
\r
1011 else //check music file in sound files.
\r
1013 int prefix_len = strlen(content_category[0].content_type);
\r
1015 for(i = 0; i < MUSIC_MIME_NUM; i ++)
\r
1017 if (strstr(mimetype+prefix_len, music_mime_table[i]) != NULL)
\r
1019 *category = FEX_CATEGORY_MUSIC;
\r