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 <audio-svc.h>
\r
21 #include <audio-svc-error.h>
\r
22 #include <audio-svc-types.h>
\r
23 #include <visual-svc-types.h>
\r
24 #include <visual-svc.h>
\r
31 #define LOG_TAG "TIZEN_N_MEDIACONTENT"
\r
33 int media_tag_foreach_tag_from_db(media_tag_filter_h filter, media_tag_cb callback,void* user_data)
\r
35 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
37 char limit_query[MIN_QUERY_SIZE];
\r
38 char search_query[DEFAULT_QUERY_SIZE];
\r
39 char select_query[DEFAULT_QUERY_SIZE];
\r
40 char order_query[MIN_QUERY_SIZE];
\r
42 sqlite3_stmt *stmt = NULL;
\r
45 media_tag_filter_s* _filter = NULL;
\r
48 if(callback == NULL )
\r
50 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
51 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
55 memset(limit_query,0x00,sizeof(limit_query));
\r
56 memset(search_query,0x00,sizeof(search_query));
\r
57 memset(select_query,0x00,sizeof(select_query));
\r
58 memset(order_query,0x00,sizeof(order_query));
\r
62 _filter = (media_tag_filter_s*)filter;
\r
65 media_tag_filter_create((media_tag_filter_h*)&_filter);
\r
69 snprintf(select_query,sizeof(select_query),"%s", SELECT_TAG_LIST);
\r
72 if((_filter->keyword != NULL) && strlen(_filter->keyword) > 0)
\r
74 if(strlen(_filter->keyword) < sizeof(search_query))
\r
76 snprintf(search_query,sizeof(search_query)," and tag_name like '%%%s%%'", _filter->keyword);
\r
80 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
81 if((media_tag_filter_s*)filter != _filter)
\r
82 media_tag_filter_destroy((media_tag_filter_h)_filter);
\r
83 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
88 search_query[0] = ' ';
\r
91 snprintf(limit_query,sizeof(limit_query),"%s %d,%d",QUERY_KEYWORD_LIMIT,_filter->offset,_filter->count);
\r
94 if(_filter->order == MEDIA_CONTENT_SORT_BY_NAME_ASC)
\r
96 snprintf(order_query,sizeof(order_query),"%s %s",QUERY_KEYWORD_ORDER_BY,DB_FIELD_TAG_NAME);
\r
98 else if(_filter->order == MEDIA_CONTENT_SORT_BY_NAME_DESC)
\r
100 snprintf(order_query,sizeof(order_query),"%s %s %s",QUERY_KEYWORD_ORDER_BY,DB_FIELD_TAG_NAME,QUERY_KEYWORD_DESC);
\r
102 else if(_filter->order == MEDIA_CONTENT_SORT_BY_DATE_ASC)
\r
104 snprintf(order_query,sizeof(order_query),"%s %s",QUERY_KEYWORD_ORDER_BY,DB_FIELD_ID);
\r
106 else if(_filter->order == MEDIA_CONTENT_SORT_BY_DATE_DESC)
\r
108 snprintf(order_query,sizeof(order_query),"%s %s %s",QUERY_KEYWORD_ORDER_BY,DB_FIELD_ID,QUERY_KEYWORD_DESC);
\r
112 if((media_tag_filter_s*)filter != _filter)
\r
113 media_tag_filter_destroy((media_tag_filter_h)_filter);
\r
115 if(select_query != NULL)
\r
117 ret = _content_query_prepare(&stmt,select_query,NULL,search_query,limit_query,order_query);
\r
118 if(ret != MEDIA_CONTENT_ERROR_NONE)
\r
123 while( sqlite3_step(stmt) == SQLITE_ROW)
\r
125 media_tag_s* _tag = (media_tag_s*)calloc(1,sizeof(media_tag_s));
\r
129 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
130 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
133 memset(_tag,0x00,sizeof(media_tag_s));
\r
134 _tag->tag_id = (int)sqlite3_column_int(stmt,0);
\r
135 _tag->name= strdup((const char *)sqlite3_column_text(stmt, 1));
\r
136 if(callback((media_tag_h)_tag,user_data) == false)
\r
138 media_tag_destroy((media_tag_h)_tag);
\r
141 media_tag_destroy((media_tag_h)_tag);
\r
146 sqlite3_finalize(stmt);
\r
154 int media_tag_insert_to_db(const char* tag_name,media_tag_h* tag)
\r
157 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
160 if(tag_name == NULL || strlen(tag_name) == 0)
\r
162 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
163 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
166 media_tag_s *_tag = (media_tag_s*)calloc(1,sizeof(media_tag_s));
\r
168 _tag->name = strdup(tag_name);
\r
170 if(_tag->name == NULL)
\r
172 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
173 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
176 ret = minfo_add_tag(_content_get_db_handle(),NULL,tag_name);
\r
178 if(ret == MB_SVC_ERROR_NONE)
\r
180 *tag = (media_tag_h)_tag;
\r
183 return _content_error_capi(MEDIA_CONTENT_TYPE,ret);
\r
187 int media_tag_delete_from_db(media_tag_h tag)
\r
189 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
193 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
195 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
199 media_tag_s* _tag = (media_tag_s*)tag;
\r
202 ret = minfo_delete_tag(_content_get_db_handle(), NULL, _tag->name);
\r
204 return _content_error_capi(MEDIA_CONTENT_TYPE,ret);
\r
208 int media_tag_add_media_to_db(media_tag_h tag,media_info_h media)
\r
210 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
213 media_tag_s* _tag = (media_tag_s*)tag;
\r
214 media_info_s* _item = (media_info_s*)media;
\r
216 if(_tag == NULL || _item == NULL )
\r
218 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
219 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
222 if(_item->media_type == MEDIA_CONTENT_TYPE_AUDIO)
\r
224 LOGE("[%s]_NOT_SUPPORTED_AUDIO(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_NOT_SUPPORTED_AUDIO);
\r
226 return MEDIA_CONTENT_ERROR_NOT_SUPPORTED_AUDIO;
\r
229 if(_tag->name == NULL || strlen(_tag->name) == 0)
\r
231 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
233 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
236 ret = minfo_add_tag(_content_get_db_handle(), _item->item_id,_tag->name);
\r
238 return _content_error_capi(MEDIA_CONTENT_TYPE,ret);
\r
242 int media_tag_remove_media_from_db(media_tag_h tag,media_info_h media)
\r
244 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
246 char *query_string = NULL;
\r
248 media_tag_s* _tag = (media_tag_s*)tag;
\r
249 media_info_s* _item = (media_info_s*)media;
\r
250 if(_tag == NULL || _item == NULL )
\r
252 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
253 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
255 if(_item->media_type == MEDIA_CONTENT_TYPE_AUDIO)
\r
257 LOGE("[%s]_NOT_SUPPORTED_AUDIO(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_NOT_SUPPORTED_AUDIO);
\r
258 return MEDIA_CONTENT_ERROR_NOT_SUPPORTED_AUDIO;
\r
262 if(_tag->name == NULL || strlen(_tag->name) == 0)
\r
264 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
265 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
268 query_string = sqlite3_mprintf("DELETE FROM visual_tag_map WHERE visual_uuid=%s and tag_name=%d",
\r
269 _item->item_id, _tag->name);
\r
272 _content_query_sql(query_string);
\r
274 sqlite3_free(query_string);
\r
276 return _content_error_capi(MEDIA_CONTENT_TYPE,ret);
\r
281 int media_tag_destroy(media_tag_h tag)
\r
284 media_tag_s* _tag = (media_tag_s*)tag;
\r
293 ret = MEDIA_CONTENT_ERROR_NONE;
\r
297 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
298 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
303 int media_tag_clone(media_tag_h* dst, media_tag_h src)
\r
306 media_tag_s* _src = (media_tag_s*)src;
\r
307 media_tag_s* _dst = NULL;
\r
312 _dst = (media_tag_s*)calloc(1,sizeof(media_tag_s));
\r
316 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
317 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
320 _dst->tag_id = _src->tag_id;
\r
322 if((_src->name != NULL) && (strlen(_src->name) > 0))
\r
324 _dst->name = strdup(_src->name);
\r
325 if(_dst->name == NULL)
\r
327 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
329 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
332 *dst = (media_tag_h)_dst;
\r
333 ret = MEDIA_CONTENT_ERROR_NONE;
\r
337 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
338 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
344 int media_tag_get_name(media_tag_h tag, char** name)
\r
347 media_tag_s* _tag = (media_tag_s*)tag;
\r
350 if((_tag->name != NULL) && (strlen(_tag->name) > 0))
\r
352 *name = strdup(_tag->name);
\r
355 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
356 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
363 ret = MEDIA_CONTENT_ERROR_NONE;
\r
368 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
369 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
375 int media_tag_update_name_to_db(media_tag_h tag, const char* name)
\r
377 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
379 media_tag_s* _tag = (media_tag_s*)tag;
\r
380 if(_tag == NULL || name == NULL || strlen(name) <= 0)
\r
382 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
383 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
386 ret = minfo_rename_tag(_content_get_db_handle(),_tag->name,name);
\r
388 if(ret == MB_SVC_ERROR_NONE)
\r
391 _tag->name = strdup(name);
\r
392 if(_tag->name == NULL)
\r
394 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
395 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
399 return _content_error_capi(MEDIA_CONTENT_TYPE,ret);
\r
402 int media_tag_foreach_media_from_db(media_tag_h tag,media_info_filter_h filter, media_info_cb callback,void* user_data)
\r
404 int ret = MEDIA_CONTENT_ERROR_NONE;
\r
405 char* media_id = NULL;
\r
406 Mitem *mitem = NULL;
\r
407 char select_query[DEFAULT_QUERY_SIZE];
\r
408 char search_query[MAX_KEYWORD_SIZE];
\r
409 char limit_query[MIN_QUERY_SIZE];
\r
410 char order_query[MIN_QUERY_SIZE];
\r
412 media_tag_filter_s* _filter = NULL;
\r
414 sqlite3_stmt *stmt = NULL;
\r
416 memset(select_query,0x00,sizeof(select_query));
\r
417 memset(search_query,0x00,sizeof(search_query));
\r
418 memset(limit_query,0x00,sizeof(limit_query));
\r
419 memset(order_query,0x00,sizeof(order_query));
\r
421 media_tag_s* _tag = (media_tag_s*)tag;
\r
423 if(_tag == NULL || callback == NULL)
\r
425 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
426 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
430 _filter = (media_tag_filter_s*)filter;
\r
433 media_tag_filter_create((media_tag_filter_h*)&_filter);
\r
437 snprintf(select_query,sizeof(select_query),SELECT_MEDIA_FROM_TAG,_tag->name);
\r
440 if((_filter->keyword != NULL) && strlen(_filter->keyword) > 0)
\r
442 if(strlen(_filter->keyword) < sizeof(search_query))
\r
444 snprintf(search_query,sizeof(search_query)," and display_name like '%%%s%%'", _filter->keyword);
\r
448 LOGE("[%s]INVALID_PARAMETER(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
\r
449 if((media_tag_filter_s*)filter != _filter)
\r
450 media_tag_filter_destroy((media_tag_filter_h)_filter);
\r
451 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
\r
456 search_query[0] = ' ';
\r
460 snprintf(limit_query,sizeof(limit_query),"%s %d,%d",QUERY_KEYWORD_LIMIT,_filter->offset,_filter->count);
\r
464 if(_filter->order == MEDIA_CONTENT_SORT_BY_NAME_ASC)
\r
466 snprintf(order_query,sizeof(order_query),"%s %s",QUERY_KEYWORD_ORDER_BY,DB_FILED_DISPLAY_NAME);
\r
468 else if(_filter->order == MEDIA_CONTENT_SORT_BY_NAME_DESC)
\r
470 snprintf(order_query,sizeof(order_query),"%s %s %s",QUERY_KEYWORD_ORDER_BY,DB_FILED_DISPLAY_NAME,QUERY_KEYWORD_DESC);
\r
472 else if(_filter->order == MEDIA_CONTENT_SORT_BY_DATE_ASC)
\r
474 snprintf(order_query,sizeof(order_query),"%s %s",QUERY_KEYWORD_ORDER_BY,DB_FILED_MODIFIED_DATE);
\r
476 else if(_filter->order == MEDIA_CONTENT_SORT_BY_DATE_DESC)
\r
478 snprintf(order_query,sizeof(order_query),"%s %s %s",QUERY_KEYWORD_ORDER_BY,DB_FILED_MODIFIED_DATE,QUERY_KEYWORD_DESC);
\r
482 if((media_tag_filter_s*)filter != _filter)
\r
483 media_tag_filter_destroy((media_tag_filter_h)_filter);
\r
485 ret = _content_query_prepare(&stmt,select_query,NULL,search_query,limit_query,order_query);
\r
486 if(ret != MEDIA_CONTENT_ERROR_NONE)
\r
490 while( sqlite3_step(stmt) == SQLITE_ROW)
\r
492 media_info_s* _item = (media_info_s*)calloc(1,sizeof(media_info_s));
\r
496 LOGE("[%s]OUT_OF_MEMORY(0x%08x)", __FUNCTION__, MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
\r
497 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
\r
499 memset(_item,0x00,sizeof(media_info_s));
\r
500 media_id = (char*)sqlite3_column_text(stmt, 1);
\r
501 ret = minfo_get_item_by_id(_content_get_db_handle(),media_id, &mitem);
\r
507 sqlite3_finalize(stmt);
\r
509 media_info_destroy((media_info_h)_item);
\r
510 return _content_error_capi(MEDIA_CONTENT_TYPE,ret);
\r
512 _item->item_id = strdup(media_id);
\r
513 _item->file_path = strdup(mitem->file_url);
\r
514 _item->display_name = strdup(mitem->display_name);
\r
515 _item->thumbnail = strdup(mitem->thumb_url);
\r
516 _item->date_modified = mitem->mtime;
\r
517 _item->media_type = mitem->type;
\r
518 if(callback((media_info_h)_item,user_data) == false)
\r
520 media_info_destroy((media_info_h)_item);
\r
523 media_info_destroy((media_info_h)_item);
\r
527 minfo_destroy_mtype_item(mitem);
\r
530 sqlite3_finalize(stmt);
\r