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;
208 if (filter != NULL) {
209 _filter = (filter_s*)filter;
211 if (_filter->is_full_condition == false) {
212 /* Process for filter v1 */
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, sizeof(bracket_added_condition));
220 SAFE_STRLCAT(bracket_added_condition, _filter->condition, sizeof(bracket_added_condition));
222 ret = _media_filter_attribute_generate(attr, bracket_added_condition, _filter->condition_collate_type, condition_query);
223 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
227 /* Process for filter v2 */
228 if (STRING_VALID(_filter->condition)) {
229 ret = _media_filter_attribute_generate_with_full_query(attr, filter, condition_query);
230 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
234 if (_filter->is_full_order == false) {
235 /* Process for filter v1 */
236 ret = _media_filter_attribute_option_generate(attr, filter, option_query);
237 if (ret != MEDIA_CONTENT_ERROR_NONE) {
238 SAFE_FREE(*condition_query);
242 /* Process for filter v2 */
243 ret = _media_filter_attribute_option_generate_with_full_query(attr, filter, option_query);
244 if (ret != MEDIA_CONTENT_ERROR_NONE) {
245 SAFE_FREE(*condition_query);
250 if (STRING_VALID(*condition_query)) {
251 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, select_query_size);
252 SAFE_STRLCAT(select_query, QUERY_KEYWORD_AND, select_query_size);
259 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
261 int ret = MEDIA_CONTENT_ERROR_NONE;
262 sqlite3_stmt *stmt = NULL;
263 char select_query[MAX_QUERY_SIZE] = {0, };
264 char *condition_query = NULL;
265 char *option_query = NULL;
266 attribute_h attr = NULL;
267 filter_s *_filter = (filter_s*)filter;
269 attr = _content_get_attirbute_handle();
270 memset(select_query, 0x00, sizeof(select_query));
272 switch (group_type) {
273 case MEDIA_GROUP_NONE:
274 case MEDIA_GROUP_TAG_BY_MEDIA_ID:
275 case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
276 case MEDIA_GROUP_FACE_BY_MEDIA_ID:
278 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
279 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
282 case MEDIA_GROUP_ALBUM:
283 attr = _content_get_alias_attirbute_handle();
285 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
286 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id);
288 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_TABLE_MEDIA_VIEW);
291 case MEDIA_GROUP_FOLDER:
292 attr = _content_get_alias_attirbute_handle();
293 if (!SAFE_STRLCPY(select_query, SELECT_FOLDER_COUNT, sizeof(select_query))) {
294 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
295 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
298 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
299 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
301 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_TABLE_MEDIA_VIEW);
304 case MEDIA_GROUP_PLAYLIST:
305 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) {
306 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
307 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
310 case MEDIA_GROUP_TAG:
311 if (!SAFE_STRLCPY(select_query, SELECT_TAG_COUNT, sizeof(select_query))) {
312 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
313 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
316 case MEDIA_GROUP_BOOKMARK:
317 attr = _content_get_alias_attirbute_handle();
319 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
320 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id);
322 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_TABLE_MEDIA_VIEW);
325 case MEDIA_GROUP_STORAGE:
326 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) {
327 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
328 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
331 case MEDIA_GROUP_FACE:
332 attr = _content_get_alias_attirbute_handle();
334 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
335 snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, _filter->storage_id);
337 snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, DB_TABLE_MEDIA_VIEW);
339 #ifdef _USE_TV_PROFILE
340 case MEDIA_GROUP_PVR:
341 case MEDIA_GROUP_UHD:
345 media_content_error("Invalid group type [%d]", group_type);
346 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
351 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
352 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
354 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
355 SAFE_FREE(condition_query);
356 SAFE_FREE(option_query);
357 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
359 while (sqlite3_step(stmt) == SQLITE_ROW)
360 *group_count = (int)sqlite3_column_int(stmt, 0);
362 SQLITE3_FINALIZE(stmt);
367 int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
369 int ret = MEDIA_CONTENT_ERROR_NONE;
370 sqlite3_stmt *stmt = NULL;
371 char select_query[MAX_QUERY_SIZE] = {0, };
372 char *condition_query = NULL;
373 char *option_query = NULL;
374 attribute_h attr = NULL;
375 filter_s *_filter = (filter_s*)filter;
377 attr = _content_get_attirbute_handle();
378 memset(select_query, 0x00, sizeof(select_query));
379 #ifdef _USE_TV_PROFILE
380 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
381 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
382 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
384 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
385 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content*/
386 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
387 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
389 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT, __media_db_get_group_name(group));
390 } else { /*uhd content*/
391 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
392 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
394 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group));
397 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
398 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
400 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
402 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
403 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
405 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
406 if (STRING_VALID(condition_query))
407 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
408 if (STRING_VALID(option_query))
409 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
410 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
412 SAFE_FREE(condition_query);
413 SAFE_FREE(option_query);
415 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
416 SAFE_FREE(condition_query);
417 SAFE_FREE(option_query);
418 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
420 while (sqlite3_step(stmt) == SQLITE_ROW)
421 *group_count = (int)sqlite3_column_int(stmt, 0);
423 SQLITE3_FINALIZE(stmt);
428 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
430 int ret = MEDIA_CONTENT_ERROR_NONE;
431 char select_query[MAX_QUERY_SIZE] = {0, };
432 char *condition_query = NULL;
433 char *option_query = NULL;
435 sqlite3_stmt *stmt = NULL;
436 attribute_h attr = NULL;
437 filter_s *_filter = (filter_s*)filter;
439 attr = _content_get_attirbute_handle();
440 memset(select_query, 0x00, sizeof(select_query));
441 #ifdef _USE_TV_PROFILE
442 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
443 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
444 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
446 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
447 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content */
448 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
449 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
451 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST, __media_db_get_group_name(group));
452 } else { /* uhd content */
453 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
454 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
456 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group));
459 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
460 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
462 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
464 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
465 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
467 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
468 SAFE_FREE(condition_query);
469 SAFE_FREE(option_query);
470 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
472 while (sqlite3_step(stmt) == SQLITE_ROW) {
473 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
475 if (callback(name, user_data) == false) {
483 SQLITE3_FINALIZE(stmt);
487 #ifdef _USE_TV_PROFILE
488 int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, media_group_and_count_cb callback, void *user_data)
490 int ret = MEDIA_CONTENT_ERROR_NONE;
491 char select_query[DEFAULT_QUERY_SIZE] = {0, };
492 char group_query[DEFAULT_QUERY_SIZE] = {0, };
493 char *condition_query = NULL;
494 char *option_query = NULL;
496 sqlite3_stmt *stmt = NULL;
497 attribute_h attr = NULL;
498 filter_s *_filter = (filter_s*)filter;
500 attr = _content_get_attirbute_handle();
501 memset(select_query, 0x00, sizeof(select_query));
502 memset(group_query, 0x00, sizeof(group_query));
504 char* group_name = __media_db_get_group_name(group);
505 if (!STRING_VALID(group_name)) {
506 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
507 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
510 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
511 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
512 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, _filter->storage_id);
514 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, DB_TABLE_MEDIA_VIEW);
515 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
516 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
517 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
519 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT, group_name);
520 } else {/*uhd content*/
521 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
522 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
524 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name);
527 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
528 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
530 if (STRING_VALID(option_query))
531 snprintf(group_query, sizeof(group_query), "GROUP BY %s %s", group_name, option_query);
533 snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name);
535 ret = _content_query_prepare(&stmt, select_query, condition_query, group_query);
536 SAFE_FREE(condition_query);
537 SAFE_FREE(option_query);
538 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
540 while (sqlite3_step(stmt) == SQLITE_ROW) {
541 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
542 name = strdup((const char *)sqlite3_column_text(stmt, 0));
544 if (callback(name, sqlite3_column_int(stmt, 1), user_data) == false) {
552 SQLITE3_FINALIZE(stmt);
557 int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data)
559 int ret = MEDIA_CONTENT_ERROR_NONE;
560 char select_query[MAX_QUERY_SIZE] = {0, };
561 char *condition_query = NULL;
562 char *option_query = NULL;
563 sqlite3_stmt *stmt = NULL;
564 attribute_h attr = NULL;
565 filter_s *_filter = (filter_s*)filter;
567 attr = _content_get_alias_attirbute_handle();
568 memset(select_query, 0x00, sizeof(select_query));
570 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
571 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, _filter->storage_id);
573 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_TABLE_MEDIA_VIEW);
575 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
576 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
578 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
579 SAFE_FREE(condition_query);
580 SAFE_FREE(option_query);
581 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
583 while (sqlite3_step(stmt) == SQLITE_ROW) {
584 media_album_s *album = (media_album_s*)calloc(1, sizeof(media_album_s));
587 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
588 SQLITE3_FINALIZE(stmt);
589 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
592 album->album_id = (int)sqlite3_column_int(stmt, 0);
593 album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
594 album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2));
595 album->album_art_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
597 if (callback((media_album_h)album, user_data) == false) {
598 media_album_destroy((media_album_h)album);
602 media_album_destroy((media_album_h)album);
605 SQLITE3_FINALIZE(stmt);
610 int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_data)
612 int ret = MEDIA_CONTENT_ERROR_NONE;
613 char select_query[MAX_QUERY_SIZE] = {0, };
614 char *condition_query = NULL;
615 char *option_query = NULL;
616 sqlite3_stmt *stmt = NULL;
617 sqlite3_stmt *sub_stmt = NULL;
618 attribute_h attr = NULL;
619 filter_s *_filter = (filter_s*)filter;
620 char *tmp_path = NULL;
621 char *parent_path = NULL;
622 char repl_path[MAX_PATH_LEN] = {0, };
624 attr = _content_get_alias_attirbute_handle();
625 memset(select_query, 0x00, sizeof(select_query));
627 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
628 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
630 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_TABLE_MEDIA_VIEW);
632 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
633 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
635 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
637 SAFE_FREE(condition_query);
638 SAFE_FREE(option_query);
639 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
641 while (sqlite3_step(stmt) == SQLITE_ROW) {
642 media_folder_s *_folder = (media_folder_s*)calloc(1, sizeof(media_folder_s));
644 if (_folder == NULL) {
645 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
646 SQLITE3_FINALIZE(stmt);
647 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
650 _folder->folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
652 tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
653 _media_content_rollback_path(tmp_path, repl_path);
654 _folder->path = g_strdup(repl_path);
655 _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
656 _folder->storage_type = (int)sqlite3_column_int(stmt, 3);
657 _folder->modified_time = (int)sqlite3_column_int(stmt, 4);
658 _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 5));
659 _folder->folder_order = (int)sqlite3_column_int(stmt, 6);
661 parent_path = g_path_get_dirname(tmp_path);
662 memset(select_query, 0x00, sizeof(select_query));
663 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_ID_BY_PATH, parent_path);
666 SAFE_FREE(parent_path);
668 ret = _content_query_prepare(&sub_stmt, select_query, NULL, NULL);
669 if (ret != MEDIA_CONTENT_ERROR_NONE) {
670 media_content_error("_content_query_prepare failed");
671 media_folder_destroy((media_folder_h) _folder);
672 SQLITE3_FINALIZE(stmt);
676 if (sqlite3_step(sub_stmt) == SQLITE_ROW)
677 _folder->parent_folder_id = g_strdup((const char *)sqlite3_column_text(sub_stmt, 0));
679 SQLITE3_FINALIZE(sub_stmt);
681 if (callback((media_folder_h)_folder, user_data) == false) {
682 media_folder_destroy((media_folder_h) _folder);
686 media_folder_destroy((media_folder_h) _folder);
689 SQLITE3_FINALIZE(stmt);
694 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
696 int ret = MEDIA_CONTENT_ERROR_NONE;
697 char select_query[MAX_QUERY_SIZE] = {0, };
698 char *condition_query = NULL;
699 char *option_query = NULL;
700 sqlite3_stmt *stmt = NULL;
701 attribute_h attr = NULL;
702 char *tmp_path = NULL;
703 char repl_path[MAX_PATH_LEN] = {0, };
705 attr = _content_get_attirbute_handle();
706 memset(select_query, 0x00, sizeof(select_query));
708 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_LIST, sizeof(select_query))) {
709 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
710 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
713 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
714 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
716 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
717 SAFE_FREE(condition_query);
718 SAFE_FREE(option_query);
719 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
721 while (sqlite3_step(stmt) == SQLITE_ROW) {
722 media_playlist_s *_playlist = (media_playlist_s*)calloc(1, sizeof(media_playlist_s));
724 if (_playlist == NULL) {
725 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
726 SQLITE3_FINALIZE(stmt);
727 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
730 _playlist->playlist_id = (int)sqlite3_column_int(stmt, 0);
731 _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
733 memset(repl_path, 0x00, sizeof(repl_path));
734 tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
735 if (STRING_VALID(tmp_path)) {
736 _media_content_rollback_path(tmp_path, repl_path);
737 _playlist->thumbnail_path = g_strdup(repl_path);
739 _playlist->thumbnail_path = NULL;
744 if (callback((media_playlist_h)_playlist, user_data) == false) {
745 media_playlist_destroy((media_playlist_h)_playlist);
748 media_playlist_destroy((media_playlist_h)_playlist);
751 SQLITE3_FINALIZE(stmt);
756 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
758 int ret = MEDIA_CONTENT_ERROR_NONE;
759 char select_query[MAX_QUERY_SIZE] = {0, };
760 char *condition_query = NULL;
761 char *option_query = NULL;
762 sqlite3_stmt *stmt = NULL;
763 attribute_h attr = NULL;
765 attr = _content_get_attirbute_handle();
766 memset(select_query, 0x00, sizeof(select_query));
768 /*snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ID_FROM_PLAYLIST_VIEW, playlist_id);*/
769 snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
771 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
772 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
774 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
775 SAFE_FREE(condition_query);
776 SAFE_FREE(option_query);
777 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
779 while (sqlite3_step(stmt) == SQLITE_ROW) {
780 int playlist_member_id = 0;
781 playlist_member_id = (int)sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX); /*MEDIA_INFO_ITEM_MAX is pm_id*/
783 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
785 if (_media == NULL) {
786 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
787 SQLITE3_FINALIZE(stmt);
788 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
791 _media_info_item_get_detail(stmt, (media_info_h)_media);
793 if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) {
794 media_info_destroy((media_info_h)_media);
797 media_info_destroy((media_info_h)_media);
801 SQLITE3_FINALIZE(stmt);
806 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
808 int ret = MEDIA_CONTENT_ERROR_NONE;
809 char select_query[MAX_QUERY_SIZE] = {0, };
810 char *condition_query = NULL;
811 char *option_query = NULL;
812 sqlite3_stmt *stmt = NULL;
813 attribute_h attr = NULL;
815 attr = _content_get_attirbute_handle();
816 memset(select_query, 0x00, sizeof(select_query));
818 if (!STRING_VALID(media_id)) {
819 if (!SAFE_STRLCPY(select_query, SELECT_TAG_LIST, sizeof(select_query))) {
820 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
821 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
824 snprintf(select_query, sizeof(select_query), SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
826 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
827 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
829 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
831 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
832 SAFE_FREE(condition_query);
833 SAFE_FREE(option_query);
834 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
836 while (sqlite3_step(stmt) == SQLITE_ROW) {
837 media_tag_s *_tag = (media_tag_s*)calloc(1, sizeof(media_tag_s));
840 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
841 SQLITE3_FINALIZE(stmt);
842 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
845 _tag->tag_id = (int)sqlite3_column_int(stmt, 0);
846 _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
848 if (callback((media_tag_h)_tag, user_data) == false) {
849 media_tag_destroy((media_tag_h)_tag);
852 media_tag_destroy((media_tag_h)_tag);
855 SQLITE3_FINALIZE(stmt);
860 int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
862 int ret = MEDIA_CONTENT_ERROR_NONE;
863 char select_query[MAX_QUERY_SIZE] = {0, };
864 char *condition_query = NULL;
865 char *option_query = NULL;
866 sqlite3_stmt *stmt = NULL;
867 attribute_h attr = NULL;
868 filter_s *_filter = (filter_s*)filter;
870 attr = _content_get_alias_attirbute_handle();
872 memset(select_query, 0x00, sizeof(select_query));
874 if (STRING_VALID(media_id)) { //get bookmark by media_id
875 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
876 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
878 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, media_id);
880 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
881 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, _filter->storage_id);
883 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, DB_TABLE_MEDIA_VIEW);
886 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
887 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
889 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
890 SAFE_FREE(condition_query);
891 SAFE_FREE(option_query);
892 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
894 while (sqlite3_step(stmt) == SQLITE_ROW) {
895 media_bookmark_s *bookmark = (media_bookmark_s*)calloc(1, sizeof(media_bookmark_s));
897 if (bookmark == NULL) {
898 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
899 SQLITE3_FINALIZE(stmt);
900 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
903 bookmark->bookmark_id = (int)sqlite3_column_int(stmt, 0);
904 bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
905 bookmark->marked_time = (int)sqlite3_column_int(stmt, 2);
906 bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
907 bookmark->name = g_strdup((const char *)sqlite3_column_text(stmt, 4));
909 if (callback((media_bookmark_h)bookmark, user_data) == false) {
910 media_bookmark_destroy((media_bookmark_h)bookmark);
914 media_bookmark_destroy((media_bookmark_h)bookmark);
917 SQLITE3_FINALIZE(stmt);
923 int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
925 int ret = MEDIA_CONTENT_ERROR_NONE;
926 char select_query[MAX_QUERY_SIZE] = {0, };
927 char *condition_query = NULL;
928 char *option_query = NULL;
929 sqlite3_stmt *stmt = NULL;
930 attribute_h attr = NULL;
931 filter_s *_filter = (filter_s*)filter;
933 attr = _content_get_alias_attirbute_handle();
935 memset(select_query, 0x00, sizeof(select_query));
937 if (STRING_VALID(media_id)) { //get face by media_id
938 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
939 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
941 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, media_id);
943 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
944 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, _filter->storage_id);
946 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, DB_TABLE_MEDIA_VIEW);
949 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
950 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
952 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
953 SAFE_FREE(condition_query);
954 SAFE_FREE(option_query);
955 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
957 while (sqlite3_step(stmt) == SQLITE_ROW) {
958 media_face_s *face = (media_face_s*)calloc(1, sizeof(media_face_s));
961 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
962 SQLITE3_FINALIZE(stmt);
963 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
966 face->face_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
967 face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
968 face->face_rect_x = (int)sqlite3_column_int(stmt, 2);
969 face->face_rect_y = (int)sqlite3_column_int(stmt, 3);
970 face->face_rect_w = (int)sqlite3_column_int(stmt, 4);
971 face->face_rect_h = (int)sqlite3_column_int(stmt, 5);
972 face->orientation = (int)sqlite3_column_int(stmt, 6);
973 face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7));
975 if (callback((media_face_h)face, user_data) == false) {
976 media_face_destroy((media_face_h)face);
980 media_face_destroy((media_face_h)face);
983 SQLITE3_FINALIZE(stmt);
989 int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_list_e group_type, int *item_count)
991 int ret = MEDIA_CONTENT_ERROR_NONE;
992 sqlite3_stmt *stmt = NULL;
993 char select_query[MAX_QUERY_SIZE] = {0, };
994 char *condition_query = NULL;
995 char *option_query = NULL;
996 attribute_h attr = NULL;
997 filter_s *_filter = (filter_s*)filter;
999 attr = _content_get_attirbute_handle();
1000 memset(select_query, 0x00, sizeof(select_query));
1002 if (group_type == MEDIA_GROUP_ALBUM) {
1003 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1004 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id);
1006 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, DB_TABLE_MEDIA_VIEW, group_id);
1007 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
1008 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id);
1009 } else if (group_type == MEDIA_GROUP_TAG) {
1010 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_TAG, group_id);
1012 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1013 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1016 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1017 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1019 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1020 SAFE_FREE(condition_query);
1021 SAFE_FREE(option_query);
1022 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1024 while (sqlite3_step(stmt) == SQLITE_ROW)
1025 *item_count = (int)sqlite3_column_int(stmt, 0);
1027 SQLITE3_FINALIZE(stmt);
1032 int _media_db_get_group_item_count(const char *group_name, filter_h filter, group_list_e group_type, int *item_count)
1034 int ret = MEDIA_CONTENT_ERROR_NONE;
1035 sqlite3_stmt *stmt = NULL;
1036 char select_query[MAX_QUERY_SIZE] = {0, };
1037 char *tmp_query = NULL;
1038 char *condition_query = NULL;
1039 char *option_query = NULL;
1040 bool is_simple = FALSE;
1041 attribute_h attr = NULL;
1042 filter_s *_filter = (filter_s*)filter;
1044 attr = _content_get_attirbute_handle();
1045 memset(select_query, 0x00, sizeof(select_query));
1047 if (group_type == MEDIA_GROUP_NONE) {
1048 /* There are 2 ways to get count for media table for performance
1049 If user wants to set offset and count, use SQL SELECT_MEDIA_COUNT_FROM_MEDIA.
1050 If user wants to get count without setting count, SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE */
1051 if (_filter && ((_filter->offset < 0) && (_filter->count < 0))) {
1052 if (STRING_VALID(_filter->storage_id))
1053 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
1055 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_TABLE_MEDIA_VIEW);
1058 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_TABLE_MEDIA_VIEW);
1060 } else if (group_type == MEDIA_GROUP_FOLDER) {
1061 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1062 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
1064 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1066 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1067 } else if (group_type == MEDIA_GROUP_TAG_BY_MEDIA_ID) {
1068 snprintf(select_query, sizeof(select_query), SELECT_TAG_COUNT_BY_MEDIA_ID, group_name);
1069 } else if (group_type == MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID) {
1070 attr = _content_get_alias_attirbute_handle();
1072 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1073 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1075 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, group_name);
1077 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1078 } else if (group_type == MEDIA_GROUP_STORAGE) {
1079 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_STORAGE, group_name, group_name);
1081 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1082 } else if (group_type == MEDIA_GROUP_FACE_BY_MEDIA_ID) {
1083 attr = _content_get_alias_attirbute_handle();
1085 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1086 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1088 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, group_name);
1090 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1091 #ifdef _USE_TV_PROFILE
1092 } else if (group_type == MEDIA_GROUP_PVR) {
1093 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1094 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id);
1096 SAFE_STRLCAT(select_query, SELECT_PVR_COUNT, sizeof(select_query));
1097 } else if (group_type == MEDIA_GROUP_UHD) {
1098 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1099 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id);
1101 SAFE_STRLCAT(select_query, SELECT_UHD_COUNT, sizeof(select_query));
1104 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1105 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1108 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1109 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1110 if (tmp_query != NULL)
1111 SQLITE3_SAFE_FREE(tmp_query);
1115 if (group_type == MEDIA_GROUP_NONE) {
1116 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1117 if (STRING_VALID(condition_query))
1118 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1119 if (STRING_VALID(option_query))
1120 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1123 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1125 SAFE_FREE(condition_query);
1126 SAFE_FREE(option_query);
1129 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1130 if (tmp_query != NULL)
1131 SQLITE3_SAFE_FREE(tmp_query);
1132 SAFE_FREE(condition_query);
1133 SAFE_FREE(option_query);
1134 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1136 while (sqlite3_step(stmt) == SQLITE_ROW)
1137 *item_count = (int)sqlite3_column_int(stmt, 0);
1139 SQLITE3_FINALIZE(stmt);
1144 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)
1146 int ret = MEDIA_CONTENT_ERROR_NONE;
1147 char select_query[MAX_QUERY_SIZE] = {0, };
1148 char *condition_query = NULL;
1149 char *option_query = NULL;
1150 sqlite3_stmt *stmt = NULL;
1151 attribute_h attr = NULL;
1152 filter_s *_filter = (filter_s*)filter;
1154 attr = _content_get_attirbute_handle();
1155 memset(select_query, 0x00, sizeof(select_query));
1157 if (group_type == MEDIA_GROUP_ALBUM) {
1158 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1159 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id);
1161 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, DB_TABLE_MEDIA_VIEW, group_id);
1162 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
1163 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1164 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id);
1166 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, DB_TABLE_MEDIA_VIEW, group_id);
1167 } else if (group_type == MEDIA_GROUP_TAG) {
1168 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1169 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id);
1171 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_TABLE_MEDIA_VIEW, group_id);
1173 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1174 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1177 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1178 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1180 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1181 SAFE_FREE(condition_query);
1182 SAFE_FREE(option_query);
1183 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1185 while (sqlite3_step(stmt) == SQLITE_ROW) {
1186 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1188 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1189 SQLITE3_FINALIZE(stmt);
1190 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1193 _media_info_item_get_detail(stmt, (media_info_h)item);
1195 if (callback((media_info_h)item, user_data) == false) {
1196 media_info_destroy((media_info_h)item);
1200 media_info_destroy((media_info_h)item);
1203 SQLITE3_FINALIZE(stmt);
1208 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)
1210 int ret = MEDIA_CONTENT_ERROR_NONE;
1211 char select_query[MAX_QUERY_SIZE] = {0, };
1212 char *condition_query = NULL;
1213 char *option_query = NULL;
1214 sqlite3_stmt *stmt = NULL;
1215 attribute_h attr = NULL;
1216 filter_s *_filter = (filter_s*)filter;
1218 attr = _content_get_attirbute_handle();
1219 memset(select_query, 0x00, sizeof(select_query));
1221 if (group_type == MEDIA_GROUP_NONE) {
1222 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1223 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, _filter->storage_id);
1225 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, DB_TABLE_MEDIA_VIEW);
1226 } else if (group_type == MEDIA_GROUP_FOLDER) {
1227 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1228 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name);
1230 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1231 } else if (group_type == MEDIA_GROUP_STORAGE) {
1232 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name, group_name);
1234 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1235 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1238 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1239 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1241 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1242 SAFE_FREE(condition_query);
1243 SAFE_FREE(option_query);
1244 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1246 while (sqlite3_step(stmt) == SQLITE_ROW) {
1247 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1249 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1250 SQLITE3_FINALIZE(stmt);
1251 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1254 _media_info_item_get_detail(stmt, (media_info_h)item);
1256 if (callback((media_info_h)item, user_data) == false) {
1257 media_info_destroy((media_info_h)item);
1261 media_info_destroy((media_info_h)item);
1264 SQLITE3_FINALIZE(stmt);
1269 #ifdef _USE_SENIOR_MODE
1270 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)
1272 int ret = MEDIA_CONTENT_ERROR_NONE;
1273 char select_query1[MAX_QUERY_SIZE] = {0, };
1274 char *condition_query1 = NULL;
1275 char *option_query1 = NULL;
1276 char select_query2[MAX_QUERY_SIZE] = {0, };
1277 char *condition_query2 = NULL;
1278 char *option_query2 = NULL;
1279 sqlite3_stmt *stmt = NULL;
1280 attribute_h attr = NULL;
1281 filter_s *_filter1 = (filter_s*)filter1;
1282 filter_s *_filter2 = (filter_s*)filter2;
1284 attr = _content_get_attirbute_handle();
1286 memset(select_query1, 0x00, sizeof(select_query1));
1288 if ((_filter1 != NULL) && STRING_VALID(_filter1->storage_id))
1289 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, _filter1->storage_id, group_name);
1291 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1293 ret = __media_db_make_query(filter1, attr, select_query1, sizeof(select_query1), &condition_query1, &option_query1);
1294 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1295 SAFE_FREE(condition_query1);
1296 SAFE_FREE(option_query1);
1297 media_content_error("create select_query1 failed");
1301 memset(select_query2, 0x00, sizeof(select_query2));
1303 if ((_filter2 != NULL) && STRING_VALID(_filter2->storage_id))
1304 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, _filter2->storage_id, group_name);
1306 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1308 ret = __media_db_make_query(filter2, attr, select_query2, sizeof(select_query2), &condition_query2, &option_query2);
1309 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1310 SAFE_FREE(condition_query1);
1311 SAFE_FREE(option_query1);
1312 SAFE_FREE(condition_query2);
1313 SAFE_FREE(option_query2);
1314 media_content_error("create select_query2 failed");
1318 ret = _content_query_prepare_by_union_select(&stmt, select_query1, condition_query1, option_query1, select_query2, condition_query2, option_query2);
1319 SAFE_FREE(condition_query1);
1320 SAFE_FREE(option_query1);
1321 SAFE_FREE(condition_query2);
1322 SAFE_FREE(option_query2);
1323 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1325 while (sqlite3_step(stmt) == SQLITE_ROW) {
1326 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1328 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1329 SQLITE3_FINALIZE(stmt);
1330 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1333 _media_info_item_get_detail(stmt, (media_info_h)item);
1335 if (callback((media_info_h)item, user_data) == false) {
1336 media_info_destroy((media_info_h)item);
1340 media_info_destroy((media_info_h)item);
1343 SQLITE3_FINALIZE(stmt);
1349 int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count)
1351 int ret = MEDIA_CONTENT_ERROR_NONE;
1352 sqlite3_stmt *stmt = NULL;
1353 char select_query[MAX_QUERY_SIZE] = {0, };
1354 char *tmp_query = NULL;
1355 char *condition_query = NULL;
1356 char *option_query = NULL;
1357 attribute_h attr = NULL;
1358 filter_s *_filter = (filter_s*)filter;
1360 attr = _content_get_attirbute_handle();
1361 memset(select_query, 0x00, sizeof(select_query));
1362 #ifdef _USE_TV_PROFILE
1363 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
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);
1368 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));
1372 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1373 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1375 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1377 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
1378 if (group_name != NULL) {
1379 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1380 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1382 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1384 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1386 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1387 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1389 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1391 } else {/*uhd content*/
1392 if (group_name != NULL) {
1393 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1394 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1396 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1398 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1400 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1401 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1403 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1407 if (group_name != NULL) {
1408 if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) {
1409 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1410 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1412 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1413 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1416 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1417 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1419 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1422 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1423 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1424 if (tmp_query != NULL)
1425 SQLITE3_SAFE_FREE(tmp_query);
1429 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1430 if (STRING_VALID(condition_query))
1431 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1432 if (STRING_VALID(option_query))
1433 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1434 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1436 SAFE_FREE(condition_query);
1437 SAFE_FREE(option_query);
1439 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1440 if (tmp_query != NULL)
1441 SQLITE3_SAFE_FREE(tmp_query);
1442 SAFE_FREE(condition_query);
1443 SAFE_FREE(option_query);
1444 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1446 while (sqlite3_step(stmt) == SQLITE_ROW)
1447 *item_count = (int)sqlite3_column_int(stmt, 0);
1449 SQLITE3_FINALIZE(stmt);
1454 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)
1456 int ret = MEDIA_CONTENT_ERROR_NONE;
1457 char select_query[MAX_QUERY_SIZE] = {0, };
1458 char *tmp_query = NULL;
1459 char *condition_query = NULL;
1460 char *option_query = NULL;
1461 sqlite3_stmt *stmt = NULL;
1462 attribute_h attr = NULL;
1463 filter_s *_filter = (filter_s*)filter;
1465 attr = _content_get_attirbute_handle();
1466 memset(select_query, 0x00, sizeof(select_query));
1468 if (group_name != NULL) {
1469 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1470 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1472 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1474 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1476 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1477 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1479 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1482 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1483 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1484 if (tmp_query != NULL)
1485 SQLITE3_SAFE_FREE(tmp_query);
1489 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1490 if (tmp_query != NULL)
1491 SQLITE3_SAFE_FREE(tmp_query);
1492 SAFE_FREE(condition_query);
1493 SAFE_FREE(option_query);
1494 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1496 while (sqlite3_step(stmt) == SQLITE_ROW) {
1497 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1499 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1500 SQLITE3_FINALIZE(stmt);
1501 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1504 _media_info_item_get_detail(stmt, (media_info_h)item);
1506 if (callback((media_info_h)item, user_data) == false) {
1507 media_info_destroy((media_info_h)item);
1511 media_info_destroy((media_info_h)item);
1514 SQLITE3_FINALIZE(stmt);
1519 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
1521 int ret = MEDIA_CONTENT_ERROR_NONE;
1522 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1523 char *condition_query = NULL;
1524 char *option_query = NULL;
1525 sqlite3_stmt *stmt = NULL;
1526 attribute_h attr = NULL;
1528 attr = _content_get_attirbute_handle();
1529 memset(select_query, 0x00, sizeof(select_query));
1531 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_LIST, sizeof(select_query))) {
1532 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1533 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1536 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1537 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1539 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1540 SAFE_FREE(condition_query);
1541 SAFE_FREE(option_query);
1542 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1544 while (sqlite3_step(stmt) == SQLITE_ROW) {
1545 media_storage_s *_storage = (media_storage_s*)calloc(1, sizeof(media_storage_s));
1547 if (_storage == NULL) {
1548 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1549 SQLITE3_FINALIZE(stmt);
1550 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1553 _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1554 _storage->storage_name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
1555 _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
1556 _storage->storage_type = (int)sqlite3_column_int(stmt, 3);
1558 if (callback((media_storage_h)_storage, user_data) == false) {
1559 media_storage_destroy((media_storage_h) _storage);
1563 media_storage_destroy((media_storage_h) _storage);
1566 SQLITE3_FINALIZE(stmt);
1570 #ifdef _USE_TV_PROFILE
1571 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)
1573 int ret = MEDIA_CONTENT_ERROR_NONE;
1574 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1575 char *tmp_query = NULL;
1576 char *condition_query = NULL;
1577 char *option_query = NULL;
1578 sqlite3_stmt *stmt = NULL;
1579 attribute_h attr = NULL;
1580 filter_s *_filter = (filter_s*)filter;
1582 attr = _content_get_attirbute_handle();
1583 memset(select_query, 0x00, sizeof(select_query));
1585 if (group_name != NULL) {
1586 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1587 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1589 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
1591 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1593 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1594 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1596 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
1599 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1600 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1601 if (tmp_query != NULL)
1602 sqlite3_free(tmp_query);
1606 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1607 if (tmp_query != NULL)
1608 sqlite3_free(tmp_query);
1609 SAFE_FREE(condition_query);
1610 SAFE_FREE(option_query);
1611 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1613 while (sqlite3_step(stmt) == SQLITE_ROW) {
1614 media_pvr_s *item = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1616 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1617 SQLITE3_FINALIZE(stmt);
1618 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1621 _media_pvr_item_get_detail(stmt, (media_pvr_h)item);
1623 if (callback((media_pvr_h)item, user_data) == false) {
1624 media_info_destroy((media_pvr_h)item);
1628 media_pvr_destroy((media_pvr_h)item);
1631 SQLITE3_FINALIZE(stmt);
1637 MEDIA_PVR_MEDIA_ID = 0,
1638 MEDIA_PVR_STORAGE_ID,
1642 MEDIA_PVR_TIME_ZONE,
1646 MEDIA_PVR_CHANNEL_TYPE,
1647 MEDIA_PVR_CHANNEL_NAME,
1648 MEDIA_PVR_CHANNEL_NUM,
1649 MEDIA_PVR_PROGRAM_TITLE,
1650 MEDIA_PVR_PROGRAM_NUM,
1651 MEDIA_PVR_PROGRAM_CRID,
1656 MEDIA_PVR_EMBARGO_TIME,
1657 MEDIA_PVR_EXPIRY_TIME,
1658 MEDIA_PVR_START_TIME,
1659 MEDIA_PVR_PROGRAM_START_TIME,
1660 MEDIA_PVR_PROGRAM_END_TIME,
1661 MEDIA_PVR_PROGRAM_DATE,
1662 MEDIA_PVR_PARENTAL_RATING,
1663 MEDIA_PVR_TIMER_RECORD,
1664 MEDIA_PVR_SERIES_RECORD,
1669 MEDIA_PVR_HARDOF_HEARINGRADIO,
1670 MEDIA_PVR_DATA_SERVICE,
1671 MEDIA_PVR_CONTENT_LOCK,
1672 MEDIA_PVR_CONTENT_WATCH,
1673 MEDIA_PVR_HAS_AUDIO_ONLY,
1674 MEDIA_PVR_IS_LOCAL_RECORDED,
1675 MEDIA_PVR_RESOLUTION,
1676 MEDIA_PVR_ASPECTRATIO,
1677 MEDIA_PVR_MODIFIED_MONTH,
1678 MEDIA_PVR_SPORTS_TYPE,
1679 MEDIA_PVR_GUIDANCE_LENGTH,
1681 MEDIA_PVR_PLAY_COUNT,
1682 MEDIA_PVR_PRIVATE_DATA,
1683 MEDIA_PVR_HIGHLIGHT,
1684 } media_pvr_field_e;
1686 void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
1688 media_pvr_s *_pvr = (media_pvr_s*)pvr;
1690 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID)))
1691 _pvr->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID));
1693 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID)))
1694 _pvr->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID));
1696 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH)))
1697 _pvr->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH));
1699 _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
1701 _pvr->duration = (int)sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
1703 _pvr->timezone = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
1705 _pvr->ptc = (int)sqlite3_column_int(stmt, MEDIA_PVR_PTC);
1707 _pvr->major = (int)sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
1709 _pvr->minor = (int)sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
1711 _pvr->channel_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
1713 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME)))
1714 _pvr->channel_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME));
1716 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM)))
1717 _pvr->channel_num = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM));
1719 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE)))
1720 _pvr->program_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE));
1722 _pvr->program_num = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
1724 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID)))
1725 _pvr->program_crid = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID));
1727 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE)))
1728 _pvr->guidance = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE));
1730 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS)))
1731 _pvr->synopsis = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS));
1733 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE)))
1734 _pvr->genre = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE));
1736 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE)))
1737 _pvr->language = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE));
1739 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH)))
1740 _pvr->modified_month = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH));
1742 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA)))
1743 _pvr->private_data = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA));
1745 _pvr->embargo_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
1747 _pvr->expiry_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
1749 _pvr->start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
1751 _pvr->program_start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
1753 _pvr->program_end_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
1755 _pvr->program_date = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
1757 _pvr->parental_rating = (int)sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
1759 _pvr->timer_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
1761 _pvr->series_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
1763 _pvr->hd = (int)sqlite3_column_int(stmt, MEDIA_PVR_HD);
1765 _pvr->subtitle = (int)sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
1767 _pvr->ttx = (int)sqlite3_column_int(stmt, MEDIA_PVR_TTX);
1769 _pvr->ad = (int)sqlite3_column_int(stmt, MEDIA_PVR_AD);
1771 _pvr->hard_of_hearing_radio = (int)sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
1773 _pvr->data_service = (int)sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
1775 _pvr->content_lock = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
1777 _pvr->content_watch = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
1779 _pvr->has_audio_only = (int)sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
1781 _pvr->is_local_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
1783 _pvr->resolution = (int)sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
1785 _pvr->aspectratio = (int)sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
1787 _pvr->sports_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
1789 _pvr->guidance_length = (int)sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
1791 _pvr->tvmode = (int)sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
1793 _pvr->play_count = (int)sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
1795 _pvr->highlight = (int)sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
1800 int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
1802 int ret = MEDIA_CONTENT_ERROR_NONE;
1803 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1804 char *condition_query = NULL;
1805 char *option_query = NULL;
1806 sqlite3_stmt *stmt = NULL;
1807 attribute_h attr = NULL;
1808 filter_s *_filter = (filter_s*)filter;
1810 attr = _content_get_attirbute_handle();
1811 memset(select_query, 0x00, sizeof(select_query));
1813 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1814 snprintf(select_query, sizeof(select_query), SELECT_PVR_LIST_BY_STORAGE_ID, _filter->storage_id);
1816 SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
1818 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1819 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1821 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1822 SAFE_FREE(condition_query);
1823 SAFE_FREE(option_query);
1824 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1826 while (sqlite3_step(stmt) == SQLITE_ROW) {
1827 media_pvr_s *_pvr = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1830 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1831 SQLITE3_FINALIZE(stmt);
1832 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1835 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
1837 if (callback((media_pvr_h)_pvr, user_data) == false) {
1838 media_pvr_destroy((media_pvr_h) _pvr);
1842 media_pvr_destroy((media_pvr_h) _pvr);
1845 SQLITE3_FINALIZE(stmt);
1851 int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id)
1853 int ret = MEDIA_CONTENT_ERROR_NONE;
1854 sqlite3_stmt *stmt = NULL;
1855 char *select_query = NULL;
1857 select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
1859 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
1860 SQLITE3_SAFE_FREE(select_query);
1861 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1863 if (sqlite3_step(stmt) == SQLITE_ROW) {
1864 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) {
1865 if (!SAFE_STRLCPY(storage_id, (const char *)sqlite3_column_text(stmt, 0), MEDIA_CONTENT_UUID_SIZE+1)) {
1866 media_content_error("Storage id copy fail");
1867 ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION;
1871 media_content_error("There's no media!!");
1872 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1875 SQLITE3_FINALIZE(stmt);
1880 #ifdef _USE_TV_PROFILE
1882 MEDIA_UHD_MEDIA_ID = 0,
1883 MEDIA_UHD_STORAGE_ID,
1886 MEDIA_UHD_CONTENT_ID,
1887 MEDIA_UHD_CONTENT_TITLE,
1888 MEDIA_UHD_FILE_NAME,
1889 MEDIA_UHD_FOLDER_ID,
1890 MEDIA_UHD_RELEASE_DATE,
1891 MEDIA_UHD_MODIFIED_TIME,
1892 MEDIA_UHD_PLAYED_POSITION,
1894 MEDIA_UHD_PLAYED_COUNT,
1895 } media_uhd_field_e;
1897 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
1899 media_uhd_s *_uhd = (media_uhd_s*)uhd;
1901 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID)))
1902 _uhd->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID));
1904 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID)))
1905 _uhd->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID));
1907 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH)))
1908 _uhd->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH));
1910 _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE);
1912 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID)))
1913 _uhd->content_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID));
1915 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE)))
1916 _uhd->content_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE));
1918 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME)))
1919 _uhd->file_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME));
1921 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE)))
1922 _uhd->release_date = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE));
1924 _uhd->modified_time = (int)sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
1925 _uhd->played_position = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
1926 _uhd->sub_type = (int)sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
1927 _uhd->played_count = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
1932 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
1934 int ret = MEDIA_CONTENT_ERROR_NONE;
1935 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1936 char *condition_query = NULL;
1937 char *option_query = NULL;
1938 sqlite3_stmt *stmt = NULL;
1939 attribute_h attr = NULL;
1940 filter_s *_filter = (filter_s*)filter;
1942 attr = _content_get_attirbute_handle();
1943 memset(select_query, 0x00, sizeof(select_query));
1945 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1946 snprintf(select_query, sizeof(select_query), SELECT_UHD_LIST_BY_STORAGE_ID, _filter->storage_id);
1948 SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
1950 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1951 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1953 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1954 SAFE_FREE(condition_query);
1955 SAFE_FREE(option_query);
1956 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1958 while (sqlite3_step(stmt) == SQLITE_ROW) {
1959 media_uhd_s *_uhd = (media_uhd_s*)calloc(1, sizeof(media_uhd_s));
1962 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1963 SQLITE3_FINALIZE(stmt);
1964 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1967 _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd);
1969 if (callback((media_uhd_h)_uhd, user_data) == false) {
1970 media_uhd_destroy((media_uhd_h) _uhd);
1973 media_uhd_destroy((media_uhd_h) _uhd);
1976 SQLITE3_FINALIZE(stmt);