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_info_private.h>
20 #include <media_util_private.h>
22 static char * __media_db_get_group_name(media_group_e group);
23 static int __media_db_make_query(filter_h filter, attribute_h attr, char *select_query, int select_query_size, char **condition_query, char **option_query);
25 static char * __media_db_get_group_name(media_group_e group)
28 case MEDIA_CONTENT_GROUP_DISPLAY_NAME:
29 return (char *)DB_FIELD_MEDIA_DISPLAY_NAME;
30 case MEDIA_CONTENT_GROUP_TYPE:
31 return (char *)DB_FIELD_MEDIA_TYPE;
32 case MEDIA_CONTENT_GROUP_MIME_TYPE:
33 return (char *) DB_FIELD_MEDIA_MIME_TYPE;
34 case MEDIA_CONTENT_GROUP_SIZE:
35 return (char *) DB_FIELD_MEDIA_SIZE;
36 case MEDIA_CONTENT_GROUP_ADDED_TIME:
37 return (char *) DB_FIELD_MEDIA_ADDED_TIME;
38 case MEDIA_CONTENT_GROUP_MODIFIED_TIME:
39 return (char *) DB_FIELD_MEDIA_MODIFIED_TIME;
40 case MEDIA_CONTENT_GROUP_TITLE:
41 return (char *) DB_FIELD_MEDIA_TITLE;
42 case MEDIA_CONTENT_GROUP_ARTIST:
43 return (char *) DB_FIELD_MEDIA_ARTIST;
44 case MEDIA_CONTENT_GROUP_ALBUM_ARTIST:
45 return (char *) DB_FIELD_MEDIA_ALBUM_ARTIST;
46 case MEDIA_CONTENT_GROUP_GENRE:
47 return (char *) DB_FIELD_MEDIA_GENRE;
48 case MEDIA_CONTENT_GROUP_COMPOSER:
49 return (char *) DB_FIELD_MEDIA_COMPOSER;
50 case MEDIA_CONTENT_GROUP_YEAR:
51 return (char *) DB_FIELD_MEDIA_YEAR;
52 case MEDIA_CONTENT_GROUP_RECORDED_DATE:
53 return (char *) DB_FIELD_MEDIA_RECORDED_DATE;
54 case MEDIA_CONTENT_GROUP_COPYRIGHT:
55 return (char *) DB_FIELD_MEDIA_COPYRIGHT;
56 case MEDIA_CONTENT_GROUP_TRACK_NUM:
57 return (char *) DB_FIELD_MEDIA_TRACK_NUM;
58 case MEDIA_CONTENT_GROUP_DESCRIPTION:
59 return (char *) DB_FIELD_MEDIA_DESCRIPTION;
60 case MEDIA_CONTENT_GROUP_LONGITUDE:
61 return (char *) DB_FIELD_MEDIA_LONGITUDE;
62 case MEDIA_CONTENT_GROUP_LATITUDE:
63 return (char *) DB_FIELD_MEDIA_LATITUDE;
64 case MEDIA_CONTENT_GROUP_ALTITUDE:
65 return (char *) DB_FIELD_MEDIA_ALTITUDE;
66 case MEDIA_CONTENT_GROUP_BURST_IMAGE:
67 return (char *) DB_FIELD_MEDIA_BURST_ID;
68 case MEDIA_CONTENT_GROUP_RATING:
69 return (char *) DB_FIELD_MEDIA_RATING;
70 case MEDIA_CONTENT_GROUP_AUTHOR:
71 return (char *) DB_FIELD_MEDIA_AUTHOR;
72 case MEDIA_CONTENT_GROUP_PROVIDER:
73 return (char *) DB_FIELD_MEDIA_PROVIDER;
74 case MEDIA_CONTENT_GROUP_CONTENT_NAME:
75 return (char *) DB_FIELD_MEDIA_CONTENT_NAME;
76 case MEDIA_CONTENT_GROUP_CATEGORY:
77 return (char *) DB_FIELD_MEDIA_CATEGORY;
78 case MEDIA_CONTENT_GROUP_LOCATION_TAG:
79 return (char *) DB_FIELD_MEDIA_LOCATION_TAG;
80 case MEDIA_CONTENT_GROUP_AGE_RATING:
81 return (char *) DB_FIELD_MEDIA_AGE_RATING;
82 case MEDIA_CONTENT_GROUP_KEYWORD:
83 return (char *) DB_FIELD_MEDIA_KEYWORD;
84 case MEDIA_CONTENT_GROUP_WEATHER:
85 return (char *) DB_FIELD_MEDIA_WEATHER;
86 #ifdef _USE_TV_PROFILE
87 case MEDIA_CONTENT_GROUP_MODIFIED_MONTH:
88 return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
89 case MEDIA_CONTENT_GROUP_MODIFIED_DATE:
90 return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
92 #ifdef _USE_SENIOR_MODE
93 case MEDIA_CONTENT_GROUP_CONTACT:
94 return (char *) DB_FIELD_MEDIA_CONTACT;
96 #ifdef _USE_TV_PROFILE
97 case MEDIA_CONTENT_GROUP_ALBUM:
98 return (char *) DB_FIELD_MEDIA_ALBUM;
99 case MEDIA_PVR_GROUP_DURATION:
100 return (char *) DB_FIELD_PVR_DURATION;
101 case MEDIA_PVR_GROUP_TIME_ZONE:
102 return (char *) DB_FIELD_PVR_TIME_ZONE;
103 case MEDIA_PVR_GROUP_PTC:
104 return (char *) DB_FIELD_PVR_PTC;
105 case MEDIA_PVR_GROUP_MAJOR:
106 return (char *) DB_FIELD_PVR_MAJOR;
107 case MEDIA_PVR_GROUP_MINOR:
108 return (char *) DB_FIELD_PVR_MINOR;
109 case MEDIA_PVR_GROUP_CHANNEL_TYPE:
110 return (char *) DB_FIELD_PVR_CHANNEL_TYPE;
111 case MEDIA_PVR_GROUP_CHANNEL_NAME:
112 return (char *) DB_FIELD_PVR_CHANNEL_NAME;
113 case MEDIA_PVR_GROUP_CHANNEL_NUM:
114 return (char *) DB_FIELD_PVR_CHANNEL_NUM;
115 case MEDIA_PVR_GROUP_PROGRAM_TITLE:
116 return (char *) DB_FIELD_PVR_PROGRAM_TITLE;
117 case MEDIA_PVR_GROUP_PROGRAM_NUM:
118 return (char *) DB_FIELD_PVR_PROGRAM_NUM;
119 case MEDIA_PVR_GROUP_PROGRAM_CRID:
120 return (char *) DB_FIELD_PVR_PROGRAM_CRID;
121 case MEDIA_PVR_GROUP_GUIDANCE:
122 return (char *) DB_FIELD_PVR_GUIDANCE;
123 case MEDIA_PVR_GROUP_SYNOPSIS:
124 return (char *) DB_FIELD_PVR_SYNOPSIS;
125 case MEDIA_PVR_GROUP_GENRE:
126 return (char *) DB_FIELD_PVR_GENRE;
127 case MEDIA_PVR_GROUP_LANGUAGE:
128 return (char *) DB_FIELD_PVR_LANGUAGE;
129 case MEDIA_PVR_GROUP_EMBARGO_TIME:
130 return (char *) DB_FIELD_PVR_EMBARGO_TIME;
131 case MEDIA_PVR_GROUP_EXPIRY_TIME:
132 return (char *) DB_FIELD_PVR_EXPIRY_TIME;
133 case MEDIA_PVR_GROUP_START_TIME:
134 return (char *) DB_FIELD_PVR_START_TIME;
135 case MEDIA_PVR_GROUP_PROGRAM_START_TIME:
136 return (char *) DB_FIELD_PVR_PROGRAM_START_TIME;
137 case MEDIA_PVR_GROUP_PROGRAM_END_TIME:
138 return (char *) DB_FIELD_PVR_PROGRAM_END_TIME;
139 case MEDIA_PVR_GROUP_PROGRAM_DATE:
140 return (char *) DB_FIELD_PVR_PROGRAM_DATE;
141 case MEDIA_PVR_GROUP_PARENTAL_RATING:
142 return (char *) DB_FIELD_PVR_PARENTAL_RATING;
143 case MEDIA_PVR_GROUP_TIMER_RECORD:
144 return (char *) DB_FIELD_PVR_TIMER_RECORD;
145 case MEDIA_PVR_GROUP_SERIES_RECORD:
146 return (char *) DB_FIELD_PVR_SERIES_RECORD;
147 case MEDIA_PVR_GROUP_HD:
148 return (char *) DB_FIELD_PVR_HD;
149 case MEDIA_PVR_GROUP_SUBTITLE:
150 return (char *) DB_FIELD_PVR_SUBTITLE;
151 case MEDIA_PVR_GROUP_TTX:
152 return (char *) DB_FIELD_PVR_TTX;
153 case MEDIA_PVR_GROUP_AD:
154 return (char *) DB_FIELD_PVR_AD;
155 case MEDIA_PVR_GROUP_HARDOF_HEARINGRADIO:
156 return (char *) DB_FIELD_PVR_HARDOF_HEARINGRADIO;
157 case MEDIA_PVR_GROUP_DATA_SERVICE:
158 return (char *) DB_FIELD_PVR_DATA_SERVICE;
159 case MEDIA_PVR_GROUP_CONTENT_LOCK:
160 return (char *) DB_FIELD_PVR_CONTENT_LOCK;
161 case MEDIA_PVR_GROUP_CONTENT_WATCH:
162 return (char *) DB_FIELD_PVR_CONTENT_WATCH;
163 case MEDIA_PVR_GROUP_HAS_AUDIO_ONLY:
164 return (char *) DB_FIELD_PVR_HAS_AUDIO_ONLY;
165 case MEDIA_PVR_GROUP_IS_LOCAL_RECORDED:
166 return (char *) DB_FIELD_PVR_IS_LOCAL_RECORD;
167 case MEDIA_PVR_GROUP_RESOLUTION:
168 return (char *) DB_FIELD_PVR_RESOLUTION;
169 case MEDIA_PVR_GROUP_ASPECTRATIO:
170 return (char *) DB_FIELD_PVR_ASPECTRATIO;
171 case MEDIA_PVR_GROUP_MODIFIED_MONTH:
172 return (char *) DB_FIELD_PVR_MODIFIED_DATE;
173 case MEDIA_PVR_GROUP_MODIFIED_DATE:
174 return (char *) DB_FIELD_PVR_MODIFIED_DATE;
175 case MEDIA_PVR_GROUP_SPORTS_TYPE:
176 return (char *) DB_FIELD_PVR_SPORTS_TYPE;
177 case MEDIA_PVR_GROUP_GUIDANCE_LENGTH:
178 return (char *) DB_FIELD_PVR_GUIDANCE_LENGTH;
179 case MEDIA_PVR_GROUP_TVMODE:
180 return (char *) DB_FIELD_PVR_TVMODE;
181 case MEDIA_PVR_GROUP_PLAY_COUNT:
182 return (char *) DB_FIELD_PVR_PLAY_COUNT;
183 case MEDIA_PVR_GROUP_PRIVATE_DATA:
184 return (char *) DB_FIELD_PVR_PRIVATE_DATA;
185 case MEDIA_UHD_GROUP_CONTENT_TITLE:
186 return (char *) DB_FIELD_UHD_CONTENT_TITLE;
187 case MEDIA_UHD_GROUP_RELEASE_DATE:
188 return (char *) DB_FIELD_UHD_RELEASE_DATE;
189 case MEDIA_UHD_GROUP_SUB_TYPE:
190 return (char *) DB_FIELD_UHD_SUB_TYPE;
191 case MEDIA_UHD_GROUP_FILE_NAME:
192 return (char *) DB_FIELD_UHD_FILE_NAME;
193 case MEDIA_UHD_GROUP_PLAYED_COUNT:
194 return (char *) DB_FIELD_UHD_PLAYED_COUNT;
203 static int __media_db_make_query(filter_h filter, attribute_h attr, char *select_query, int select_query_size, char **condition_query, char **option_query)
205 int ret = MEDIA_CONTENT_ERROR_NONE;
206 filter_s *_filter = NULL;
207 #ifdef _USE_TV_PROFILE
208 g_mutex_lock(_content_get_db_mutex());
210 if (filter != NULL) {
211 _filter = (filter_s*)filter;
213 if (STRING_VALID(_filter->condition)) {
214 /*bracket should be added to condition. If application use "OR" condition, F/W restriction condition like "validity=1" is disregared
215 ex) select path from media where validity=1 and media_type=3 or media_type=1;*/
216 char bracket_added_condition[MAX_QUERY_SIZE] = {0, };
217 memset(bracket_added_condition, 0x00, sizeof(bracket_added_condition));
219 SAFE_STRLCAT(bracket_added_condition, QUERY_KEYWORD_OPEN_BRACKET, MAX_QUERY_SIZE);
220 SAFE_STRLCAT(bracket_added_condition, _filter->condition, MAX_QUERY_SIZE);
221 SAFE_STRLCAT(bracket_added_condition, QUERY_KEYWORD_BRACKET, MAX_QUERY_SIZE);
223 ret = _media_filter_attribute_generate(attr, bracket_added_condition, _filter->condition_collate_type, condition_query);
224 #ifdef _USE_TV_PROFILE
225 if (ret != MEDIA_CONTENT_ERROR_NONE) {
226 g_mutex_unlock(_content_get_db_mutex());
230 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
234 ret = _media_filter_attribute_option_generate(attr, filter, option_query);
235 if (ret != MEDIA_CONTENT_ERROR_NONE) {
236 SAFE_FREE(*condition_query);
237 #ifdef _USE_TV_PROFILE
238 g_mutex_unlock(_content_get_db_mutex());
243 if (STRING_VALID(*condition_query)) {
244 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, select_query_size);
245 SAFE_STRLCAT(select_query, QUERY_KEYWORD_AND, select_query_size);
248 #ifdef _USE_TV_PROFILE
249 g_mutex_unlock(_content_get_db_mutex());
255 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
257 int ret = MEDIA_CONTENT_ERROR_NONE;
258 sqlite3_stmt *stmt = NULL;
259 char select_query[MAX_QUERY_SIZE] = {0, };
260 char *condition_query = NULL;
261 char *option_query = NULL;
262 attribute_h attr = NULL;
263 filter_s *_filter = (filter_s*)filter;
265 attr = _content_get_attirbute_handle();
266 memset(select_query, 0x00, sizeof(select_query));
268 switch (group_type) {
269 case MEDIA_GROUP_NONE:
270 case MEDIA_GROUP_TAG_BY_MEDIA_ID:
271 case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
273 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
274 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
277 case MEDIA_GROUP_ALBUM:
278 attr = _content_get_alias_attirbute_handle();
280 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
281 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id);
283 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_TABLE_MEDIA_VIEW);
286 case MEDIA_GROUP_FOLDER:
287 attr = _content_get_alias_attirbute_handle();
288 if (!SAFE_STRLCPY(select_query, SELECT_FOLDER_COUNT, sizeof(select_query))) {
289 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
290 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
293 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
294 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
296 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_TABLE_MEDIA_VIEW);
299 case MEDIA_GROUP_PLAYLIST:
300 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) {
301 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
302 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
305 case MEDIA_GROUP_TAG:
306 if (!SAFE_STRLCPY(select_query, SELECT_TAG_COUNT, sizeof(select_query))) {
307 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
308 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
311 case MEDIA_GROUP_BOOKMARK:
312 attr = _content_get_alias_attirbute_handle();
314 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
315 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id);
317 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_TABLE_MEDIA_VIEW);
320 case MEDIA_GROUP_STORAGE:
321 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) {
322 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
323 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
326 #ifdef _USE_TV_PROFILE
327 case MEDIA_GROUP_PVR:
328 case MEDIA_GROUP_UHD:
332 media_content_error("Invalid group type [%d]", group_type);
333 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
338 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
339 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
341 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
342 SAFE_FREE(condition_query);
343 SAFE_FREE(option_query);
344 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
346 while (sqlite3_step(stmt) == SQLITE_ROW)
347 *group_count = (int)sqlite3_column_int(stmt, 0);
349 SQLITE3_FINALIZE(stmt);
354 int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
356 int ret = MEDIA_CONTENT_ERROR_NONE;
357 sqlite3_stmt *stmt = NULL;
358 char select_query[MAX_QUERY_SIZE] = {0, };
359 char *condition_query = NULL;
360 char *option_query = NULL;
361 attribute_h attr = NULL;
362 filter_s *_filter = (filter_s*)filter;
364 attr = _content_get_attirbute_handle();
365 memset(select_query, 0x00, sizeof(select_query));
366 #ifdef _USE_TV_PROFILE
367 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
368 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
369 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
371 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
372 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content*/
373 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
374 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
376 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT, __media_db_get_group_name(group));
377 } else { /*uhd content*/
378 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
379 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
381 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group));
384 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
385 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
387 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
389 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
390 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
392 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
393 if (STRING_VALID(condition_query))
394 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
395 if (STRING_VALID(option_query))
396 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
397 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
399 SAFE_FREE(condition_query);
400 SAFE_FREE(option_query);
402 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
403 SAFE_FREE(condition_query);
404 SAFE_FREE(option_query);
405 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
407 while (sqlite3_step(stmt) == SQLITE_ROW)
408 *group_count = (int)sqlite3_column_int(stmt, 0);
410 SQLITE3_FINALIZE(stmt);
415 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
417 int ret = MEDIA_CONTENT_ERROR_NONE;
418 char select_query[MAX_QUERY_SIZE] = {0, };
419 char *condition_query = NULL;
420 char *option_query = NULL;
422 sqlite3_stmt *stmt = NULL;
423 attribute_h attr = NULL;
424 filter_s *_filter = (filter_s*)filter;
426 attr = _content_get_attirbute_handle();
427 memset(select_query, 0x00, sizeof(select_query));
428 #ifdef _USE_TV_PROFILE
429 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
430 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
431 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
433 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
434 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content */
435 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
436 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
438 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST, __media_db_get_group_name(group));
439 } else { /* uhd content */
440 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
441 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
443 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group));
446 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
447 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
449 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
451 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
452 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
454 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
455 SAFE_FREE(condition_query);
456 SAFE_FREE(option_query);
457 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
459 while (sqlite3_step(stmt) == SQLITE_ROW) {
460 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
462 if (callback(name, user_data) == false) {
470 SQLITE3_FINALIZE(stmt);
474 #ifdef _USE_TV_PROFILE
475 int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, media_group_and_count_cb callback, void *user_data)
477 int ret = MEDIA_CONTENT_ERROR_NONE;
478 char select_query[DEFAULT_QUERY_SIZE];
479 char group_query[DEFAULT_QUERY_SIZE];
480 char *condition_query = NULL;
481 char *option_query = NULL;
483 sqlite3_stmt *stmt = NULL;
484 attribute_h attr = NULL;
485 filter_s *_filter = (filter_s*)filter;
487 attr = _content_get_attirbute_handle();
488 memset(select_query, 0x00, sizeof(select_query));
489 memset(group_query, 0x00, sizeof(group_query));
491 char* group_name = __media_db_get_group_name(group);
492 if (!STRING_VALID(group_name)) {
493 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
494 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
497 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
498 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
499 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, _filter->storage_id);
501 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, DB_TABLE_MEDIA_VIEW);
502 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
503 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
504 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
506 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT, group_name);
507 } else {/*uhd content*/
508 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
509 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
511 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name);
514 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
515 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
517 if (STRING_VALID(option_query))
518 snprintf(group_query, sizeof(group_query), "GROUP BY %s %s", group_name, option_query);
520 snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name);
522 ret = _content_query_prepare(&stmt, select_query, condition_query, group_query);
523 SAFE_FREE(condition_query);
524 SAFE_FREE(option_query);
525 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
527 while (sqlite3_step(stmt) == SQLITE_ROW) {
528 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
529 name = strdup((const char *)sqlite3_column_text(stmt, 0));
531 if (callback(name, sqlite3_column_int(stmt, 1), user_data) == false) {
539 SQLITE3_FINALIZE(stmt);
544 int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data)
546 int ret = MEDIA_CONTENT_ERROR_NONE;
547 char select_query[MAX_QUERY_SIZE] = {0, };
548 char *condition_query = NULL;
549 char *option_query = NULL;
550 sqlite3_stmt *stmt = NULL;
551 attribute_h attr = NULL;
552 filter_s *_filter = (filter_s*)filter;
554 attr = _content_get_alias_attirbute_handle();
555 memset(select_query, 0x00, sizeof(select_query));
557 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
558 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, _filter->storage_id);
560 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_TABLE_MEDIA_VIEW);
562 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
563 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
565 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
566 SAFE_FREE(condition_query);
567 SAFE_FREE(option_query);
568 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
570 while (sqlite3_step(stmt) == SQLITE_ROW) {
571 media_album_s *album = (media_album_s*)calloc(1, sizeof(media_album_s));
574 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
575 SQLITE3_FINALIZE(stmt);
576 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
579 album->album_id = (int)sqlite3_column_int(stmt, 0);
580 album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
581 album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2));
582 album->album_art_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
584 if (callback((media_album_h)album, user_data) == false) {
585 media_album_destroy((media_album_h)album);
589 media_album_destroy((media_album_h)album);
592 SQLITE3_FINALIZE(stmt);
597 int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_data)
599 int ret = MEDIA_CONTENT_ERROR_NONE;
600 char select_query[MAX_QUERY_SIZE] = {0, };
601 char *condition_query = NULL;
602 char *option_query = NULL;
603 sqlite3_stmt *stmt = NULL;
604 attribute_h attr = NULL;
605 filter_s *_filter = (filter_s*)filter;
606 #ifndef _USE_TV_PROFILE
607 char *tmp_path = NULL;
608 char repl_path[MAX_QUERY_SIZE] = {0, };
611 attr = _content_get_alias_attirbute_handle();
612 memset(select_query, 0x00, sizeof(select_query));
614 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
615 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
617 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_TABLE_MEDIA_VIEW);
619 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
620 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
622 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
624 SAFE_FREE(condition_query);
625 SAFE_FREE(option_query);
626 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
628 while (sqlite3_step(stmt) == SQLITE_ROW) {
629 media_folder_s *_folder = (media_folder_s*)calloc(1, sizeof(media_folder_s));
631 if (_folder == NULL) {
632 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
633 SQLITE3_FINALIZE(stmt);
634 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
637 _folder->folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
638 #ifdef _USE_TV_PROFILE
639 _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
641 tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
642 _media_content_rollback_path(tmp_path, repl_path);
643 _folder->path = g_strdup(repl_path);
646 _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
647 _folder->storage_type = (int)sqlite3_column_int(stmt, 3);
648 _folder->modified_time = (int)sqlite3_column_int(stmt, 4);
649 _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 5));
650 _folder->folder_order = (int)sqlite3_column_int(stmt, 6);
651 _folder->parent_folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 7));
653 if (callback((media_folder_h)_folder, user_data) == false) {
654 media_folder_destroy((media_folder_h) _folder);
658 media_folder_destroy((media_folder_h) _folder);
661 SQLITE3_FINALIZE(stmt);
666 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
668 int ret = MEDIA_CONTENT_ERROR_NONE;
669 char select_query[MAX_QUERY_SIZE] = {0, };
670 char *condition_query = NULL;
671 char *option_query = NULL;
672 sqlite3_stmt *stmt = NULL;
673 attribute_h attr = NULL;
674 #ifndef _USE_TV_PROFILE
675 char *tmp_path = NULL;
676 char repl_path[MAX_QUERY_SIZE] = {0, };
679 attr = _content_get_attirbute_handle();
680 memset(select_query, 0x00, sizeof(select_query));
682 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_LIST, sizeof(select_query))) {
683 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
684 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
687 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
688 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
690 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
691 SAFE_FREE(condition_query);
692 SAFE_FREE(option_query);
693 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
695 while (sqlite3_step(stmt) == SQLITE_ROW) {
696 media_playlist_s *_playlist = (media_playlist_s*)calloc(1, sizeof(media_playlist_s));
698 if (_playlist == NULL) {
699 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
700 SQLITE3_FINALIZE(stmt);
701 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
704 _playlist->playlist_id = (int)sqlite3_column_int(stmt, 0);
705 _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
706 #ifdef _USE_TV_PROFILE
707 _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
709 memset(repl_path, 0x00, sizeof(repl_path));
710 tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
711 if (STRING_VALID(tmp_path)) {
712 _media_content_rollback_path(tmp_path, repl_path);
713 _playlist->thumbnail_path = g_strdup(repl_path);
716 _playlist->thumbnail_path = NULL;
720 if (callback((media_playlist_h)_playlist, user_data) == false) {
721 media_playlist_destroy((media_playlist_h)_playlist);
724 media_playlist_destroy((media_playlist_h)_playlist);
727 SQLITE3_FINALIZE(stmt);
732 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
734 int ret = MEDIA_CONTENT_ERROR_NONE;
735 char select_query[MAX_QUERY_SIZE] = {0, };
736 char *condition_query = NULL;
737 char *option_query = NULL;
738 sqlite3_stmt *stmt = NULL;
739 attribute_h attr = NULL;
741 attr = _content_get_attirbute_handle();
742 memset(select_query, 0x00, sizeof(select_query));
744 /*snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ID_FROM_PLAYLIST_VIEW, playlist_id);*/
745 snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
747 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
748 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
750 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
751 SAFE_FREE(condition_query);
752 SAFE_FREE(option_query);
753 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
755 while (sqlite3_step(stmt) == SQLITE_ROW) {
756 int playlist_member_id = 0;
757 playlist_member_id = (int)sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX); /*MEDIA_INFO_ITEM_MAX is pm_id*/
759 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
761 if (_media == NULL) {
762 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
763 SQLITE3_FINALIZE(stmt);
764 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
767 _media_info_item_get_detail(stmt, (media_info_h)_media);
769 if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) {
770 media_info_destroy((media_info_h)_media);
773 media_info_destroy((media_info_h)_media);
777 SQLITE3_FINALIZE(stmt);
782 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
784 int ret = MEDIA_CONTENT_ERROR_NONE;
785 char select_query[MAX_QUERY_SIZE] = {0, };
786 char *condition_query = NULL;
787 char *option_query = NULL;
788 sqlite3_stmt *stmt = NULL;
789 attribute_h attr = NULL;
791 attr = _content_get_attirbute_handle();
792 memset(select_query, 0x00, sizeof(select_query));
794 if (!STRING_VALID(media_id)) {
795 if (!SAFE_STRLCPY(select_query, SELECT_TAG_LIST, sizeof(select_query))) {
796 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
797 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
800 snprintf(select_query, sizeof(select_query), SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
802 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
803 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
805 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
807 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
808 SAFE_FREE(condition_query);
809 SAFE_FREE(option_query);
810 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
812 while (sqlite3_step(stmt) == SQLITE_ROW) {
813 media_tag_s *_tag = (media_tag_s*)calloc(1, sizeof(media_tag_s));
816 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
817 SQLITE3_FINALIZE(stmt);
818 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
821 _tag->tag_id = (int)sqlite3_column_int(stmt, 0);
822 _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
824 if (callback((media_tag_h)_tag, user_data) == false) {
825 media_tag_destroy((media_tag_h)_tag);
828 media_tag_destroy((media_tag_h)_tag);
831 SQLITE3_FINALIZE(stmt);
836 int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
838 int ret = MEDIA_CONTENT_ERROR_NONE;
839 char select_query[MAX_QUERY_SIZE] = {0, };
840 char *condition_query = NULL;
841 char *option_query = NULL;
842 sqlite3_stmt *stmt = NULL;
843 attribute_h attr = NULL;
844 filter_s *_filter = (filter_s*)filter;
846 attr = _content_get_attirbute_handle();
848 memset(select_query, 0x00, sizeof(select_query));
850 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
851 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
853 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, media_id);
855 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
856 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
858 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
859 SAFE_FREE(condition_query);
860 SAFE_FREE(option_query);
861 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
863 while (sqlite3_step(stmt) == SQLITE_ROW) {
864 media_bookmark_s *bookmark = (media_bookmark_s*)calloc(1, sizeof(media_bookmark_s));
866 if (bookmark == NULL) {
867 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
868 SQLITE3_FINALIZE(stmt);
869 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
872 bookmark->bookmark_id = (int)sqlite3_column_int(stmt, 0);
873 bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
874 bookmark->marked_time = (int)sqlite3_column_int(stmt, 2);
875 bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
877 if (callback((media_bookmark_h)bookmark, user_data) == false) {
878 media_bookmark_destroy((media_bookmark_h)bookmark);
882 media_bookmark_destroy((media_bookmark_h)bookmark);
885 SQLITE3_FINALIZE(stmt);
891 int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
893 int ret = MEDIA_CONTENT_ERROR_NONE;
894 char select_query[MAX_QUERY_SIZE] = {0, };
895 char *condition_query = NULL;
896 char *option_query = NULL;
897 sqlite3_stmt *stmt = NULL;
898 attribute_h attr = NULL;
899 filter_s *_filter = (filter_s*)filter;
901 attr = _content_get_attirbute_handle();
903 memset(select_query, 0x00, sizeof(select_query));
905 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
906 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
908 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, media_id);
910 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
911 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
913 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
914 SAFE_FREE(condition_query);
915 SAFE_FREE(option_query);
916 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
918 while (sqlite3_step(stmt) == SQLITE_ROW) {
919 media_face_s *face = (media_face_s*)calloc(1, sizeof(media_face_s));
922 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
923 SQLITE3_FINALIZE(stmt);
924 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
927 face->face_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
928 face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
929 face->face_rect_x = (int)sqlite3_column_int(stmt, 2);
930 face->face_rect_y = (int)sqlite3_column_int(stmt, 3);
931 face->face_rect_w = (int)sqlite3_column_int(stmt, 4);
932 face->face_rect_h = (int)sqlite3_column_int(stmt, 5);
933 face->orientation = (int)sqlite3_column_int(stmt, 6);
934 face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7));
936 if (callback((media_face_h)face, user_data) == false) {
937 media_face_destroy((media_face_h)face);
941 media_face_destroy((media_face_h)face);
944 SQLITE3_FINALIZE(stmt);
950 int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_list_e group_type, int *item_count)
952 int ret = MEDIA_CONTENT_ERROR_NONE;
953 sqlite3_stmt *stmt = NULL;
954 char select_query[MAX_QUERY_SIZE] = {0, };
955 char *condition_query = NULL;
956 char *option_query = NULL;
957 attribute_h attr = NULL;
958 filter_s *_filter = (filter_s*)filter;
960 attr = _content_get_attirbute_handle();
961 memset(select_query, 0x00, sizeof(select_query));
963 if (group_type == MEDIA_GROUP_ALBUM) {
964 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
965 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id);
967 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, DB_TABLE_MEDIA_VIEW, group_id);
968 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
969 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id);
970 } else if (group_type == MEDIA_GROUP_TAG) {
971 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_TAG, group_id);
973 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
974 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
977 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
978 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
980 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
981 SAFE_FREE(condition_query);
982 SAFE_FREE(option_query);
983 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
985 while (sqlite3_step(stmt) == SQLITE_ROW)
986 *item_count = (int)sqlite3_column_int(stmt, 0);
988 SQLITE3_FINALIZE(stmt);
993 int _media_db_get_group_item_count(const char *group_name, filter_h filter, group_list_e group_type, int *item_count)
995 int ret = MEDIA_CONTENT_ERROR_NONE;
996 sqlite3_stmt *stmt = NULL;
997 char select_query[MAX_QUERY_SIZE] = {0, };
998 char *tmp_query = NULL;
999 char *condition_query = NULL;
1000 char *option_query = NULL;
1001 bool is_simple = FALSE;
1002 attribute_h attr = NULL;
1003 filter_s *_filter = (filter_s*)filter;
1005 attr = _content_get_attirbute_handle();
1006 memset(select_query, 0x00, sizeof(select_query));
1008 if (group_type == MEDIA_GROUP_NONE) {
1009 /* There are 2 ways to get count for media table for performance
1010 If user wants to set offset and count, use SQL SELECT_MEDIA_COUNT_FROM_MEDIA.
1011 If user wants to get count without setting count, SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE */
1012 if (_filter && ((_filter->offset < 0) && (_filter->count < 0))) {
1013 if (STRING_VALID(_filter->storage_id))
1014 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
1016 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_TABLE_MEDIA_VIEW);
1019 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_TABLE_MEDIA_VIEW);
1021 } else if (group_type == MEDIA_GROUP_FOLDER) {
1022 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1023 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
1025 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1027 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1028 } else if (group_type == MEDIA_GROUP_TAG_BY_MEDIA_ID) {
1029 snprintf(select_query, sizeof(select_query), SELECT_TAG_COUNT_BY_MEDIA_ID, group_name);
1030 } else if (group_type == MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID) {
1031 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1032 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1034 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, group_name);
1036 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1037 } else if (group_type == MEDIA_GROUP_STORAGE) {
1038 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_STORAGE, group_name, group_name);
1040 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1041 } else if (group_type == MEDIA_GROUP_FACE_BY_MEDIA_ID) {
1042 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1043 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1045 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, group_name);
1047 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1048 #ifdef _USE_TV_PROFILE
1049 } else if (group_type == MEDIA_GROUP_PVR) {
1050 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1051 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id);
1053 SAFE_STRLCAT(select_query, SELECT_PVR_COUNT, sizeof(select_query));
1054 } else if (group_type == MEDIA_GROUP_UHD) {
1055 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1056 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id);
1058 SAFE_STRLCAT(select_query, SELECT_UHD_COUNT, sizeof(select_query));
1061 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1062 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1065 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1066 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1067 if (tmp_query != NULL)
1068 SQLITE3_SAFE_FREE(tmp_query);
1072 if (group_type == MEDIA_GROUP_NONE) {
1073 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1074 if (STRING_VALID(condition_query))
1075 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1076 if (STRING_VALID(option_query))
1077 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1080 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1082 SAFE_FREE(condition_query);
1083 SAFE_FREE(option_query);
1086 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1087 if (tmp_query != NULL)
1088 SQLITE3_SAFE_FREE(tmp_query);
1089 SAFE_FREE(condition_query);
1090 SAFE_FREE(option_query);
1091 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1093 while (sqlite3_step(stmt) == SQLITE_ROW)
1094 *item_count = (int)sqlite3_column_int(stmt, 0);
1096 SQLITE3_FINALIZE(stmt);
1101 int _media_db_get_group_item_by_id(int group_id, filter_h filter, media_info_cb callback, void *user_data, group_list_e group_type)
1103 int ret = MEDIA_CONTENT_ERROR_NONE;
1104 char select_query[MAX_QUERY_SIZE] = {0, };
1105 char *condition_query = NULL;
1106 char *option_query = NULL;
1107 sqlite3_stmt *stmt = NULL;
1108 attribute_h attr = NULL;
1109 filter_s *_filter = (filter_s*)filter;
1111 attr = _content_get_attirbute_handle();
1112 memset(select_query, 0x00, sizeof(select_query));
1114 if (group_type == MEDIA_GROUP_ALBUM) {
1115 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1116 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id);
1118 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, DB_TABLE_MEDIA_VIEW, group_id);
1119 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
1120 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1121 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id);
1123 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, DB_TABLE_MEDIA_VIEW, group_id);
1124 } else if (group_type == MEDIA_GROUP_TAG) {
1125 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1126 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id);
1128 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_TABLE_MEDIA_VIEW, group_id);
1130 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1131 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1134 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1135 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1137 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1138 SAFE_FREE(condition_query);
1139 SAFE_FREE(option_query);
1140 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1142 while (sqlite3_step(stmt) == SQLITE_ROW) {
1143 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1145 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1146 SQLITE3_FINALIZE(stmt);
1147 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1150 _media_info_item_get_detail(stmt, (media_info_h)item);
1152 if (callback((media_info_h)item, user_data) == false) {
1153 media_info_destroy((media_info_h)item);
1157 media_info_destroy((media_info_h)item);
1160 SQLITE3_FINALIZE(stmt);
1165 int _media_db_get_group_item(const char *group_name, filter_h filter, media_info_cb callback, void *user_data, group_list_e group_type)
1167 int ret = MEDIA_CONTENT_ERROR_NONE;
1168 char select_query[MAX_QUERY_SIZE] = {0, };
1169 char *condition_query = NULL;
1170 char *option_query = NULL;
1171 sqlite3_stmt *stmt = NULL;
1172 attribute_h attr = NULL;
1173 filter_s *_filter = (filter_s*)filter;
1175 attr = _content_get_attirbute_handle();
1176 memset(select_query, 0x00, sizeof(select_query));
1178 if (group_type == MEDIA_GROUP_NONE) {
1179 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1180 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, _filter->storage_id);
1182 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, DB_TABLE_MEDIA_VIEW);
1183 } else if (group_type == MEDIA_GROUP_FOLDER) {
1184 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1185 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name);
1187 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1188 } else if (group_type == MEDIA_GROUP_STORAGE) {
1189 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name, group_name);
1191 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1192 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1195 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1196 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1198 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1199 SAFE_FREE(condition_query);
1200 SAFE_FREE(option_query);
1201 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1203 while (sqlite3_step(stmt) == SQLITE_ROW) {
1204 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1206 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1207 SQLITE3_FINALIZE(stmt);
1208 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1211 _media_info_item_get_detail(stmt, (media_info_h)item);
1213 if (callback((media_info_h)item, user_data) == false) {
1214 media_info_destroy((media_info_h)item);
1218 media_info_destroy((media_info_h)item);
1221 SQLITE3_FINALIZE(stmt);
1226 #ifdef _USE_SENIOR_MODE
1227 int _media_db_get_group_item_by_union_select(const char *group_name, filter_h filter1, filter_h filter2, media_info_cb callback, void *user_data)
1229 int ret = MEDIA_CONTENT_ERROR_NONE;
1230 char select_query1[MAX_QUERY_SIZE] = {0, };
1231 char *condition_query1 = NULL;
1232 char *option_query1 = NULL;
1233 char select_query2[MAX_QUERY_SIZE] = {0, };
1234 char *condition_query2 = NULL;
1235 char *option_query2 = NULL;
1236 sqlite3_stmt *stmt = NULL;
1237 attribute_h attr = NULL;
1238 filter_s *_filter1 = (filter_s*)filter1;
1239 filter_s *_filter2 = (filter_s*)filter2;
1241 attr = _content_get_attirbute_handle();
1243 memset(select_query1, 0x00, sizeof(select_query1));
1245 if ((_filter1 != NULL) && STRING_VALID(_filter1->storage_id))
1246 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, _filter1->storage_id, group_name);
1248 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1250 ret = __media_db_make_query(filter1, attr, select_query1, sizeof(select_query1), &condition_query1, &option_query1);
1251 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1252 SAFE_FREE(condition_query1);
1253 SAFE_FREE(option_query1);
1254 media_content_error("create select_query1 failed");
1258 memset(select_query2, 0x00, sizeof(select_query2));
1260 if ((_filter2 != NULL) && STRING_VALID(_filter2->storage_id))
1261 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, _filter2->storage_id, group_name);
1263 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1265 ret = __media_db_make_query(filter2, attr, select_query2, sizeof(select_query2), &condition_query2, &option_query2);
1266 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1267 SAFE_FREE(condition_query1);
1268 SAFE_FREE(option_query1);
1269 SAFE_FREE(condition_query2);
1270 SAFE_FREE(option_query2);
1271 media_content_error("create select_query2 failed");
1275 ret = _content_query_prepare_by_union_select(&stmt, select_query1, condition_query1, option_query1, select_query2, condition_query2, option_query2);
1276 SAFE_FREE(condition_query1);
1277 SAFE_FREE(option_query1);
1278 SAFE_FREE(condition_query2);
1279 SAFE_FREE(option_query2);
1280 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1282 while (sqlite3_step(stmt) == SQLITE_ROW) {
1283 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1285 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1286 SQLITE3_FINALIZE(stmt);
1287 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1290 _media_info_item_get_detail(stmt, (media_info_h)item);
1292 if (callback((media_info_h)item, user_data) == false) {
1293 media_info_destroy((media_info_h)item);
1297 media_info_destroy((media_info_h)item);
1300 SQLITE3_FINALIZE(stmt);
1306 int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count)
1308 int ret = MEDIA_CONTENT_ERROR_NONE;
1309 sqlite3_stmt *stmt = NULL;
1310 char select_query[MAX_QUERY_SIZE] = {0, };
1311 char *tmp_query = NULL;
1312 char *condition_query = NULL;
1313 char *option_query = NULL;
1314 attribute_h attr = NULL;
1315 filter_s *_filter = (filter_s*)filter;
1317 attr = _content_get_attirbute_handle();
1318 memset(select_query, 0x00, sizeof(select_query));
1319 #ifdef _USE_TV_PROFILE
1320 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
1321 if (group_name != NULL) {
1322 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1323 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1325 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1327 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1329 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1330 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1332 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1334 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
1335 if (group_name != NULL) {
1336 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1337 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1339 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1341 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1343 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1344 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1346 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1348 } else {/*uhd content*/
1349 if (group_name != NULL) {
1350 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1351 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1353 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1355 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1357 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1358 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1360 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1364 if (group_name != NULL) {
1365 if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) {
1366 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1367 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1369 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1370 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1373 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1374 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1376 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1379 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1380 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1381 if (tmp_query != NULL)
1382 SQLITE3_SAFE_FREE(tmp_query);
1386 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1387 if (STRING_VALID(condition_query))
1388 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1389 if (STRING_VALID(option_query))
1390 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1391 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1393 SAFE_FREE(condition_query);
1394 SAFE_FREE(option_query);
1396 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1397 if (tmp_query != NULL)
1398 SQLITE3_SAFE_FREE(tmp_query);
1399 SAFE_FREE(condition_query);
1400 SAFE_FREE(option_query);
1401 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1403 while (sqlite3_step(stmt) == SQLITE_ROW)
1404 *item_count = (int)sqlite3_column_int(stmt, 0);
1406 SQLITE3_FINALIZE(stmt);
1411 int _media_db_get_media_group_item(const char *group_name, filter_h filter, media_group_e group, media_info_cb callback, void *user_data)
1413 int ret = MEDIA_CONTENT_ERROR_NONE;
1414 char select_query[MAX_QUERY_SIZE] = {0, };
1415 char *tmp_query = NULL;
1416 char *condition_query = NULL;
1417 char *option_query = NULL;
1418 sqlite3_stmt *stmt = NULL;
1419 attribute_h attr = NULL;
1420 filter_s *_filter = (filter_s*)filter;
1422 attr = _content_get_attirbute_handle();
1423 memset(select_query, 0x00, sizeof(select_query));
1425 if (group_name != NULL) {
1426 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1427 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1429 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1431 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1433 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1434 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1436 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1439 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1440 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1441 if (tmp_query != NULL)
1442 SQLITE3_SAFE_FREE(tmp_query);
1446 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1447 if (tmp_query != NULL)
1448 SQLITE3_SAFE_FREE(tmp_query);
1449 SAFE_FREE(condition_query);
1450 SAFE_FREE(option_query);
1451 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1453 while (sqlite3_step(stmt) == SQLITE_ROW) {
1454 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1456 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1457 SQLITE3_FINALIZE(stmt);
1458 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1461 _media_info_item_get_detail(stmt, (media_info_h)item);
1463 if (callback((media_info_h)item, user_data) == false) {
1464 media_info_destroy((media_info_h)item);
1468 media_info_destroy((media_info_h)item);
1471 SQLITE3_FINALIZE(stmt);
1476 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
1478 int ret = MEDIA_CONTENT_ERROR_NONE;
1479 char select_query[DEFAULT_QUERY_SIZE];
1480 char *condition_query = NULL;
1481 char *option_query = NULL;
1482 sqlite3_stmt *stmt = NULL;
1483 attribute_h attr = NULL;
1485 attr = _content_get_attirbute_handle();
1486 memset(select_query, 0x00, sizeof(select_query));
1488 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_LIST, sizeof(select_query))) {
1489 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1490 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1493 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1494 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1496 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1497 SAFE_FREE(condition_query);
1498 SAFE_FREE(option_query);
1499 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1501 while (sqlite3_step(stmt) == SQLITE_ROW) {
1502 media_storage_s *_storage = (media_storage_s*)calloc(1, sizeof(media_storage_s));
1504 if (_storage == NULL) {
1505 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1506 SQLITE3_FINALIZE(stmt);
1507 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1510 _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1511 _storage->storage_name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
1512 _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
1513 _storage->storage_account = g_strdup((const char *)sqlite3_column_text(stmt, 3));
1514 _storage->storage_type = (int)sqlite3_column_int(stmt, 4);
1516 if (callback((media_storage_h)_storage, user_data) == false) {
1517 media_storage_destroy((media_storage_h) _storage);
1521 media_storage_destroy((media_storage_h) _storage);
1524 SQLITE3_FINALIZE(stmt);
1528 #ifdef _USE_TV_PROFILE
1529 int _media_db_get_pvr_group_item(const char *group_name, filter_h filter, media_group_e group, media_pvr_cb callback, void *user_data)
1531 int ret = MEDIA_CONTENT_ERROR_NONE;
1532 char select_query[DEFAULT_QUERY_SIZE];
1533 char *tmp_query = NULL;
1534 char *condition_query = NULL;
1535 char *option_query = NULL;
1536 sqlite3_stmt *stmt = NULL;
1537 attribute_h attr = NULL;
1538 filter_s *_filter = (filter_s*)filter;
1540 attr = _content_get_attirbute_handle();
1541 memset(select_query, 0x00, sizeof(select_query));
1543 if (group_name != NULL) {
1544 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1545 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1547 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
1549 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1551 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1552 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1554 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
1557 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1558 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1559 if (tmp_query != NULL)
1560 sqlite3_free(tmp_query);
1564 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1565 if (tmp_query != NULL)
1566 sqlite3_free(tmp_query);
1567 SAFE_FREE(condition_query);
1568 SAFE_FREE(option_query);
1569 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1571 while (sqlite3_step(stmt) == SQLITE_ROW) {
1572 media_pvr_s *item = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1574 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1575 SQLITE3_FINALIZE(stmt);
1576 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1579 _media_pvr_item_get_detail(stmt, (media_pvr_h)item);
1581 if (callback((media_pvr_h)item, user_data) == false) {
1582 media_info_destroy((media_pvr_h)item);
1586 media_pvr_destroy((media_pvr_h)item);
1589 SQLITE3_FINALIZE(stmt);
1595 MEDIA_PVR_MEDIA_ID = 0,
1596 MEDIA_PVR_STORAGE_ID,
1600 MEDIA_PVR_TIME_ZONE,
1604 MEDIA_PVR_CHANNEL_TYPE,
1605 MEDIA_PVR_CHANNEL_NAME,
1606 MEDIA_PVR_CHANNEL_NUM,
1607 MEDIA_PVR_PROGRAM_TITLE,
1608 MEDIA_PVR_PROGRAM_NUM,
1609 MEDIA_PVR_PROGRAM_CRID,
1614 MEDIA_PVR_EMBARGO_TIME,
1615 MEDIA_PVR_EXPIRY_TIME,
1616 MEDIA_PVR_START_TIME,
1617 MEDIA_PVR_PROGRAM_START_TIME,
1618 MEDIA_PVR_PROGRAM_END_TIME,
1619 MEDIA_PVR_PROGRAM_DATE,
1620 MEDIA_PVR_PARENTAL_RATING,
1621 MEDIA_PVR_TIMER_RECORD,
1622 MEDIA_PVR_SERIES_RECORD,
1627 MEDIA_PVR_HARDOF_HEARINGRADIO,
1628 MEDIA_PVR_DATA_SERVICE,
1629 MEDIA_PVR_CONTENT_LOCK,
1630 MEDIA_PVR_CONTENT_WATCH,
1631 MEDIA_PVR_HAS_AUDIO_ONLY,
1632 MEDIA_PVR_IS_LOCAL_RECORDED,
1633 MEDIA_PVR_RESOLUTION,
1634 MEDIA_PVR_ASPECTRATIO,
1635 MEDIA_PVR_MODIFIED_MONTH,
1636 MEDIA_PVR_SPORTS_TYPE,
1637 MEDIA_PVR_GUIDANCE_LENGTH,
1639 MEDIA_PVR_PLAY_COUNT,
1640 MEDIA_PVR_PRIVATE_DATA,
1641 MEDIA_PVR_HIGHLIGHT,
1642 } media_pvr_field_e;
1644 void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
1646 media_pvr_s *_pvr = (media_pvr_s*)pvr;
1648 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID)))
1649 _pvr->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID));
1651 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID)))
1652 _pvr->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID));
1654 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH)))
1655 _pvr->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH));
1657 _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
1659 _pvr->duration = (int)sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
1661 _pvr->timezone = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
1663 _pvr->ptc = (int)sqlite3_column_int(stmt, MEDIA_PVR_PTC);
1665 _pvr->major = (int)sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
1667 _pvr->minor = (int)sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
1669 _pvr->channel_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
1671 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME)))
1672 _pvr->channel_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME));
1674 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM)))
1675 _pvr->channel_num = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM));
1677 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE)))
1678 _pvr->program_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE));
1680 _pvr->program_num = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
1682 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID)))
1683 _pvr->program_crid = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID));
1685 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE)))
1686 _pvr->guidance = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE));
1688 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS)))
1689 _pvr->synopsis = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS));
1691 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE)))
1692 _pvr->genre = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE));
1694 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE)))
1695 _pvr->language = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE));
1697 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH)))
1698 _pvr->modified_month = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH));
1700 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA)))
1701 _pvr->private_data = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA));
1703 _pvr->embargo_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
1705 _pvr->expiry_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
1707 _pvr->start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
1709 _pvr->program_start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
1711 _pvr->program_end_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
1713 _pvr->program_date = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
1715 _pvr->parental_rating = (int)sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
1717 _pvr->timer_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
1719 _pvr->series_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
1721 _pvr->hd = (int)sqlite3_column_int(stmt, MEDIA_PVR_HD);
1723 _pvr->subtitle = (int)sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
1725 _pvr->ttx = (int)sqlite3_column_int(stmt, MEDIA_PVR_TTX);
1727 _pvr->ad = (int)sqlite3_column_int(stmt, MEDIA_PVR_AD);
1729 _pvr->hard_of_hearing_radio = (int)sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
1731 _pvr->data_service = (int)sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
1733 _pvr->content_lock = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
1735 _pvr->content_watch = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
1737 _pvr->has_audio_only = (int)sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
1739 _pvr->is_local_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
1741 _pvr->resolution = (int)sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
1743 _pvr->aspectratio = (int)sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
1745 _pvr->sports_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
1747 _pvr->guidance_length = (int)sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
1749 _pvr->tvmode = (int)sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
1751 _pvr->play_count = (int)sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
1753 _pvr->highlight = (int)sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
1758 int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
1760 int ret = MEDIA_CONTENT_ERROR_NONE;
1761 char select_query[DEFAULT_QUERY_SIZE];
1762 char *condition_query = NULL;
1763 char *option_query = NULL;
1764 sqlite3_stmt *stmt = NULL;
1765 attribute_h attr = NULL;
1766 filter_s *_filter = (filter_s*)filter;
1768 attr = _content_get_attirbute_handle();
1769 memset(select_query, 0x00, sizeof(select_query));
1771 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1772 snprintf(select_query, sizeof(select_query), SELECT_PVR_LIST_BY_STORAGE_ID, _filter->storage_id);
1774 SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
1776 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1777 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1779 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1780 SAFE_FREE(condition_query);
1781 SAFE_FREE(option_query);
1782 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1784 while (sqlite3_step(stmt) == SQLITE_ROW) {
1785 media_pvr_s *_pvr = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1788 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1789 SQLITE3_FINALIZE(stmt);
1790 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1793 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
1795 if (callback((media_pvr_h)_pvr, user_data) == false) {
1796 media_pvr_destroy((media_pvr_h) _pvr);
1800 media_pvr_destroy((media_pvr_h) _pvr);
1803 SQLITE3_FINALIZE(stmt);
1809 int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id)
1811 int ret = MEDIA_CONTENT_ERROR_NONE;
1812 sqlite3_stmt *stmt = NULL;
1813 char *select_query = NULL;
1815 select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
1817 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
1818 SQLITE3_SAFE_FREE(select_query);
1819 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1821 if (sqlite3_step(stmt) == SQLITE_ROW) {
1822 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
1823 strncpy(storage_id, (const char *)sqlite3_column_text(stmt, 0), MEDIA_CONTENT_UUID_SIZE);
1825 media_content_error("There's no media!!");
1826 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1829 SQLITE3_FINALIZE(stmt);
1833 #ifdef _USE_TV_PROFILE
1835 MEDIA_UHD_MEDIA_ID = 0,
1836 MEDIA_UHD_STORAGE_ID,
1839 MEDIA_UHD_CONTENT_ID,
1840 MEDIA_UHD_CONTENT_TITLE,
1841 MEDIA_UHD_FILE_NAME,
1842 MEDIA_UHD_FOLDER_ID,
1843 MEDIA_UHD_RELEASE_DATE,
1844 MEDIA_UHD_MODIFIED_TIME,
1845 MEDIA_UHD_PLAYED_POSITION,
1847 MEDIA_UHD_PLAYED_COUNT,
1848 } media_uhd_field_e;
1850 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
1852 media_uhd_s *_uhd = (media_uhd_s*)uhd;
1854 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID)))
1855 _uhd->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID));
1857 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID)))
1858 _uhd->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID));
1860 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH)))
1861 _uhd->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH));
1863 _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE);
1865 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID)))
1866 _uhd->content_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID));
1868 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE)))
1869 _uhd->content_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE));
1871 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME)))
1872 _uhd->file_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME));
1874 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE)))
1875 _uhd->release_date = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE));
1877 _uhd->modified_time = (int)sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
1878 _uhd->played_position = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
1879 _uhd->sub_type = (int)sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
1880 _uhd->played_count = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
1885 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
1887 int ret = MEDIA_CONTENT_ERROR_NONE;
1888 char select_query[DEFAULT_QUERY_SIZE];
1889 char *condition_query = NULL;
1890 char *option_query = NULL;
1891 sqlite3_stmt *stmt = NULL;
1892 attribute_h attr = NULL;
1893 filter_s *_filter = (filter_s*)filter;
1895 attr = _content_get_attirbute_handle();
1896 memset(select_query, 0x00, sizeof(select_query));
1898 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1899 snprintf(select_query, sizeof(select_query), SELECT_UHD_LIST_BY_STORAGE_ID, _filter->storage_id);
1901 SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
1903 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1904 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1906 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1907 SAFE_FREE(condition_query);
1908 SAFE_FREE(option_query);
1909 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1911 while (sqlite3_step(stmt) == SQLITE_ROW) {
1912 media_uhd_s *_uhd = (media_uhd_s*)calloc(1, sizeof(media_uhd_s));
1915 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1916 SQLITE3_FINALIZE(stmt);
1917 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1920 _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd);
1922 if (callback((media_uhd_h)_uhd, user_data) == false) {
1923 media_uhd_destroy((media_uhd_h) _uhd);
1926 media_uhd_destroy((media_uhd_h) _uhd);
1929 SQLITE3_FINALIZE(stmt);