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>
21 static char * __media_db_get_group_name(media_group_e group);
22 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);
24 static char * __media_db_get_group_name(media_group_e group)
27 case MEDIA_CONTENT_GROUP_DISPLAY_NAME:
28 return (char *)DB_FIELD_MEDIA_DISPLAY_NAME;
29 case MEDIA_CONTENT_GROUP_TYPE:
30 return (char *)DB_FIELD_MEDIA_TYPE;
31 case MEDIA_CONTENT_GROUP_MIME_TYPE:
32 return (char *) DB_FIELD_MEDIA_MIME_TYPE;
33 case MEDIA_CONTENT_GROUP_SIZE:
34 return (char *) DB_FIELD_MEDIA_SIZE;
35 case MEDIA_CONTENT_GROUP_ADDED_TIME:
36 return (char *) DB_FIELD_MEDIA_ADDED_TIME;
37 case MEDIA_CONTENT_GROUP_MODIFIED_TIME:
38 return (char *) DB_FIELD_MEDIA_MODIFIED_TIME;
39 case MEDIA_CONTENT_GROUP_TITLE:
40 return (char *) DB_FIELD_MEDIA_TITLE;
41 case MEDIA_CONTENT_GROUP_ARTIST:
42 return (char *) DB_FIELD_MEDIA_ARTIST;
43 case MEDIA_CONTENT_GROUP_ALBUM_ARTIST:
44 return (char *) DB_FIELD_MEDIA_ALBUM_ARTIST;
45 case MEDIA_CONTENT_GROUP_GENRE:
46 return (char *) DB_FIELD_MEDIA_GENRE;
47 case MEDIA_CONTENT_GROUP_COMPOSER:
48 return (char *) DB_FIELD_MEDIA_COMPOSER;
49 case MEDIA_CONTENT_GROUP_YEAR:
50 return (char *) DB_FIELD_MEDIA_YEAR;
51 case MEDIA_CONTENT_GROUP_RECORDED_DATE:
52 return (char *) DB_FIELD_MEDIA_RECORDED_DATE;
53 case MEDIA_CONTENT_GROUP_COPYRIGHT:
54 return (char *) DB_FIELD_MEDIA_COPYRIGHT;
55 case MEDIA_CONTENT_GROUP_TRACK_NUM:
56 return (char *) DB_FIELD_MEDIA_TRACK_NUM;
57 case MEDIA_CONTENT_GROUP_DESCRIPTION:
58 return (char *) DB_FIELD_MEDIA_DESCRIPTION;
59 case MEDIA_CONTENT_GROUP_LONGITUDE:
60 return (char *) DB_FIELD_MEDIA_LONGITUDE;
61 case MEDIA_CONTENT_GROUP_LATITUDE:
62 return (char *) DB_FIELD_MEDIA_LATITUDE;
63 case MEDIA_CONTENT_GROUP_ALTITUDE:
64 return (char *) DB_FIELD_MEDIA_ALTITUDE;
65 case MEDIA_CONTENT_GROUP_BURST_IMAGE:
66 return (char *) DB_FIELD_MEDIA_BURST_ID;
67 case MEDIA_CONTENT_GROUP_RATING:
68 return (char *) DB_FIELD_MEDIA_RATING;
69 case MEDIA_CONTENT_GROUP_AUTHOR:
70 return (char *) DB_FIELD_MEDIA_AUTHOR;
71 case MEDIA_CONTENT_GROUP_PROVIDER:
72 return (char *) DB_FIELD_MEDIA_PROVIDER;
73 case MEDIA_CONTENT_GROUP_CONTENT_NAME:
74 return (char *) DB_FIELD_MEDIA_CONTENT_NAME;
75 case MEDIA_CONTENT_GROUP_CATEGORY:
76 return (char *) DB_FIELD_MEDIA_CATEGORY;
77 case MEDIA_CONTENT_GROUP_LOCATION_TAG:
78 return (char *) DB_FIELD_MEDIA_LOCATION_TAG;
79 case MEDIA_CONTENT_GROUP_AGE_RATING:
80 return (char *) DB_FIELD_MEDIA_AGE_RATING;
81 case MEDIA_CONTENT_GROUP_KEYWORD:
82 return (char *) DB_FIELD_MEDIA_KEYWORD;
83 case MEDIA_CONTENT_GROUP_WEATHER:
84 return (char *) DB_FIELD_MEDIA_WEATHER;
85 #ifdef _USE_TV_PROFILE
86 case MEDIA_CONTENT_GROUP_MODIFIED_MONTH:
87 return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
88 case MEDIA_CONTENT_GROUP_MODIFIED_DATE:
89 return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
91 #ifdef _USE_SENIOR_MODE
92 case MEDIA_CONTENT_GROUP_CONTACT:
93 return (char *) DB_FIELD_MEDIA_CONTACT;
95 #ifdef _USE_TV_PROFILE
96 case MEDIA_CONTENT_GROUP_ALBUM:
97 return (char *) DB_FIELD_MEDIA_ALBUM;
98 case MEDIA_PVR_GROUP_DURATION:
99 return (char *) DB_FIELD_PVR_DURATION;
100 case MEDIA_PVR_GROUP_TIME_ZONE:
101 return (char *) DB_FIELD_PVR_TIME_ZONE;
102 case MEDIA_PVR_GROUP_PTC:
103 return (char *) DB_FIELD_PVR_PTC;
104 case MEDIA_PVR_GROUP_MAJOR:
105 return (char *) DB_FIELD_PVR_MAJOR;
106 case MEDIA_PVR_GROUP_MINOR:
107 return (char *) DB_FIELD_PVR_MINOR;
108 case MEDIA_PVR_GROUP_CHANNEL_TYPE:
109 return (char *) DB_FIELD_PVR_CHANNEL_TYPE;
110 case MEDIA_PVR_GROUP_CHANNEL_NAME:
111 return (char *) DB_FIELD_PVR_CHANNEL_NAME;
112 case MEDIA_PVR_GROUP_CHANNEL_NUM:
113 return (char *) DB_FIELD_PVR_CHANNEL_NUM;
114 case MEDIA_PVR_GROUP_PROGRAM_TITLE:
115 return (char *) DB_FIELD_PVR_PROGRAM_TITLE;
116 case MEDIA_PVR_GROUP_PROGRAM_NUM:
117 return (char *) DB_FIELD_PVR_PROGRAM_NUM;
118 case MEDIA_PVR_GROUP_PROGRAM_CRID:
119 return (char *) DB_FIELD_PVR_PROGRAM_CRID;
120 case MEDIA_PVR_GROUP_GUIDANCE:
121 return (char *) DB_FIELD_PVR_GUIDANCE;
122 case MEDIA_PVR_GROUP_SYNOPSIS:
123 return (char *) DB_FIELD_PVR_SYNOPSIS;
124 case MEDIA_PVR_GROUP_GENRE:
125 return (char *) DB_FIELD_PVR_GENRE;
126 case MEDIA_PVR_GROUP_LANGUAGE:
127 return (char *) DB_FIELD_PVR_LANGUAGE;
128 case MEDIA_PVR_GROUP_EMBARGO_TIME:
129 return (char *) DB_FIELD_PVR_EMBARGO_TIME;
130 case MEDIA_PVR_GROUP_EXPIRY_TIME:
131 return (char *) DB_FIELD_PVR_EXPIRY_TIME;
132 case MEDIA_PVR_GROUP_START_TIME:
133 return (char *) DB_FIELD_PVR_START_TIME;
134 case MEDIA_PVR_GROUP_PROGRAM_START_TIME:
135 return (char *) DB_FIELD_PVR_PROGRAM_START_TIME;
136 case MEDIA_PVR_GROUP_PROGRAM_END_TIME:
137 return (char *) DB_FIELD_PVR_PROGRAM_END_TIME;
138 case MEDIA_PVR_GROUP_PROGRAM_DATE:
139 return (char *) DB_FIELD_PVR_PROGRAM_DATE;
140 case MEDIA_PVR_GROUP_PARENTAL_RATING:
141 return (char *) DB_FIELD_PVR_PARENTAL_RATING;
142 case MEDIA_PVR_GROUP_TIMER_RECORD:
143 return (char *) DB_FIELD_PVR_TIMER_RECORD;
144 case MEDIA_PVR_GROUP_SERIES_RECORD:
145 return (char *) DB_FIELD_PVR_SERIES_RECORD;
146 case MEDIA_PVR_GROUP_HD:
147 return (char *) DB_FIELD_PVR_HD;
148 case MEDIA_PVR_GROUP_SUBTITLE:
149 return (char *) DB_FIELD_PVR_SUBTITLE;
150 case MEDIA_PVR_GROUP_TTX:
151 return (char *) DB_FIELD_PVR_TTX;
152 case MEDIA_PVR_GROUP_AD:
153 return (char *) DB_FIELD_PVR_AD;
154 case MEDIA_PVR_GROUP_HARDOF_HEARINGRADIO:
155 return (char *) DB_FIELD_PVR_HARDOF_HEARINGRADIO;
156 case MEDIA_PVR_GROUP_DATA_SERVICE:
157 return (char *) DB_FIELD_PVR_DATA_SERVICE;
158 case MEDIA_PVR_GROUP_CONTENT_LOCK:
159 return (char *) DB_FIELD_PVR_CONTENT_LOCK;
160 case MEDIA_PVR_GROUP_CONTENT_WATCH:
161 return (char *) DB_FIELD_PVR_CONTENT_WATCH;
162 case MEDIA_PVR_GROUP_HAS_AUDIO_ONLY:
163 return (char *) DB_FIELD_PVR_HAS_AUDIO_ONLY;
164 case MEDIA_PVR_GROUP_IS_LOCAL_RECORDED:
165 return (char *) DB_FIELD_PVR_IS_LOCAL_RECORD;
166 case MEDIA_PVR_GROUP_RESOLUTION:
167 return (char *) DB_FIELD_PVR_RESOLUTION;
168 case MEDIA_PVR_GROUP_ASPECTRATIO:
169 return (char *) DB_FIELD_PVR_ASPECTRATIO;
170 case MEDIA_PVR_GROUP_MODIFIED_MONTH:
171 return (char *) DB_FIELD_PVR_MODIFIED_DATE;
172 case MEDIA_PVR_GROUP_MODIFIED_DATE:
173 return (char *) DB_FIELD_PVR_MODIFIED_DATE;
174 case MEDIA_PVR_GROUP_SPORTS_TYPE:
175 return (char *) DB_FIELD_PVR_SPORTS_TYPE;
176 case MEDIA_PVR_GROUP_GUIDANCE_LENGTH:
177 return (char *) DB_FIELD_PVR_GUIDANCE_LENGTH;
178 case MEDIA_PVR_GROUP_TVMODE:
179 return (char *) DB_FIELD_PVR_TVMODE;
180 case MEDIA_PVR_GROUP_PLAY_COUNT:
181 return (char *) DB_FIELD_PVR_PLAY_COUNT;
182 case MEDIA_PVR_GROUP_PRIVATE_DATA:
183 return (char *) DB_FIELD_PVR_PRIVATE_DATA;
184 case MEDIA_UHD_GROUP_CONTENT_TITLE:
185 return (char *) DB_FIELD_UHD_CONTENT_TITLE;
186 case MEDIA_UHD_GROUP_RELEASE_DATE:
187 return (char *) DB_FIELD_UHD_RELEASE_DATE;
188 case MEDIA_UHD_GROUP_SUB_TYPE:
189 return (char *) DB_FIELD_UHD_SUB_TYPE;
190 case MEDIA_UHD_GROUP_FILE_NAME:
191 return (char *) DB_FIELD_UHD_FILE_NAME;
192 case MEDIA_UHD_GROUP_PLAYED_COUNT:
193 return (char *) DB_FIELD_UHD_PLAYED_COUNT;
202 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)
204 int ret = MEDIA_CONTENT_ERROR_NONE;
205 filter_s *_filter = NULL;
206 #ifdef _USE_TV_PROFILE
207 g_mutex_lock(_content_get_db_mutex());
209 if (filter != NULL) {
210 _filter = (filter_s*)filter;
212 if (STRING_VALID(_filter->condition)) {
213 /*bracket should be added to condition. If application use "OR" condition, F/W restriction condition like "validity=1" is disregared
214 ex) select path from media where validity=1 and media_type=3 or media_type=1;*/
215 char bracket_added_condition[MAX_QUERY_SIZE] = {0, };
216 memset(bracket_added_condition, 0x00, sizeof(bracket_added_condition));
218 SAFE_STRLCAT(bracket_added_condition, QUERY_KEYWORD_OPEN_BRACKET, MAX_QUERY_SIZE);
219 SAFE_STRLCAT(bracket_added_condition, _filter->condition, MAX_QUERY_SIZE);
220 SAFE_STRLCAT(bracket_added_condition, QUERY_KEYWORD_BRACKET, MAX_QUERY_SIZE);
222 ret = _media_filter_attribute_generate(attr, bracket_added_condition, _filter->condition_collate_type, condition_query);
223 #ifdef _USE_TV_PROFILE
224 if (ret != MEDIA_CONTENT_ERROR_NONE) {
225 g_mutex_unlock(_content_get_db_mutex());
229 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
233 ret = _media_filter_attribute_option_generate(attr, filter, option_query);
234 if (ret != MEDIA_CONTENT_ERROR_NONE) {
235 SAFE_FREE(*condition_query);
236 #ifdef _USE_TV_PROFILE
237 g_mutex_unlock(_content_get_db_mutex());
242 if (STRING_VALID(*condition_query)) {
243 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, select_query_size);
244 SAFE_STRLCAT(select_query, QUERY_KEYWORD_AND, select_query_size);
247 #ifdef _USE_TV_PROFILE
248 g_mutex_unlock(_content_get_db_mutex());
254 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
256 int ret = MEDIA_CONTENT_ERROR_NONE;
257 sqlite3_stmt *stmt = NULL;
258 char select_query[MAX_QUERY_SIZE] = {0, };
259 char *condition_query = NULL;
260 char *option_query = NULL;
261 attribute_h attr = NULL;
262 filter_s *_filter = (filter_s*)filter;
264 attr = _content_get_attirbute_handle();
265 memset(select_query, 0x00, sizeof(select_query));
267 switch (group_type) {
268 case MEDIA_GROUP_NONE:
269 case MEDIA_GROUP_TAG_BY_MEDIA_ID:
270 case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
272 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
273 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
276 case MEDIA_GROUP_ALBUM:
277 attr = _content_get_alias_attirbute_handle();
279 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
280 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id);
282 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_TABLE_MEDIA_VIEW);
285 case MEDIA_GROUP_FOLDER:
286 attr = _content_get_alias_attirbute_handle();
287 if (!SAFE_STRLCPY(select_query, SELECT_FOLDER_COUNT, sizeof(select_query))) {
288 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
289 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
292 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
293 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
295 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_TABLE_MEDIA_VIEW);
298 case MEDIA_GROUP_PLAYLIST:
299 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) {
300 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
301 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
304 case MEDIA_GROUP_TAG:
305 if (!SAFE_STRLCPY(select_query, SELECT_TAG_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_BOOKMARK:
311 attr = _content_get_alias_attirbute_handle();
313 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
314 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id);
316 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_TABLE_MEDIA_VIEW);
319 case MEDIA_GROUP_STORAGE:
320 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) {
321 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
322 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
325 #ifdef _USE_TV_PROFILE
326 case MEDIA_GROUP_PVR:
327 case MEDIA_GROUP_UHD:
331 media_content_error("Invalid group type [%d]", group_type);
332 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
337 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
338 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
340 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
341 SAFE_FREE(condition_query);
342 SAFE_FREE(option_query);
343 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
345 while (sqlite3_step(stmt) == SQLITE_ROW)
346 *group_count = (int)sqlite3_column_int(stmt, 0);
348 SQLITE3_FINALIZE(stmt);
353 int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
355 int ret = MEDIA_CONTENT_ERROR_NONE;
356 sqlite3_stmt *stmt = NULL;
357 char select_query[MAX_QUERY_SIZE] = {0, };
358 char *condition_query = NULL;
359 char *option_query = NULL;
360 attribute_h attr = NULL;
361 filter_s *_filter = (filter_s*)filter;
363 attr = _content_get_attirbute_handle();
364 memset(select_query, 0x00, sizeof(select_query));
365 #ifdef _USE_TV_PROFILE
366 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
367 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
368 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
370 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
371 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content*/
372 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
373 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
375 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT, __media_db_get_group_name(group));
376 } else { /*uhd content*/
377 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
378 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
380 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group));
383 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
384 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
386 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
388 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
389 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
391 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
392 if (STRING_VALID(condition_query))
393 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
394 if (STRING_VALID(option_query))
395 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
396 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
398 SAFE_FREE(condition_query);
399 SAFE_FREE(option_query);
401 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
402 SAFE_FREE(condition_query);
403 SAFE_FREE(option_query);
404 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
406 while (sqlite3_step(stmt) == SQLITE_ROW)
407 *group_count = (int)sqlite3_column_int(stmt, 0);
409 SQLITE3_FINALIZE(stmt);
414 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
416 int ret = MEDIA_CONTENT_ERROR_NONE;
417 char select_query[MAX_QUERY_SIZE] = {0, };
418 char *condition_query = NULL;
419 char *option_query = NULL;
421 sqlite3_stmt *stmt = NULL;
422 attribute_h attr = NULL;
423 filter_s *_filter = (filter_s*)filter;
425 attr = _content_get_attirbute_handle();
426 memset(select_query, 0x00, sizeof(select_query));
427 #ifdef _USE_TV_PROFILE
428 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
429 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
430 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
432 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
433 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content */
434 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
435 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
437 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST, __media_db_get_group_name(group));
438 } else { /* uhd content */
439 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
440 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
442 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group));
445 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
446 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
448 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
450 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
451 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
453 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
454 SAFE_FREE(condition_query);
455 SAFE_FREE(option_query);
456 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
458 while (sqlite3_step(stmt) == SQLITE_ROW) {
459 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
461 if (callback(name, user_data) == false) {
469 SQLITE3_FINALIZE(stmt);
473 #ifdef _USE_TV_PROFILE
474 int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, media_group_and_count_cb callback, void *user_data)
476 int ret = MEDIA_CONTENT_ERROR_NONE;
477 char select_query[DEFAULT_QUERY_SIZE];
478 char group_query[DEFAULT_QUERY_SIZE];
479 char *condition_query = NULL;
480 char *option_query = NULL;
482 sqlite3_stmt *stmt = NULL;
483 attribute_h attr = NULL;
484 filter_s *_filter = (filter_s*)filter;
486 attr = _content_get_attirbute_handle();
487 memset(select_query, 0x00, sizeof(select_query));
488 memset(group_query, 0x00, sizeof(group_query));
490 char* group_name = __media_db_get_group_name(group);
491 if (!STRING_VALID(group_name)) {
492 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
493 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
496 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
497 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
498 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, _filter->storage_id);
500 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, DB_TABLE_MEDIA_VIEW);
501 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
502 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
503 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
505 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT, group_name);
506 } else {/*uhd content*/
507 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
508 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
510 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name);
513 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
514 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
516 if (STRING_VALID(option_query))
517 snprintf(group_query, sizeof(group_query), "GROUP BY %s %s", group_name, option_query);
519 snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name);
521 ret = _content_query_prepare(&stmt, select_query, condition_query, group_query);
522 SAFE_FREE(condition_query);
523 SAFE_FREE(option_query);
524 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
526 while (sqlite3_step(stmt) == SQLITE_ROW) {
527 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
528 name = strdup((const char *)sqlite3_column_text(stmt, 0));
530 if (callback(name, sqlite3_column_int(stmt, 1), user_data) == false) {
538 SQLITE3_FINALIZE(stmt);
543 int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data)
545 int ret = MEDIA_CONTENT_ERROR_NONE;
546 char select_query[MAX_QUERY_SIZE] = {0, };
547 char *condition_query = NULL;
548 char *option_query = NULL;
549 sqlite3_stmt *stmt = NULL;
550 attribute_h attr = NULL;
551 filter_s *_filter = (filter_s*)filter;
553 attr = _content_get_alias_attirbute_handle();
554 memset(select_query, 0x00, sizeof(select_query));
556 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
557 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, _filter->storage_id);
559 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_TABLE_MEDIA_VIEW);
561 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
562 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
564 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
565 SAFE_FREE(condition_query);
566 SAFE_FREE(option_query);
567 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
569 while (sqlite3_step(stmt) == SQLITE_ROW) {
570 media_album_s *album = (media_album_s*)calloc(1, sizeof(media_album_s));
573 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
574 SQLITE3_FINALIZE(stmt);
575 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
578 album->album_id = (int)sqlite3_column_int(stmt, 0);
579 album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
580 album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2));
581 album->album_art_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
583 if (callback((media_album_h)album, user_data) == false) {
584 media_album_destroy((media_album_h)album);
588 media_album_destroy((media_album_h)album);
591 SQLITE3_FINALIZE(stmt);
596 int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_data)
598 int ret = MEDIA_CONTENT_ERROR_NONE;
599 char select_query[MAX_QUERY_SIZE] = {0, };
600 char *condition_query = NULL;
601 char *option_query = NULL;
602 sqlite3_stmt *stmt = NULL;
603 attribute_h attr = NULL;
604 filter_s *_filter = (filter_s*)filter;
606 attr = _content_get_alias_attirbute_handle();
607 memset(select_query, 0x00, sizeof(select_query));
609 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
610 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
612 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_TABLE_MEDIA_VIEW);
614 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
615 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
617 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
619 SAFE_FREE(condition_query);
620 SAFE_FREE(option_query);
621 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
623 while (sqlite3_step(stmt) == SQLITE_ROW) {
624 media_folder_s *_folder = (media_folder_s*)calloc(1, sizeof(media_folder_s));
626 if (_folder == NULL) {
627 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
628 SQLITE3_FINALIZE(stmt);
629 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
632 _folder->folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
633 _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
634 _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
635 _folder->storage_type = (int)sqlite3_column_int(stmt, 3);
636 _folder->modified_time = (int)sqlite3_column_int(stmt, 4);
637 _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 5));
638 _folder->folder_order = (int)sqlite3_column_int(stmt, 6);
639 _folder->parent_folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 7));
641 if (callback((media_folder_h)_folder, user_data) == false) {
642 media_folder_destroy((media_folder_h) _folder);
646 media_folder_destroy((media_folder_h) _folder);
649 SQLITE3_FINALIZE(stmt);
654 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
656 int ret = MEDIA_CONTENT_ERROR_NONE;
657 char select_query[MAX_QUERY_SIZE] = {0, };
658 char *condition_query = NULL;
659 char *option_query = NULL;
660 sqlite3_stmt *stmt = NULL;
661 attribute_h attr = NULL;
663 attr = _content_get_attirbute_handle();
664 memset(select_query, 0x00, sizeof(select_query));
666 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_LIST, sizeof(select_query))) {
667 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
668 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
671 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
672 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
674 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
675 SAFE_FREE(condition_query);
676 SAFE_FREE(option_query);
677 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
679 while (sqlite3_step(stmt) == SQLITE_ROW) {
680 media_playlist_s *_playlist = (media_playlist_s*)calloc(1, sizeof(media_playlist_s));
682 if (_playlist == NULL) {
683 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
684 SQLITE3_FINALIZE(stmt);
685 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
688 _playlist->playlist_id = (int)sqlite3_column_int(stmt, 0);
689 _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
690 _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
692 if (callback((media_playlist_h)_playlist, user_data) == false) {
693 media_playlist_destroy((media_playlist_h)_playlist);
696 media_playlist_destroy((media_playlist_h)_playlist);
699 SQLITE3_FINALIZE(stmt);
704 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
706 int ret = MEDIA_CONTENT_ERROR_NONE;
707 char select_query[MAX_QUERY_SIZE] = {0, };
708 char *condition_query = NULL;
709 char *option_query = NULL;
710 sqlite3_stmt *stmt = NULL;
711 attribute_h attr = NULL;
713 attr = _content_get_attirbute_handle();
714 memset(select_query, 0x00, sizeof(select_query));
716 /*snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ID_FROM_PLAYLIST_VIEW, playlist_id);*/
717 snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
719 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
720 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
722 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
723 SAFE_FREE(condition_query);
724 SAFE_FREE(option_query);
725 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
727 while (sqlite3_step(stmt) == SQLITE_ROW) {
728 int playlist_member_id = 0;
729 playlist_member_id = (int)sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX); /*MEDIA_INFO_ITEM_MAX is pm_id*/
731 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
733 if (_media == NULL) {
734 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
735 SQLITE3_FINALIZE(stmt);
736 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
739 _media_info_item_get_detail(stmt, (media_info_h)_media);
741 if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) {
742 media_info_destroy((media_info_h)_media);
745 media_info_destroy((media_info_h)_media);
749 SQLITE3_FINALIZE(stmt);
754 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
756 int ret = MEDIA_CONTENT_ERROR_NONE;
757 char select_query[MAX_QUERY_SIZE] = {0, };
758 char *condition_query = NULL;
759 char *option_query = NULL;
760 sqlite3_stmt *stmt = NULL;
761 attribute_h attr = NULL;
763 attr = _content_get_attirbute_handle();
764 memset(select_query, 0x00, sizeof(select_query));
766 if (!STRING_VALID(media_id)) {
767 if (!SAFE_STRLCPY(select_query, SELECT_TAG_LIST, sizeof(select_query))) {
768 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
769 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
772 snprintf(select_query, sizeof(select_query), SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
774 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
775 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
777 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
779 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
780 SAFE_FREE(condition_query);
781 SAFE_FREE(option_query);
782 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
784 while (sqlite3_step(stmt) == SQLITE_ROW) {
785 media_tag_s *_tag = (media_tag_s*)calloc(1, sizeof(media_tag_s));
788 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
789 SQLITE3_FINALIZE(stmt);
790 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
793 _tag->tag_id = (int)sqlite3_column_int(stmt, 0);
794 _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
796 if (callback((media_tag_h)_tag, user_data) == false) {
797 media_tag_destroy((media_tag_h)_tag);
800 media_tag_destroy((media_tag_h)_tag);
803 SQLITE3_FINALIZE(stmt);
808 int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
810 int ret = MEDIA_CONTENT_ERROR_NONE;
811 char select_query[MAX_QUERY_SIZE] = {0, };
812 char *condition_query = NULL;
813 char *option_query = NULL;
814 sqlite3_stmt *stmt = NULL;
815 attribute_h attr = NULL;
816 filter_s *_filter = (filter_s*)filter;
818 attr = _content_get_attirbute_handle();
820 memset(select_query, 0x00, sizeof(select_query));
822 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
823 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
825 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, media_id);
827 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
828 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
830 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
831 SAFE_FREE(condition_query);
832 SAFE_FREE(option_query);
833 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
835 while (sqlite3_step(stmt) == SQLITE_ROW) {
836 media_bookmark_s *bookmark = (media_bookmark_s*)calloc(1, sizeof(media_bookmark_s));
838 if (bookmark == NULL) {
839 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
840 SQLITE3_FINALIZE(stmt);
841 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
844 bookmark->bookmark_id = (int)sqlite3_column_int(stmt, 0);
845 bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
846 bookmark->marked_time = (int)sqlite3_column_int(stmt, 2);
847 bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
849 if (callback((media_bookmark_h)bookmark, user_data) == false) {
850 media_bookmark_destroy((media_bookmark_h)bookmark);
854 media_bookmark_destroy((media_bookmark_h)bookmark);
857 SQLITE3_FINALIZE(stmt);
863 int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
865 int ret = MEDIA_CONTENT_ERROR_NONE;
866 char select_query[MAX_QUERY_SIZE] = {0, };
867 char *condition_query = NULL;
868 char *option_query = NULL;
869 sqlite3_stmt *stmt = NULL;
870 attribute_h attr = NULL;
871 filter_s *_filter = (filter_s*)filter;
873 attr = _content_get_attirbute_handle();
875 memset(select_query, 0x00, sizeof(select_query));
877 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
878 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
880 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, media_id);
882 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
883 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
885 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
886 SAFE_FREE(condition_query);
887 SAFE_FREE(option_query);
888 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
890 while (sqlite3_step(stmt) == SQLITE_ROW) {
891 media_face_s *face = (media_face_s*)calloc(1, sizeof(media_face_s));
894 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
895 SQLITE3_FINALIZE(stmt);
896 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
899 face->face_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
900 face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
901 face->face_rect_x = (int)sqlite3_column_int(stmt, 2);
902 face->face_rect_y = (int)sqlite3_column_int(stmt, 3);
903 face->face_rect_w = (int)sqlite3_column_int(stmt, 4);
904 face->face_rect_h = (int)sqlite3_column_int(stmt, 5);
905 face->orientation = (int)sqlite3_column_int(stmt, 6);
906 face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7));
908 if (callback((media_face_h)face, user_data) == false) {
909 media_face_destroy((media_face_h)face);
913 media_face_destroy((media_face_h)face);
916 SQLITE3_FINALIZE(stmt);
922 int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_list_e group_type, int *item_count)
924 int ret = MEDIA_CONTENT_ERROR_NONE;
925 sqlite3_stmt *stmt = NULL;
926 char select_query[MAX_QUERY_SIZE] = {0, };
927 char *condition_query = NULL;
928 char *option_query = NULL;
929 attribute_h attr = NULL;
930 filter_s *_filter = (filter_s*)filter;
932 attr = _content_get_attirbute_handle();
933 memset(select_query, 0x00, sizeof(select_query));
935 if (group_type == MEDIA_GROUP_ALBUM) {
936 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
937 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id);
939 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, DB_TABLE_MEDIA_VIEW, group_id);
940 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
941 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id);
942 } else if (group_type == MEDIA_GROUP_TAG) {
943 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_TAG, group_id);
945 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
946 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
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 *item_count = (int)sqlite3_column_int(stmt, 0);
960 SQLITE3_FINALIZE(stmt);
965 int _media_db_get_group_item_count(const char *group_name, filter_h filter, group_list_e group_type, int *item_count)
967 int ret = MEDIA_CONTENT_ERROR_NONE;
968 sqlite3_stmt *stmt = NULL;
969 char select_query[MAX_QUERY_SIZE] = {0, };
970 char *tmp_query = NULL;
971 char *condition_query = NULL;
972 char *option_query = NULL;
973 bool is_simple = FALSE;
974 attribute_h attr = NULL;
975 filter_s *_filter = (filter_s*)filter;
977 attr = _content_get_attirbute_handle();
978 memset(select_query, 0x00, sizeof(select_query));
980 if (group_type == MEDIA_GROUP_NONE) {
981 /* There are 2 ways to get count for media table for performance
982 If user wants to set offset and count, use SQL SELECT_MEDIA_COUNT_FROM_MEDIA.
983 If user wants to get count without setting count, SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE */
984 if (_filter && ((_filter->offset < 0) && (_filter->count < 0))) {
985 if (STRING_VALID(_filter->storage_id))
986 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
988 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_TABLE_MEDIA_VIEW);
991 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_TABLE_MEDIA_VIEW);
993 } else if (group_type == MEDIA_GROUP_FOLDER) {
994 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
995 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
997 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
999 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1000 } else if (group_type == MEDIA_GROUP_TAG_BY_MEDIA_ID) {
1001 snprintf(select_query, sizeof(select_query), SELECT_TAG_COUNT_BY_MEDIA_ID, group_name);
1002 } else if (group_type == MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID) {
1003 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1004 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1006 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, group_name);
1008 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1009 } else if (group_type == MEDIA_GROUP_STORAGE) {
1010 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_STORAGE, group_name, group_name);
1012 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1013 } else if (group_type == MEDIA_GROUP_FACE_BY_MEDIA_ID) {
1014 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1015 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1017 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, group_name);
1019 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1020 #ifdef _USE_TV_PROFILE
1021 } else if (group_type == MEDIA_GROUP_PVR) {
1022 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1023 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id);
1025 SAFE_STRLCAT(select_query, SELECT_PVR_COUNT, sizeof(select_query));
1026 } else if (group_type == MEDIA_GROUP_UHD) {
1027 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1028 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id);
1030 SAFE_STRLCAT(select_query, SELECT_UHD_COUNT, sizeof(select_query));
1033 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1034 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1037 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1038 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1039 if (tmp_query != NULL)
1040 SQLITE3_SAFE_FREE(tmp_query);
1044 if (group_type == MEDIA_GROUP_NONE) {
1045 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1046 if (STRING_VALID(condition_query))
1047 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1048 if (STRING_VALID(option_query))
1049 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1052 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1054 SAFE_FREE(condition_query);
1055 SAFE_FREE(option_query);
1058 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1059 if (tmp_query != NULL)
1060 SQLITE3_SAFE_FREE(tmp_query);
1061 SAFE_FREE(condition_query);
1062 SAFE_FREE(option_query);
1063 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1065 while (sqlite3_step(stmt) == SQLITE_ROW)
1066 *item_count = (int)sqlite3_column_int(stmt, 0);
1068 SQLITE3_FINALIZE(stmt);
1073 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)
1075 int ret = MEDIA_CONTENT_ERROR_NONE;
1076 char select_query[MAX_QUERY_SIZE] = {0, };
1077 char *condition_query = NULL;
1078 char *option_query = NULL;
1079 sqlite3_stmt *stmt = NULL;
1080 attribute_h attr = NULL;
1081 filter_s *_filter = (filter_s*)filter;
1083 attr = _content_get_attirbute_handle();
1084 memset(select_query, 0x00, sizeof(select_query));
1086 if (group_type == MEDIA_GROUP_ALBUM) {
1087 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1088 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id);
1090 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, DB_TABLE_MEDIA_VIEW, group_id);
1091 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
1092 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1093 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id);
1095 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, DB_TABLE_MEDIA_VIEW, group_id);
1096 } else if (group_type == MEDIA_GROUP_TAG) {
1097 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1098 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id);
1100 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_TABLE_MEDIA_VIEW, group_id);
1102 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1103 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1106 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1107 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1109 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1110 SAFE_FREE(condition_query);
1111 SAFE_FREE(option_query);
1112 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1114 while (sqlite3_step(stmt) == SQLITE_ROW) {
1115 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1117 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1118 SQLITE3_FINALIZE(stmt);
1119 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1122 _media_info_item_get_detail(stmt, (media_info_h)item);
1124 if (callback((media_info_h)item, user_data) == false) {
1125 media_info_destroy((media_info_h)item);
1129 media_info_destroy((media_info_h)item);
1132 SQLITE3_FINALIZE(stmt);
1137 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)
1139 int ret = MEDIA_CONTENT_ERROR_NONE;
1140 char select_query[MAX_QUERY_SIZE] = {0, };
1141 char *condition_query = NULL;
1142 char *option_query = NULL;
1143 sqlite3_stmt *stmt = NULL;
1144 attribute_h attr = NULL;
1145 filter_s *_filter = (filter_s*)filter;
1147 attr = _content_get_attirbute_handle();
1148 memset(select_query, 0x00, sizeof(select_query));
1150 if (group_type == MEDIA_GROUP_NONE) {
1151 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1152 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, _filter->storage_id);
1154 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, DB_TABLE_MEDIA_VIEW);
1155 } else if (group_type == MEDIA_GROUP_FOLDER) {
1156 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1157 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name);
1159 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1160 } else if (group_type == MEDIA_GROUP_STORAGE) {
1161 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name, group_name);
1163 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1164 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1167 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1168 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1170 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1171 SAFE_FREE(condition_query);
1172 SAFE_FREE(option_query);
1173 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1175 while (sqlite3_step(stmt) == SQLITE_ROW) {
1176 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1178 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1179 SQLITE3_FINALIZE(stmt);
1180 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1183 _media_info_item_get_detail(stmt, (media_info_h)item);
1185 if (callback((media_info_h)item, user_data) == false) {
1186 media_info_destroy((media_info_h)item);
1190 media_info_destroy((media_info_h)item);
1193 SQLITE3_FINALIZE(stmt);
1198 #ifdef _USE_SENIOR_MODE
1199 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)
1201 int ret = MEDIA_CONTENT_ERROR_NONE;
1202 char select_query1[MAX_QUERY_SIZE] = {0, };
1203 char *condition_query1 = NULL;
1204 char *option_query1 = NULL;
1205 char select_query2[MAX_QUERY_SIZE] = {0, };
1206 char *condition_query2 = NULL;
1207 char *option_query2 = NULL;
1208 sqlite3_stmt *stmt = NULL;
1209 attribute_h attr = NULL;
1210 filter_s *_filter1 = (filter_s*)filter1;
1211 filter_s *_filter2 = (filter_s*)filter2;
1213 attr = _content_get_attirbute_handle();
1215 memset(select_query1, 0x00, sizeof(select_query1));
1217 if ((_filter1 != NULL) && STRING_VALID(_filter1->storage_id))
1218 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, _filter1->storage_id, group_name);
1220 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1222 ret = __media_db_make_query(filter1, attr, select_query1, sizeof(select_query1), &condition_query1, &option_query1);
1223 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1224 SAFE_FREE(condition_query1);
1225 SAFE_FREE(option_query1);
1226 media_content_error("create select_query1 failed");
1230 memset(select_query2, 0x00, sizeof(select_query2));
1232 if ((_filter2 != NULL) && STRING_VALID(_filter2->storage_id))
1233 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, _filter2->storage_id, group_name);
1235 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1237 ret = __media_db_make_query(filter2, attr, select_query2, sizeof(select_query2), &condition_query2, &option_query2);
1238 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1239 SAFE_FREE(condition_query1);
1240 SAFE_FREE(option_query1);
1241 SAFE_FREE(condition_query2);
1242 SAFE_FREE(option_query2);
1243 media_content_error("create select_query2 failed");
1247 ret = _content_query_prepare_by_union_select(&stmt, select_query1, condition_query1, option_query1, select_query2, condition_query2, option_query2);
1248 SAFE_FREE(condition_query1);
1249 SAFE_FREE(option_query1);
1250 SAFE_FREE(condition_query2);
1251 SAFE_FREE(option_query2);
1252 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1254 while (sqlite3_step(stmt) == SQLITE_ROW) {
1255 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1257 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1258 SQLITE3_FINALIZE(stmt);
1259 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1262 _media_info_item_get_detail(stmt, (media_info_h)item);
1264 if (callback((media_info_h)item, user_data) == false) {
1265 media_info_destroy((media_info_h)item);
1269 media_info_destroy((media_info_h)item);
1272 SQLITE3_FINALIZE(stmt);
1278 int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count)
1280 int ret = MEDIA_CONTENT_ERROR_NONE;
1281 sqlite3_stmt *stmt = NULL;
1282 char select_query[MAX_QUERY_SIZE] = {0, };
1283 char *tmp_query = NULL;
1284 char *condition_query = NULL;
1285 char *option_query = NULL;
1286 attribute_h attr = NULL;
1287 filter_s *_filter = (filter_s*)filter;
1289 attr = _content_get_attirbute_handle();
1290 memset(select_query, 0x00, sizeof(select_query));
1291 #ifdef _USE_TV_PROFILE
1292 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
1293 if (group_name != NULL) {
1294 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1295 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1297 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1299 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1301 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1302 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1304 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1306 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
1307 if (group_name != NULL) {
1308 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1309 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1311 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1313 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1315 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1316 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1318 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1320 } else {/*uhd content*/
1321 if (group_name != NULL) {
1322 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1323 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1325 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP, __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_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1332 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1336 if (group_name != NULL) {
1337 if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) {
1338 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1339 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1341 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1342 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1345 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1346 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1348 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1351 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1352 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1353 if (tmp_query != NULL)
1354 SQLITE3_SAFE_FREE(tmp_query);
1358 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1359 if (STRING_VALID(condition_query))
1360 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1361 if (STRING_VALID(option_query))
1362 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1363 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1365 SAFE_FREE(condition_query);
1366 SAFE_FREE(option_query);
1368 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1369 if (tmp_query != NULL)
1370 SQLITE3_SAFE_FREE(tmp_query);
1371 SAFE_FREE(condition_query);
1372 SAFE_FREE(option_query);
1373 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1375 while (sqlite3_step(stmt) == SQLITE_ROW)
1376 *item_count = (int)sqlite3_column_int(stmt, 0);
1378 SQLITE3_FINALIZE(stmt);
1383 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)
1385 int ret = MEDIA_CONTENT_ERROR_NONE;
1386 char select_query[MAX_QUERY_SIZE] = {0, };
1387 char *tmp_query = NULL;
1388 char *condition_query = NULL;
1389 char *option_query = NULL;
1390 sqlite3_stmt *stmt = NULL;
1391 attribute_h attr = NULL;
1392 filter_s *_filter = (filter_s*)filter;
1394 attr = _content_get_attirbute_handle();
1395 memset(select_query, 0x00, sizeof(select_query));
1397 if (group_name != NULL) {
1398 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1399 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1401 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1403 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1405 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1406 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1408 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1411 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1412 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1413 if (tmp_query != NULL)
1414 SQLITE3_SAFE_FREE(tmp_query);
1418 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1419 if (tmp_query != NULL)
1420 SQLITE3_SAFE_FREE(tmp_query);
1421 SAFE_FREE(condition_query);
1422 SAFE_FREE(option_query);
1423 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1425 while (sqlite3_step(stmt) == SQLITE_ROW) {
1426 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1428 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1429 SQLITE3_FINALIZE(stmt);
1430 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1433 _media_info_item_get_detail(stmt, (media_info_h)item);
1435 if (callback((media_info_h)item, user_data) == false) {
1436 media_info_destroy((media_info_h)item);
1440 media_info_destroy((media_info_h)item);
1443 SQLITE3_FINALIZE(stmt);
1448 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
1450 int ret = MEDIA_CONTENT_ERROR_NONE;
1451 char select_query[DEFAULT_QUERY_SIZE];
1452 char *condition_query = NULL;
1453 char *option_query = NULL;
1454 sqlite3_stmt *stmt = NULL;
1455 attribute_h attr = NULL;
1457 attr = _content_get_attirbute_handle();
1458 memset(select_query, 0x00, sizeof(select_query));
1460 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_LIST, sizeof(select_query))) {
1461 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1462 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1465 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1466 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1468 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1469 SAFE_FREE(condition_query);
1470 SAFE_FREE(option_query);
1471 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1473 while (sqlite3_step(stmt) == SQLITE_ROW) {
1474 media_storage_s *_storage = (media_storage_s*)calloc(1, sizeof(media_storage_s));
1476 if (_storage == NULL) {
1477 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1478 SQLITE3_FINALIZE(stmt);
1479 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1482 _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1483 _storage->storage_name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
1484 _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
1485 _storage->storage_account = g_strdup((const char *)sqlite3_column_text(stmt, 3));
1486 _storage->storage_type = (int)sqlite3_column_int(stmt, 4);
1488 if (callback((media_storage_h)_storage, user_data) == false) {
1489 media_storage_destroy((media_storage_h) _storage);
1493 media_storage_destroy((media_storage_h) _storage);
1496 SQLITE3_FINALIZE(stmt);
1500 #ifdef _USE_TV_PROFILE
1501 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)
1503 int ret = MEDIA_CONTENT_ERROR_NONE;
1504 char select_query[DEFAULT_QUERY_SIZE];
1505 char *tmp_query = NULL;
1506 char *condition_query = NULL;
1507 char *option_query = NULL;
1508 sqlite3_stmt *stmt = NULL;
1509 attribute_h attr = NULL;
1510 filter_s *_filter = (filter_s*)filter;
1512 attr = _content_get_attirbute_handle();
1513 memset(select_query, 0x00, sizeof(select_query));
1515 if (group_name != NULL) {
1516 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1517 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1519 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
1521 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1523 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1524 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1526 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
1529 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1530 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1531 if (tmp_query != NULL)
1532 sqlite3_free(tmp_query);
1536 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1537 if (tmp_query != NULL)
1538 sqlite3_free(tmp_query);
1539 SAFE_FREE(condition_query);
1540 SAFE_FREE(option_query);
1541 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1543 while (sqlite3_step(stmt) == SQLITE_ROW) {
1544 media_pvr_s *item = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1546 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1547 SQLITE3_FINALIZE(stmt);
1548 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1551 _media_pvr_item_get_detail(stmt, (media_pvr_h)item);
1553 if (callback((media_pvr_h)item, user_data) == false) {
1554 media_info_destroy((media_pvr_h)item);
1558 media_pvr_destroy((media_pvr_h)item);
1561 SQLITE3_FINALIZE(stmt);
1567 MEDIA_PVR_MEDIA_ID = 0,
1568 MEDIA_PVR_STORAGE_ID,
1572 MEDIA_PVR_TIME_ZONE,
1576 MEDIA_PVR_CHANNEL_TYPE,
1577 MEDIA_PVR_CHANNEL_NAME,
1578 MEDIA_PVR_CHANNEL_NUM,
1579 MEDIA_PVR_PROGRAM_TITLE,
1580 MEDIA_PVR_PROGRAM_NUM,
1581 MEDIA_PVR_PROGRAM_CRID,
1586 MEDIA_PVR_EMBARGO_TIME,
1587 MEDIA_PVR_EXPIRY_TIME,
1588 MEDIA_PVR_START_TIME,
1589 MEDIA_PVR_PROGRAM_START_TIME,
1590 MEDIA_PVR_PROGRAM_END_TIME,
1591 MEDIA_PVR_PROGRAM_DATE,
1592 MEDIA_PVR_PARENTAL_RATING,
1593 MEDIA_PVR_TIMER_RECORD,
1594 MEDIA_PVR_SERIES_RECORD,
1599 MEDIA_PVR_HARDOF_HEARINGRADIO,
1600 MEDIA_PVR_DATA_SERVICE,
1601 MEDIA_PVR_CONTENT_LOCK,
1602 MEDIA_PVR_CONTENT_WATCH,
1603 MEDIA_PVR_HAS_AUDIO_ONLY,
1604 MEDIA_PVR_IS_LOCAL_RECORDED,
1605 MEDIA_PVR_RESOLUTION,
1606 MEDIA_PVR_ASPECTRATIO,
1607 MEDIA_PVR_MODIFIED_MONTH,
1608 MEDIA_PVR_SPORTS_TYPE,
1609 MEDIA_PVR_GUIDANCE_LENGTH,
1611 MEDIA_PVR_PLAY_COUNT,
1612 MEDIA_PVR_PRIVATE_DATA,
1613 MEDIA_PVR_HIGHLIGHT,
1614 } media_pvr_field_e;
1616 void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
1618 media_pvr_s *_pvr = (media_pvr_s*)pvr;
1620 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID)))
1621 _pvr->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID));
1623 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID)))
1624 _pvr->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID));
1626 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH)))
1627 _pvr->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH));
1629 _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
1631 _pvr->duration = (int)sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
1633 _pvr->timezone = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
1635 _pvr->ptc = (int)sqlite3_column_int(stmt, MEDIA_PVR_PTC);
1637 _pvr->major = (int)sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
1639 _pvr->minor = (int)sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
1641 _pvr->channel_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
1643 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME)))
1644 _pvr->channel_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME));
1646 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM)))
1647 _pvr->channel_num = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM));
1649 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE)))
1650 _pvr->program_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE));
1652 _pvr->program_num = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
1654 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID)))
1655 _pvr->program_crid = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID));
1657 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE)))
1658 _pvr->guidance = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE));
1660 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS)))
1661 _pvr->synopsis = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS));
1663 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE)))
1664 _pvr->genre = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE));
1666 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE)))
1667 _pvr->language = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE));
1669 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH)))
1670 _pvr->modified_month = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH));
1672 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA)))
1673 _pvr->private_data = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA));
1675 _pvr->embargo_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
1677 _pvr->expiry_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
1679 _pvr->start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
1681 _pvr->program_start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
1683 _pvr->program_end_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
1685 _pvr->program_date = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
1687 _pvr->parental_rating = (int)sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
1689 _pvr->timer_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
1691 _pvr->series_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
1693 _pvr->hd = (int)sqlite3_column_int(stmt, MEDIA_PVR_HD);
1695 _pvr->subtitle = (int)sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
1697 _pvr->ttx = (int)sqlite3_column_int(stmt, MEDIA_PVR_TTX);
1699 _pvr->ad = (int)sqlite3_column_int(stmt, MEDIA_PVR_AD);
1701 _pvr->hard_of_hearing_radio = (int)sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
1703 _pvr->data_service = (int)sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
1705 _pvr->content_lock = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
1707 _pvr->content_watch = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
1709 _pvr->has_audio_only = (int)sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
1711 _pvr->is_local_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
1713 _pvr->resolution = (int)sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
1715 _pvr->aspectratio = (int)sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
1717 _pvr->sports_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
1719 _pvr->guidance_length = (int)sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
1721 _pvr->tvmode = (int)sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
1723 _pvr->play_count = (int)sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
1725 _pvr->highlight = (int)sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
1730 int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
1732 int ret = MEDIA_CONTENT_ERROR_NONE;
1733 char select_query[DEFAULT_QUERY_SIZE];
1734 char *condition_query = NULL;
1735 char *option_query = NULL;
1736 sqlite3_stmt *stmt = NULL;
1737 attribute_h attr = NULL;
1738 filter_s *_filter = (filter_s*)filter;
1740 attr = _content_get_attirbute_handle();
1741 memset(select_query, 0x00, sizeof(select_query));
1743 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1744 snprintf(select_query, sizeof(select_query), SELECT_PVR_LIST_BY_STORAGE_ID, _filter->storage_id);
1746 SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
1748 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1749 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1751 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1752 SAFE_FREE(condition_query);
1753 SAFE_FREE(option_query);
1754 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1756 while (sqlite3_step(stmt) == SQLITE_ROW) {
1757 media_pvr_s *_pvr = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1760 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1761 SQLITE3_FINALIZE(stmt);
1762 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1765 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
1767 if (callback((media_pvr_h)_pvr, user_data) == false) {
1768 media_pvr_destroy((media_pvr_h) _pvr);
1772 media_pvr_destroy((media_pvr_h) _pvr);
1775 SQLITE3_FINALIZE(stmt);
1781 int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id)
1783 int ret = MEDIA_CONTENT_ERROR_NONE;
1784 sqlite3_stmt *stmt = NULL;
1785 char *select_query = NULL;
1787 select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
1789 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
1790 SQLITE3_SAFE_FREE(select_query);
1791 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1793 if (sqlite3_step(stmt) == SQLITE_ROW) {
1794 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
1795 strncpy(storage_id, (const char *)sqlite3_column_text(stmt, 0), MEDIA_CONTENT_UUID_SIZE);
1797 media_content_error("There's no media!!");
1798 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1801 SQLITE3_FINALIZE(stmt);
1805 #ifdef _USE_TV_PROFILE
1807 MEDIA_UHD_MEDIA_ID = 0,
1808 MEDIA_UHD_STORAGE_ID,
1811 MEDIA_UHD_CONTENT_ID,
1812 MEDIA_UHD_CONTENT_TITLE,
1813 MEDIA_UHD_FILE_NAME,
1814 MEDIA_UHD_FOLDER_ID,
1815 MEDIA_UHD_RELEASE_DATE,
1816 MEDIA_UHD_MODIFIED_TIME,
1817 MEDIA_UHD_PLAYED_POSITION,
1819 MEDIA_UHD_PLAYED_COUNT,
1820 } media_uhd_field_e;
1822 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
1824 media_uhd_s *_uhd = (media_uhd_s*)uhd;
1826 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID)))
1827 _uhd->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID));
1829 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID)))
1830 _uhd->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID));
1832 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH)))
1833 _uhd->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH));
1835 _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE);
1837 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID)))
1838 _uhd->content_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID));
1840 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE)))
1841 _uhd->content_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE));
1843 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME)))
1844 _uhd->file_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME));
1846 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE)))
1847 _uhd->release_date = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE));
1849 _uhd->modified_time = (int)sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
1850 _uhd->played_position = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
1851 _uhd->sub_type = (int)sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
1852 _uhd->played_count = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
1857 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
1859 int ret = MEDIA_CONTENT_ERROR_NONE;
1860 char select_query[DEFAULT_QUERY_SIZE];
1861 char *condition_query = NULL;
1862 char *option_query = NULL;
1863 sqlite3_stmt *stmt = NULL;
1864 attribute_h attr = NULL;
1865 filter_s *_filter = (filter_s*)filter;
1867 attr = _content_get_attirbute_handle();
1868 memset(select_query, 0x00, sizeof(select_query));
1870 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1871 snprintf(select_query, sizeof(select_query), SELECT_UHD_LIST_BY_STORAGE_ID, _filter->storage_id);
1873 SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
1875 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1876 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1878 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1879 SAFE_FREE(condition_query);
1880 SAFE_FREE(option_query);
1881 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1883 while (sqlite3_step(stmt) == SQLITE_ROW) {
1884 media_uhd_s *_uhd = (media_uhd_s*)calloc(1, sizeof(media_uhd_s));
1887 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1888 SQLITE3_FINALIZE(stmt);
1889 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1892 _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd);
1894 if (callback((media_uhd_h)_uhd, user_data) == false) {
1895 media_uhd_destroy((media_uhd_h) _uhd);
1898 media_uhd_destroy((media_uhd_h) _uhd);
1901 SQLITE3_FINALIZE(stmt);