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_RATING:
67 return (char *) DB_FIELD_MEDIA_RATING;
69 case MEDIA_CONTENT_GROUP_MODIFIED_MONTH:
70 return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
71 case MEDIA_CONTENT_GROUP_MODIFIED_DATE:
72 return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
74 #ifdef _USE_SENIOR_MODE
75 case MEDIA_CONTENT_GROUP_CONTACT:
76 return (char *) DB_FIELD_MEDIA_CONTACT;
79 case MEDIA_CONTENT_GROUP_ALBUM:
80 return (char *) DB_FIELD_MEDIA_ALBUM;
81 case MEDIA_PVR_GROUP_DURATION:
82 return (char *) DB_FIELD_PVR_DURATION;
83 case MEDIA_PVR_GROUP_TIME_ZONE:
84 return (char *) DB_FIELD_PVR_TIME_ZONE;
85 case MEDIA_PVR_GROUP_PTC:
86 return (char *) DB_FIELD_PVR_PTC;
87 case MEDIA_PVR_GROUP_MAJOR:
88 return (char *) DB_FIELD_PVR_MAJOR;
89 case MEDIA_PVR_GROUP_MINOR:
90 return (char *) DB_FIELD_PVR_MINOR;
91 case MEDIA_PVR_GROUP_CHANNEL_TYPE:
92 return (char *) DB_FIELD_PVR_CHANNEL_TYPE;
93 case MEDIA_PVR_GROUP_CHANNEL_NAME:
94 return (char *) DB_FIELD_PVR_CHANNEL_NAME;
95 case MEDIA_PVR_GROUP_CHANNEL_NUM:
96 return (char *) DB_FIELD_PVR_CHANNEL_NUM;
97 case MEDIA_PVR_GROUP_PROGRAM_TITLE:
98 return (char *) DB_FIELD_PVR_PROGRAM_TITLE;
99 case MEDIA_PVR_GROUP_PROGRAM_NUM:
100 return (char *) DB_FIELD_PVR_PROGRAM_NUM;
101 case MEDIA_PVR_GROUP_PROGRAM_CRID:
102 return (char *) DB_FIELD_PVR_PROGRAM_CRID;
103 case MEDIA_PVR_GROUP_GUIDANCE:
104 return (char *) DB_FIELD_PVR_GUIDANCE;
105 case MEDIA_PVR_GROUP_SYNOPSIS:
106 return (char *) DB_FIELD_PVR_SYNOPSIS;
107 case MEDIA_PVR_GROUP_GENRE:
108 return (char *) DB_FIELD_PVR_GENRE;
109 case MEDIA_PVR_GROUP_LANGUAGE:
110 return (char *) DB_FIELD_PVR_LANGUAGE;
111 case MEDIA_PVR_GROUP_EMBARGO_TIME:
112 return (char *) DB_FIELD_PVR_EMBARGO_TIME;
113 case MEDIA_PVR_GROUP_EXPIRY_TIME:
114 return (char *) DB_FIELD_PVR_EXPIRY_TIME;
115 case MEDIA_PVR_GROUP_START_TIME:
116 return (char *) DB_FIELD_PVR_START_TIME;
117 case MEDIA_PVR_GROUP_PROGRAM_START_TIME:
118 return (char *) DB_FIELD_PVR_PROGRAM_START_TIME;
119 case MEDIA_PVR_GROUP_PROGRAM_END_TIME:
120 return (char *) DB_FIELD_PVR_PROGRAM_END_TIME;
121 case MEDIA_PVR_GROUP_PROGRAM_DATE:
122 return (char *) DB_FIELD_PVR_PROGRAM_DATE;
123 case MEDIA_PVR_GROUP_PARENTAL_RATING:
124 return (char *) DB_FIELD_PVR_PARENTAL_RATING;
125 case MEDIA_PVR_GROUP_TIMER_RECORD:
126 return (char *) DB_FIELD_PVR_TIMER_RECORD;
127 case MEDIA_PVR_GROUP_SERIES_RECORD:
128 return (char *) DB_FIELD_PVR_SERIES_RECORD;
129 case MEDIA_PVR_GROUP_HD:
130 return (char *) DB_FIELD_PVR_HD;
131 case MEDIA_PVR_GROUP_SUBTITLE:
132 return (char *) DB_FIELD_PVR_SUBTITLE;
133 case MEDIA_PVR_GROUP_TTX:
134 return (char *) DB_FIELD_PVR_TTX;
135 case MEDIA_PVR_GROUP_AD:
136 return (char *) DB_FIELD_PVR_AD;
137 case MEDIA_PVR_GROUP_HARDOF_HEARINGRADIO:
138 return (char *) DB_FIELD_PVR_HARDOF_HEARINGRADIO;
139 case MEDIA_PVR_GROUP_DATA_SERVICE:
140 return (char *) DB_FIELD_PVR_DATA_SERVICE;
141 case MEDIA_PVR_GROUP_CONTENT_LOCK:
142 return (char *) DB_FIELD_PVR_CONTENT_LOCK;
143 case MEDIA_PVR_GROUP_CONTENT_WATCH:
144 return (char *) DB_FIELD_PVR_CONTENT_WATCH;
145 case MEDIA_PVR_GROUP_HAS_AUDIO_ONLY:
146 return (char *) DB_FIELD_PVR_HAS_AUDIO_ONLY;
147 case MEDIA_PVR_GROUP_IS_LOCAL_RECORDED:
148 return (char *) DB_FIELD_PVR_IS_LOCAL_RECORD;
149 case MEDIA_PVR_GROUP_RESOLUTION:
150 return (char *) DB_FIELD_PVR_RESOLUTION;
151 case MEDIA_PVR_GROUP_ASPECTRATIO:
152 return (char *) DB_FIELD_PVR_ASPECTRATIO;
153 case MEDIA_PVR_GROUP_MODIFIED_MONTH:
154 return (char *) DB_FIELD_PVR_MODIFIED_DATE;
155 case MEDIA_PVR_GROUP_MODIFIED_DATE:
156 return (char *) DB_FIELD_PVR_MODIFIED_DATE;
157 case MEDIA_PVR_GROUP_SPORTS_TYPE:
158 return (char *) DB_FIELD_PVR_SPORTS_TYPE;
159 case MEDIA_PVR_GROUP_GUIDANCE_LENGTH:
160 return (char *) DB_FIELD_PVR_GUIDANCE_LENGTH;
161 case MEDIA_PVR_GROUP_TVMODE:
162 return (char *) DB_FIELD_PVR_TVMODE;
163 case MEDIA_PVR_GROUP_PLAY_COUNT:
164 return (char *) DB_FIELD_PVR_PLAY_COUNT;
165 case MEDIA_PVR_GROUP_PRIVATE_DATA:
166 return (char *) DB_FIELD_PVR_PRIVATE_DATA;
167 case MEDIA_UHD_GROUP_CONTENT_TITLE:
168 return (char *) DB_FIELD_UHD_CONTENT_TITLE;
169 case MEDIA_UHD_GROUP_RELEASE_DATE:
170 return (char *) DB_FIELD_UHD_RELEASE_DATE;
171 case MEDIA_UHD_GROUP_SUB_TYPE:
172 return (char *) DB_FIELD_UHD_SUB_TYPE;
173 case MEDIA_UHD_GROUP_FILE_NAME:
174 return (char *) DB_FIELD_UHD_FILE_NAME;
175 case MEDIA_UHD_GROUP_PLAYED_COUNT:
176 return (char *) DB_FIELD_UHD_PLAYED_COUNT;
185 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)
187 int ret = MEDIA_CONTENT_ERROR_NONE;
188 filter_s *_filter = NULL;
190 if (filter != NULL) {
191 _filter = (filter_s*)filter;
193 if (STRING_VALID(_filter->condition)) {
194 ret = _media_filter_attribute_generate(attr, filter, condition_query);
195 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
198 if (_filter->is_full_order == false) {
199 /* Process for filter v1 */
200 ret = _media_filter_attribute_option_generate(attr, filter, option_query);
201 if (ret != MEDIA_CONTENT_ERROR_NONE) {
202 SAFE_FREE(*condition_query);
206 /* Process for filter v2 */
207 ret = _media_filter_attribute_option_generate_with_full_query(attr, filter, option_query);
208 if (ret != MEDIA_CONTENT_ERROR_NONE) {
209 SAFE_FREE(*condition_query);
214 if (STRING_VALID(*condition_query)) {
215 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, select_query_size);
216 SAFE_STRLCAT(select_query, QUERY_KEYWORD_AND, select_query_size);
223 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
225 int ret = MEDIA_CONTENT_ERROR_NONE;
226 sqlite3_stmt *stmt = NULL;
227 char select_query[MAX_QUERY_SIZE] = {0, };
228 char *condition_query = NULL;
229 char *option_query = NULL;
230 attribute_h attr = NULL;
231 filter_s *_filter = (filter_s*)filter;
233 attr = _content_get_attirbute_handle();
234 memset(select_query, 0x00, sizeof(select_query));
236 switch (group_type) {
237 case MEDIA_GROUP_NONE:
238 case MEDIA_GROUP_TAG_BY_MEDIA_ID:
239 case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
240 case MEDIA_GROUP_FACE_BY_MEDIA_ID:
242 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
243 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
246 case MEDIA_GROUP_ALBUM:
247 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
248 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id);
250 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_VIEW_MEDIA);
253 case MEDIA_GROUP_FOLDER:
254 attr = _content_get_alias_attirbute_handle();
256 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
257 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
259 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_VIEW_MEDIA);
262 case MEDIA_GROUP_PLAYLIST:
263 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) {
264 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
265 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
268 case MEDIA_GROUP_TAG:
269 if (!SAFE_STRLCPY(select_query, SELECT_TAG_COUNT, sizeof(select_query))) {
270 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
271 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
274 case MEDIA_GROUP_BOOKMARK:
275 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
276 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id);
278 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_VIEW_MEDIA);
281 case MEDIA_GROUP_STORAGE:
282 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) {
283 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
284 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
287 case MEDIA_GROUP_FACE:
288 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
289 snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, _filter->storage_id);
291 snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, DB_VIEW_MEDIA);
293 #ifdef _USE_TVPD_MODE
294 case MEDIA_GROUP_PVR:
295 case MEDIA_GROUP_UHD:
299 media_content_error("Invalid group type [%d]", group_type);
300 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
305 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
306 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
308 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
309 SAFE_FREE(condition_query);
310 SAFE_FREE(option_query);
311 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
313 if (sqlite3_step(stmt) == SQLITE_ROW)
314 *group_count = (int)sqlite3_column_int(stmt, 0);
316 SQLITE3_FINALIZE(stmt);
321 int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
323 int ret = MEDIA_CONTENT_ERROR_NONE;
324 sqlite3_stmt *stmt = NULL;
325 char select_query[MAX_QUERY_SIZE] = {0, };
326 char *condition_query = NULL;
327 char *option_query = NULL;
328 attribute_h attr = NULL;
329 filter_s *_filter = (filter_s*)filter;
331 attr = _content_get_attirbute_handle();
332 memset(select_query, 0x00, sizeof(select_query));
333 #ifdef _USE_TVPD_MODE
334 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
335 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
336 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
338 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_VIEW_MEDIA);
339 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content*/
340 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
341 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
343 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT, __media_db_get_group_name(group));
344 } else { /*uhd content*/
345 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
346 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
348 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group));
351 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
352 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
354 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_VIEW_MEDIA);
356 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
357 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
359 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
360 if (STRING_VALID(condition_query))
361 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
362 if (STRING_VALID(option_query))
363 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
364 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
366 SAFE_FREE(condition_query);
367 SAFE_FREE(option_query);
369 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
370 SAFE_FREE(condition_query);
371 SAFE_FREE(option_query);
372 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
374 if (sqlite3_step(stmt) == SQLITE_ROW)
375 *group_count = (int)sqlite3_column_int(stmt, 0);
377 SQLITE3_FINALIZE(stmt);
382 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
384 int ret = MEDIA_CONTENT_ERROR_NONE;
385 char select_query[MAX_QUERY_SIZE] = {0, };
386 char *condition_query = NULL;
387 char *option_query = NULL;
389 sqlite3_stmt *stmt = NULL;
390 attribute_h attr = NULL;
391 filter_s *_filter = (filter_s*)filter;
393 attr = _content_get_attirbute_handle();
394 memset(select_query, 0x00, sizeof(select_query));
395 #ifdef _USE_TVPD_MODE
396 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
397 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
398 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
400 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_VIEW_MEDIA);
401 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content */
402 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
403 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
405 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST, __media_db_get_group_name(group));
406 } else { /* uhd content */
407 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
408 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
410 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group));
413 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
414 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
416 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_VIEW_MEDIA);
418 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
419 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
421 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
422 SAFE_FREE(condition_query);
423 SAFE_FREE(option_query);
424 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
426 while (sqlite3_step(stmt) == SQLITE_ROW) {
427 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
429 if (callback(name, user_data) == false) {
437 SQLITE3_FINALIZE(stmt);
441 #ifdef _USE_TVPD_MODE
442 int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, media_group_and_count_cb callback, void *user_data)
444 int ret = MEDIA_CONTENT_ERROR_NONE;
445 char select_query[DEFAULT_QUERY_SIZE] = {0, };
446 char group_query[DEFAULT_QUERY_SIZE] = {0, };
447 char *condition_query = NULL;
448 char *option_query = NULL;
450 sqlite3_stmt *stmt = NULL;
451 attribute_h attr = NULL;
452 filter_s *_filter = (filter_s*)filter;
454 attr = _content_get_attirbute_handle();
455 memset(select_query, 0x00, sizeof(select_query));
456 memset(group_query, 0x00, sizeof(group_query));
458 char* group_name = __media_db_get_group_name(group);
459 if (!STRING_VALID(group_name)) {
460 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
461 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
464 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
465 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
466 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, _filter->storage_id);
468 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, DB_VIEW_MEDIA);
469 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
470 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
471 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
473 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT, group_name);
474 } else {/*uhd content*/
475 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
476 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
478 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name);
481 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
482 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
484 if (STRING_VALID(option_query))
485 snprintf(group_query, sizeof(group_query), "GROUP BY %s %s", group_name, option_query);
487 snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name);
489 ret = _content_query_prepare(&stmt, select_query, condition_query, group_query);
490 SAFE_FREE(condition_query);
491 SAFE_FREE(option_query);
492 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
494 while (sqlite3_step(stmt) == SQLITE_ROW) {
495 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
496 name = strdup((const char *)sqlite3_column_text(stmt, 0));
498 if (callback(name, sqlite3_column_int(stmt, 1), user_data) == false) {
506 SQLITE3_FINALIZE(stmt);
511 int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data)
513 int ret = MEDIA_CONTENT_ERROR_NONE;
514 char select_query[MAX_QUERY_SIZE] = {0, };
515 char *condition_query = NULL;
516 char *option_query = NULL;
517 sqlite3_stmt *stmt = NULL;
518 attribute_h attr = NULL;
519 filter_s *_filter = (filter_s*)filter;
521 attr = _content_get_attirbute_handle();
522 memset(select_query, 0x00, sizeof(select_query));
524 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
525 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, _filter->storage_id);
527 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_VIEW_MEDIA);
529 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
530 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
532 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
533 SAFE_FREE(condition_query);
534 SAFE_FREE(option_query);
535 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
537 while (sqlite3_step(stmt) == SQLITE_ROW) {
538 media_album_s *album = (media_album_s*)calloc(1, sizeof(media_album_s));
541 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
542 SQLITE3_FINALIZE(stmt);
543 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
546 album->album_id = (int)sqlite3_column_int(stmt, 0);
547 album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
548 album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2));
549 album->album_art_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
551 if (callback((media_album_h)album, user_data) == false) {
552 media_album_destroy((media_album_h)album);
556 media_album_destroy((media_album_h)album);
559 SQLITE3_FINALIZE(stmt);
564 int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_data)
566 int ret = MEDIA_CONTENT_ERROR_NONE;
567 char select_query[MAX_QUERY_SIZE] = {0, };
568 char *condition_query = NULL;
569 char *option_query = NULL;
570 sqlite3_stmt *stmt = NULL;
571 attribute_h attr = NULL;
572 filter_s *_filter = (filter_s*)filter;
574 attr = _content_get_alias_attirbute_handle();
575 memset(select_query, 0x00, sizeof(select_query));
577 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
578 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
580 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_VIEW_MEDIA);
582 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
583 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
585 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
587 SAFE_FREE(condition_query);
588 SAFE_FREE(option_query);
589 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
591 while (sqlite3_step(stmt) == SQLITE_ROW) {
592 media_folder_s *_folder = (media_folder_s*)calloc(1, sizeof(media_folder_s));
594 if (_folder == NULL) {
595 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
596 SQLITE3_FINALIZE(stmt);
597 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
600 _folder->folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
601 _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
602 _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
603 _folder->storage_type = (int)sqlite3_column_int(stmt, 3);
604 _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 4));
606 if (callback((media_folder_h)_folder, user_data) == false) {
607 media_folder_destroy((media_folder_h) _folder);
611 media_folder_destroy((media_folder_h) _folder);
614 SQLITE3_FINALIZE(stmt);
619 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
621 int ret = MEDIA_CONTENT_ERROR_NONE;
622 char select_query[MAX_QUERY_SIZE] = {0, };
623 char *condition_query = NULL;
624 char *option_query = NULL;
625 sqlite3_stmt *stmt = NULL;
626 attribute_h attr = NULL;
628 attr = _content_get_attirbute_handle();
629 memset(select_query, 0x00, sizeof(select_query));
631 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_LIST, sizeof(select_query))) {
632 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
633 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
636 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
637 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
639 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
640 SAFE_FREE(condition_query);
641 SAFE_FREE(option_query);
642 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
644 while (sqlite3_step(stmt) == SQLITE_ROW) {
645 media_playlist_s *_playlist = (media_playlist_s*)calloc(1, sizeof(media_playlist_s));
647 if (_playlist == NULL) {
648 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
649 SQLITE3_FINALIZE(stmt);
650 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
653 _playlist->playlist_id = (int)sqlite3_column_int(stmt, 0);
654 _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
655 _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
657 if (callback((media_playlist_h)_playlist, user_data) == false) {
658 media_playlist_destroy((media_playlist_h)_playlist);
661 media_playlist_destroy((media_playlist_h)_playlist);
664 SQLITE3_FINALIZE(stmt);
669 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
671 int ret = MEDIA_CONTENT_ERROR_NONE;
672 char select_query[MAX_QUERY_SIZE] = {0, };
673 char *condition_query = NULL;
674 char *option_query = NULL;
675 sqlite3_stmt *stmt = NULL;
676 attribute_h attr = NULL;
678 attr = _content_get_attirbute_handle();
679 memset(select_query, 0x00, sizeof(select_query));
681 /*snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ID_FROM_PLAYLIST_VIEW, playlist_id);*/
682 snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
684 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
685 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
687 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
688 SAFE_FREE(condition_query);
689 SAFE_FREE(option_query);
690 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
692 while (sqlite3_step(stmt) == SQLITE_ROW) {
693 int playlist_member_id = 0;
694 playlist_member_id = (int)sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX); /*MEDIA_INFO_ITEM_MAX is pm_id*/
696 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
698 if (_media == NULL) {
699 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
700 SQLITE3_FINALIZE(stmt);
701 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
704 _media_info_item_get_detail(stmt, (media_info_h)_media);
706 if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) {
707 media_info_destroy((media_info_h)_media);
710 media_info_destroy((media_info_h)_media);
714 SQLITE3_FINALIZE(stmt);
719 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
721 int ret = MEDIA_CONTENT_ERROR_NONE;
722 char select_query[MAX_QUERY_SIZE] = {0, };
723 char *condition_query = NULL;
724 char *option_query = NULL;
725 sqlite3_stmt *stmt = NULL;
726 attribute_h attr = NULL;
728 attr = _content_get_attirbute_handle();
729 memset(select_query, 0x00, sizeof(select_query));
731 if (!STRING_VALID(media_id)) {
732 if (!SAFE_STRLCPY(select_query, SELECT_TAG_LIST, sizeof(select_query))) {
733 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
734 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
737 snprintf(select_query, sizeof(select_query), SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
739 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
740 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
742 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
744 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
745 SAFE_FREE(condition_query);
746 SAFE_FREE(option_query);
747 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
749 while (sqlite3_step(stmt) == SQLITE_ROW) {
750 media_tag_s *_tag = (media_tag_s*)calloc(1, sizeof(media_tag_s));
753 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
754 SQLITE3_FINALIZE(stmt);
755 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
758 _tag->tag_id = (int)sqlite3_column_int(stmt, 0);
759 _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
761 if (callback((media_tag_h)_tag, user_data) == false) {
762 media_tag_destroy((media_tag_h)_tag);
765 media_tag_destroy((media_tag_h)_tag);
768 SQLITE3_FINALIZE(stmt);
773 int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
775 int ret = MEDIA_CONTENT_ERROR_NONE;
776 char select_query[MAX_QUERY_SIZE] = {0, };
777 char *condition_query = NULL;
778 char *option_query = NULL;
779 sqlite3_stmt *stmt = NULL;
780 attribute_h attr = NULL;
781 filter_s *_filter = (filter_s*)filter;
783 attr = _content_get_attirbute_handle();
785 memset(select_query, 0x00, sizeof(select_query));
787 if (STRING_VALID(media_id)) { //get bookmark by media_id
788 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
789 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
791 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
793 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
794 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, _filter->storage_id);
796 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, DB_VIEW_MEDIA);
799 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
800 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
802 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
803 SAFE_FREE(condition_query);
804 SAFE_FREE(option_query);
805 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
807 while (sqlite3_step(stmt) == SQLITE_ROW) {
808 media_bookmark_s *bookmark = (media_bookmark_s*)calloc(1, sizeof(media_bookmark_s));
810 if (bookmark == NULL) {
811 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
812 SQLITE3_FINALIZE(stmt);
813 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
816 bookmark->bookmark_id = (int)sqlite3_column_int(stmt, 0);
817 bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
818 bookmark->marked_time = (int)sqlite3_column_int(stmt, 2);
819 bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
820 bookmark->name = g_strdup((const char *)sqlite3_column_text(stmt, 4));
822 if (callback((media_bookmark_h)bookmark, user_data) == false) {
823 media_bookmark_destroy((media_bookmark_h)bookmark);
827 media_bookmark_destroy((media_bookmark_h)bookmark);
830 SQLITE3_FINALIZE(stmt);
836 int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
838 int ret = MEDIA_CONTENT_ERROR_NONE;
839 char select_query[MAX_QUERY_SIZE] = {0, };
840 char *condition_query = NULL;
841 char *option_query = NULL;
842 sqlite3_stmt *stmt = NULL;
843 attribute_h attr = NULL;
844 filter_s *_filter = (filter_s*)filter;
846 attr = _content_get_attirbute_handle();
848 memset(select_query, 0x00, sizeof(select_query));
850 if (STRING_VALID(media_id)) { //get face by media_id
851 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
852 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
854 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
856 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
857 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, _filter->storage_id);
859 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, DB_VIEW_MEDIA);
862 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
863 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
865 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
866 SAFE_FREE(condition_query);
867 SAFE_FREE(option_query);
868 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
870 while (sqlite3_step(stmt) == SQLITE_ROW) {
871 media_face_s *face = (media_face_s*)calloc(1, sizeof(media_face_s));
874 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
875 SQLITE3_FINALIZE(stmt);
876 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
879 face->face_id = (int)sqlite3_column_int(stmt, 0);
880 face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
881 face->face_rect_x = (int)sqlite3_column_int(stmt, 2);
882 face->face_rect_y = (int)sqlite3_column_int(stmt, 3);
883 face->face_rect_w = (int)sqlite3_column_int(stmt, 4);
884 face->face_rect_h = (int)sqlite3_column_int(stmt, 5);
885 face->orientation = (int)sqlite3_column_int(stmt, 6);
886 face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7));
888 if (callback((media_face_h)face, user_data) == false) {
889 media_face_destroy((media_face_h)face);
893 media_face_destroy((media_face_h)face);
896 SQLITE3_FINALIZE(stmt);
902 int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_list_e group_type, int *item_count)
904 int ret = MEDIA_CONTENT_ERROR_NONE;
905 sqlite3_stmt *stmt = NULL;
906 char select_query[MAX_QUERY_SIZE] = {0, };
907 char *condition_query = NULL;
908 char *option_query = NULL;
909 attribute_h attr = NULL;
910 filter_s *_filter = (filter_s*)filter;
912 attr = _content_get_attirbute_handle();
913 memset(select_query, 0x00, sizeof(select_query));
915 if (group_type == MEDIA_GROUP_ALBUM) {
916 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
917 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id);
919 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
920 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
921 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id);
922 } else if (group_type == MEDIA_GROUP_TAG) {
923 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_TAG, group_id);
925 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
926 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
929 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
930 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
932 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
933 SAFE_FREE(condition_query);
934 SAFE_FREE(option_query);
935 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
937 if (sqlite3_step(stmt) == SQLITE_ROW)
938 *item_count = (int)sqlite3_column_int(stmt, 0);
940 SQLITE3_FINALIZE(stmt);
945 int _media_db_get_group_item_count(const char *group_name, filter_h filter, group_list_e group_type, int *item_count)
947 int ret = MEDIA_CONTENT_ERROR_NONE;
948 sqlite3_stmt *stmt = NULL;
949 char select_query[MAX_QUERY_SIZE] = {0, };
950 char *tmp_query = NULL;
951 char *condition_query = NULL;
952 char *option_query = NULL;
953 bool is_simple = FALSE;
954 attribute_h attr = NULL;
955 filter_s *_filter = (filter_s*)filter;
957 attr = _content_get_attirbute_handle();
958 memset(select_query, 0x00, sizeof(select_query));
960 if (group_type == MEDIA_GROUP_NONE) {
961 /* There are 2 ways to get count for media table for performance
962 If user wants to set offset and count, use SQL SELECT_MEDIA_COUNT_FROM_MEDIA.
963 If user wants to get count without setting count, SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE */
964 if (_filter && ((_filter->offset < 0) && (_filter->count < 0))) {
965 if (STRING_VALID(_filter->storage_id))
966 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
968 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
971 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_VIEW_MEDIA);
973 } else if (group_type == MEDIA_GROUP_FOLDER) {
974 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
975 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
977 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
979 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
980 } else if (group_type == MEDIA_GROUP_TAG_BY_MEDIA_ID) {
981 snprintf(select_query, sizeof(select_query), SELECT_TAG_COUNT_BY_MEDIA_ID, group_name);
982 } else if (group_type == MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID) {
983 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
984 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
986 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
988 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
989 } else if (group_type == MEDIA_GROUP_STORAGE) {
990 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_STORAGE, group_name, group_name);
992 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
993 } else if (group_type == MEDIA_GROUP_FACE_BY_MEDIA_ID) {
994 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
995 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
997 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
999 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1000 #ifdef _USE_TVPD_MODE
1001 } else if (group_type == MEDIA_GROUP_PVR) {
1002 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1003 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id);
1005 SAFE_STRLCAT(select_query, SELECT_PVR_COUNT, sizeof(select_query));
1006 } else if (group_type == MEDIA_GROUP_UHD) {
1007 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1008 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id);
1010 SAFE_STRLCAT(select_query, SELECT_UHD_COUNT, sizeof(select_query));
1013 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1014 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1017 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1018 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1019 if (tmp_query != NULL)
1020 SQLITE3_SAFE_FREE(tmp_query);
1024 if (group_type == MEDIA_GROUP_NONE) {
1025 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1026 if (STRING_VALID(condition_query))
1027 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1028 if (STRING_VALID(option_query))
1029 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1032 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1034 SAFE_FREE(condition_query);
1035 SAFE_FREE(option_query);
1038 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1039 if (tmp_query != NULL)
1040 SQLITE3_SAFE_FREE(tmp_query);
1041 SAFE_FREE(condition_query);
1042 SAFE_FREE(option_query);
1043 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1045 if (sqlite3_step(stmt) == SQLITE_ROW)
1046 *item_count = (int)sqlite3_column_int(stmt, 0);
1048 SQLITE3_FINALIZE(stmt);
1053 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)
1055 int ret = MEDIA_CONTENT_ERROR_NONE;
1056 char select_query[MAX_QUERY_SIZE] = {0, };
1057 char *condition_query = NULL;
1058 char *option_query = NULL;
1059 sqlite3_stmt *stmt = NULL;
1060 attribute_h attr = NULL;
1061 filter_s *_filter = (filter_s*)filter;
1063 attr = _content_get_attirbute_handle();
1064 memset(select_query, 0x00, sizeof(select_query));
1066 if (group_type == MEDIA_GROUP_ALBUM) {
1067 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1068 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id);
1070 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
1071 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
1072 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1073 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id);
1075 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, DB_VIEW_MEDIA, group_id);
1076 } else if (group_type == MEDIA_GROUP_TAG) {
1077 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1078 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id);
1080 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_VIEW_MEDIA, group_id);
1082 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1083 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1086 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1087 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1089 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1090 SAFE_FREE(condition_query);
1091 SAFE_FREE(option_query);
1092 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1094 while (sqlite3_step(stmt) == SQLITE_ROW) {
1095 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1097 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1098 SQLITE3_FINALIZE(stmt);
1099 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1102 _media_info_item_get_detail(stmt, (media_info_h)item);
1104 if (callback((media_info_h)item, user_data) == false) {
1105 media_info_destroy((media_info_h)item);
1109 media_info_destroy((media_info_h)item);
1112 SQLITE3_FINALIZE(stmt);
1117 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)
1119 int ret = MEDIA_CONTENT_ERROR_NONE;
1120 char select_query[MAX_QUERY_SIZE] = {0, };
1121 char *condition_query = NULL;
1122 char *option_query = NULL;
1123 sqlite3_stmt *stmt = NULL;
1124 attribute_h attr = NULL;
1125 filter_s *_filter = (filter_s*)filter;
1127 attr = _content_get_attirbute_handle();
1128 memset(select_query, 0x00, sizeof(select_query));
1130 if (group_type == MEDIA_GROUP_NONE) {
1131 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1132 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, _filter->storage_id);
1134 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, DB_VIEW_MEDIA);
1135 } else if (group_type == MEDIA_GROUP_FOLDER) {
1136 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1137 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name);
1139 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1140 } else if (group_type == MEDIA_GROUP_STORAGE) {
1141 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name, group_name);
1143 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1144 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1147 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1148 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1150 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1151 SAFE_FREE(condition_query);
1152 SAFE_FREE(option_query);
1153 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1155 while (sqlite3_step(stmt) == SQLITE_ROW) {
1156 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1158 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1159 SQLITE3_FINALIZE(stmt);
1160 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1163 _media_info_item_get_detail(stmt, (media_info_h)item);
1165 if (callback((media_info_h)item, user_data) == false) {
1166 media_info_destroy((media_info_h)item);
1170 media_info_destroy((media_info_h)item);
1173 SQLITE3_FINALIZE(stmt);
1178 #ifdef _USE_SENIOR_MODE
1179 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)
1181 int ret = MEDIA_CONTENT_ERROR_NONE;
1182 char select_query1[MAX_QUERY_SIZE] = {0, };
1183 char *condition_query1 = NULL;
1184 char *option_query1 = NULL;
1185 char select_query2[MAX_QUERY_SIZE] = {0, };
1186 char *condition_query2 = NULL;
1187 char *option_query2 = NULL;
1188 sqlite3_stmt *stmt = NULL;
1189 attribute_h attr = NULL;
1190 filter_s *_filter1 = (filter_s*)filter1;
1191 filter_s *_filter2 = (filter_s*)filter2;
1193 attr = _content_get_attirbute_handle();
1195 memset(select_query1, 0x00, sizeof(select_query1));
1197 if ((_filter1 != NULL) && STRING_VALID(_filter1->storage_id))
1198 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, _filter1->storage_id, group_name);
1200 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1202 ret = __media_db_make_query(filter1, attr, select_query1, sizeof(select_query1), &condition_query1, &option_query1);
1203 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1204 SAFE_FREE(condition_query1);
1205 SAFE_FREE(option_query1);
1206 media_content_error("create select_query1 failed");
1210 memset(select_query2, 0x00, sizeof(select_query2));
1212 if ((_filter2 != NULL) && STRING_VALID(_filter2->storage_id))
1213 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, _filter2->storage_id, group_name);
1215 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1217 ret = __media_db_make_query(filter2, attr, select_query2, sizeof(select_query2), &condition_query2, &option_query2);
1218 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1219 SAFE_FREE(condition_query1);
1220 SAFE_FREE(option_query1);
1221 SAFE_FREE(condition_query2);
1222 SAFE_FREE(option_query2);
1223 media_content_error("create select_query2 failed");
1227 ret = _content_query_prepare_by_union_select(&stmt, select_query1, condition_query1, option_query1, select_query2, condition_query2, option_query2);
1228 SAFE_FREE(condition_query1);
1229 SAFE_FREE(option_query1);
1230 SAFE_FREE(condition_query2);
1231 SAFE_FREE(option_query2);
1232 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1234 while (sqlite3_step(stmt) == SQLITE_ROW) {
1235 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1237 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1238 SQLITE3_FINALIZE(stmt);
1239 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1242 _media_info_item_get_detail(stmt, (media_info_h)item);
1244 if (callback((media_info_h)item, user_data) == false) {
1245 media_info_destroy((media_info_h)item);
1249 media_info_destroy((media_info_h)item);
1252 SQLITE3_FINALIZE(stmt);
1258 int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count)
1260 int ret = MEDIA_CONTENT_ERROR_NONE;
1261 sqlite3_stmt *stmt = NULL;
1262 char select_query[MAX_QUERY_SIZE] = {0, };
1263 char *tmp_query = NULL;
1264 char *condition_query = NULL;
1265 char *option_query = NULL;
1266 attribute_h attr = NULL;
1267 filter_s *_filter = (filter_s*)filter;
1269 attr = _content_get_attirbute_handle();
1270 memset(select_query, 0x00, sizeof(select_query));
1271 #ifdef _USE_TVPD_MODE
1272 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
1273 if (group_name != NULL) {
1274 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1275 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1277 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1279 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1281 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1282 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1284 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1286 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
1287 if (group_name != NULL) {
1288 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1289 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1291 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1293 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1295 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1296 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1298 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1300 } else {/*uhd content*/
1301 if (group_name != NULL) {
1302 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1303 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1305 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1307 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1309 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1310 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1312 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1316 if (group_name != NULL) {
1317 if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) {
1318 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1319 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1321 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1322 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1325 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1326 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1328 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1331 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1332 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1333 if (tmp_query != NULL)
1334 SQLITE3_SAFE_FREE(tmp_query);
1338 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1339 if (STRING_VALID(condition_query))
1340 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1341 if (STRING_VALID(option_query))
1342 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1343 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1345 SAFE_FREE(condition_query);
1346 SAFE_FREE(option_query);
1348 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1349 if (tmp_query != NULL)
1350 SQLITE3_SAFE_FREE(tmp_query);
1351 SAFE_FREE(condition_query);
1352 SAFE_FREE(option_query);
1353 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1355 if (sqlite3_step(stmt) == SQLITE_ROW)
1356 *item_count = (int)sqlite3_column_int(stmt, 0);
1358 SQLITE3_FINALIZE(stmt);
1363 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)
1365 int ret = MEDIA_CONTENT_ERROR_NONE;
1366 char select_query[MAX_QUERY_SIZE] = {0, };
1367 char *tmp_query = NULL;
1368 char *condition_query = NULL;
1369 char *option_query = NULL;
1370 sqlite3_stmt *stmt = NULL;
1371 attribute_h attr = NULL;
1372 filter_s *_filter = (filter_s*)filter;
1374 attr = _content_get_attirbute_handle();
1375 memset(select_query, 0x00, sizeof(select_query));
1377 if (group_name != NULL) {
1378 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1379 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1381 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1383 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1385 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1386 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1388 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1391 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1392 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1393 if (tmp_query != NULL)
1394 SQLITE3_SAFE_FREE(tmp_query);
1398 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1399 if (tmp_query != NULL)
1400 SQLITE3_SAFE_FREE(tmp_query);
1401 SAFE_FREE(condition_query);
1402 SAFE_FREE(option_query);
1403 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1405 while (sqlite3_step(stmt) == SQLITE_ROW) {
1406 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1408 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1409 SQLITE3_FINALIZE(stmt);
1410 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1413 _media_info_item_get_detail(stmt, (media_info_h)item);
1415 if (callback((media_info_h)item, user_data) == false) {
1416 media_info_destroy((media_info_h)item);
1420 media_info_destroy((media_info_h)item);
1423 SQLITE3_FINALIZE(stmt);
1428 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
1430 int ret = MEDIA_CONTENT_ERROR_NONE;
1431 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1432 char *condition_query = NULL;
1433 char *option_query = NULL;
1434 sqlite3_stmt *stmt = NULL;
1435 attribute_h attr = NULL;
1437 attr = _content_get_attirbute_handle();
1438 memset(select_query, 0x00, sizeof(select_query));
1440 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_LIST, sizeof(select_query))) {
1441 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1442 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1445 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1446 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1448 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1449 SAFE_FREE(condition_query);
1450 SAFE_FREE(option_query);
1451 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1453 while (sqlite3_step(stmt) == SQLITE_ROW) {
1454 media_storage_s *_storage = (media_storage_s*)calloc(1, sizeof(media_storage_s));
1456 if (_storage == NULL) {
1457 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1458 SQLITE3_FINALIZE(stmt);
1459 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1462 _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1463 _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
1464 _storage->storage_type = (int)sqlite3_column_int(stmt, 2);
1466 if (callback((media_storage_h)_storage, user_data) == false) {
1467 media_storage_destroy((media_storage_h) _storage);
1471 media_storage_destroy((media_storage_h) _storage);
1474 SQLITE3_FINALIZE(stmt);
1478 #ifdef _USE_TVPD_MODE
1479 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)
1481 int ret = MEDIA_CONTENT_ERROR_NONE;
1482 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1483 char *tmp_query = NULL;
1484 char *condition_query = NULL;
1485 char *option_query = NULL;
1486 sqlite3_stmt *stmt = NULL;
1487 attribute_h attr = NULL;
1488 filter_s *_filter = (filter_s*)filter;
1490 attr = _content_get_attirbute_handle();
1491 memset(select_query, 0x00, sizeof(select_query));
1493 if (group_name != NULL) {
1494 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1495 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1497 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
1499 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1501 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1502 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1504 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
1507 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1508 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1509 if (tmp_query != NULL)
1510 sqlite3_free(tmp_query);
1514 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1515 if (tmp_query != NULL)
1516 sqlite3_free(tmp_query);
1517 SAFE_FREE(condition_query);
1518 SAFE_FREE(option_query);
1519 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1521 while (sqlite3_step(stmt) == SQLITE_ROW) {
1522 media_pvr_s *item = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1524 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1525 SQLITE3_FINALIZE(stmt);
1526 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1529 _media_pvr_item_get_detail(stmt, (media_pvr_h)item);
1531 if (callback((media_pvr_h)item, user_data) == false) {
1532 media_info_destroy((media_pvr_h)item);
1536 media_pvr_destroy((media_pvr_h)item);
1539 SQLITE3_FINALIZE(stmt);
1545 MEDIA_PVR_MEDIA_ID = 0,
1546 MEDIA_PVR_STORAGE_ID,
1550 MEDIA_PVR_TIME_ZONE,
1554 MEDIA_PVR_CHANNEL_TYPE,
1555 MEDIA_PVR_CHANNEL_NAME,
1556 MEDIA_PVR_CHANNEL_NUM,
1557 MEDIA_PVR_SERVICE_PROFILE,
1558 MEDIA_PVR_PROGRAM_TITLE,
1559 MEDIA_PVR_PROGRAM_NUM,
1560 MEDIA_PVR_PROGRAM_CRID,
1565 MEDIA_PVR_EMBARGO_TIME,
1566 MEDIA_PVR_EXPIRY_TIME,
1567 MEDIA_PVR_START_TIME,
1568 MEDIA_PVR_PROGRAM_START_TIME,
1569 MEDIA_PVR_PROGRAM_END_TIME,
1570 MEDIA_PVR_PROGRAM_DATE,
1571 MEDIA_PVR_PARENTAL_RATING,
1572 MEDIA_PVR_TIMER_RECORD,
1573 MEDIA_PVR_SERIES_RECORD,
1578 MEDIA_PVR_HARDOF_HEARINGRADIO,
1579 MEDIA_PVR_DATA_SERVICE,
1580 MEDIA_PVR_CONTENT_LOCK,
1581 MEDIA_PVR_CONTENT_WATCH,
1582 MEDIA_PVR_HAS_AUDIO_ONLY,
1583 MEDIA_PVR_IS_LOCAL_RECORDED,
1584 MEDIA_PVR_RESOLUTION,
1585 MEDIA_PVR_ASPECTRATIO,
1586 MEDIA_PVR_MODIFIED_MONTH,
1587 MEDIA_PVR_SPORTS_TYPE,
1588 MEDIA_PVR_GUIDANCE_LENGTH,
1590 MEDIA_PVR_PLAY_COUNT,
1591 MEDIA_PVR_PRIVATE_DATA,
1592 MEDIA_PVR_HIGHLIGHT,
1593 } media_pvr_field_e;
1595 void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
1597 media_pvr_s *_pvr = (media_pvr_s*)pvr;
1599 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID)))
1600 _pvr->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID));
1602 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID)))
1603 _pvr->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID));
1605 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH)))
1606 _pvr->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH));
1608 _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
1610 _pvr->duration = (int)sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
1612 _pvr->timezone = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
1614 _pvr->ptc = (int)sqlite3_column_int(stmt, MEDIA_PVR_PTC);
1616 _pvr->major = (int)sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
1618 _pvr->minor = (int)sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
1620 _pvr->channel_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
1622 _pvr->service_profile = (unsigned int)sqlite3_column_int(stmt, MEDIA_PVR_SERVICE_PROFILE);
1624 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME)))
1625 _pvr->channel_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME));
1627 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM)))
1628 _pvr->channel_num = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM));
1630 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE)))
1631 _pvr->program_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE));
1633 _pvr->program_num = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
1635 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID)))
1636 _pvr->program_crid = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID));
1638 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE)))
1639 _pvr->guidance = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE));
1641 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS)))
1642 _pvr->synopsis = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS));
1644 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE)))
1645 _pvr->genre = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE));
1647 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE)))
1648 _pvr->language = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE));
1650 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH)))
1651 _pvr->modified_month = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH));
1653 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA)))
1654 _pvr->private_data = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA));
1656 _pvr->embargo_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
1658 _pvr->expiry_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
1660 _pvr->start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
1662 _pvr->program_start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
1664 _pvr->program_end_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
1666 _pvr->program_date = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
1668 _pvr->parental_rating = (int)sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
1670 _pvr->timer_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
1672 _pvr->series_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
1674 _pvr->hd = (int)sqlite3_column_int(stmt, MEDIA_PVR_HD);
1676 _pvr->subtitle = (int)sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
1678 _pvr->ttx = (int)sqlite3_column_int(stmt, MEDIA_PVR_TTX);
1680 _pvr->ad = (int)sqlite3_column_int(stmt, MEDIA_PVR_AD);
1682 _pvr->hard_of_hearing_radio = (int)sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
1684 _pvr->data_service = (int)sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
1686 _pvr->content_lock = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
1688 _pvr->content_watch = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
1690 _pvr->has_audio_only = (int)sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
1692 _pvr->is_local_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
1694 _pvr->resolution = (int)sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
1696 _pvr->aspectratio = (int)sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
1698 _pvr->sports_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
1700 _pvr->guidance_length = (int)sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
1702 _pvr->tvmode = (int)sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
1704 _pvr->play_count = (int)sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
1706 _pvr->highlight = (int)sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
1711 int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
1713 int ret = MEDIA_CONTENT_ERROR_NONE;
1714 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1715 char *condition_query = NULL;
1716 char *option_query = NULL;
1717 sqlite3_stmt *stmt = NULL;
1718 attribute_h attr = NULL;
1719 filter_s *_filter = (filter_s*)filter;
1721 attr = _content_get_attirbute_handle();
1722 memset(select_query, 0x00, sizeof(select_query));
1724 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1725 snprintf(select_query, sizeof(select_query), SELECT_PVR_LIST_BY_STORAGE_ID, _filter->storage_id);
1727 SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
1729 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1730 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1732 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1733 SAFE_FREE(condition_query);
1734 SAFE_FREE(option_query);
1735 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1737 while (sqlite3_step(stmt) == SQLITE_ROW) {
1738 media_pvr_s *_pvr = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1741 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1742 SQLITE3_FINALIZE(stmt);
1743 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1746 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
1748 if (callback((media_pvr_h)_pvr, user_data) == false) {
1749 media_pvr_destroy((media_pvr_h) _pvr);
1753 media_pvr_destroy((media_pvr_h) _pvr);
1756 SQLITE3_FINALIZE(stmt);
1762 int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id)
1764 int ret = MEDIA_CONTENT_ERROR_NONE;
1765 sqlite3_stmt *stmt = NULL;
1766 char *select_query = NULL;
1768 select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
1770 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
1771 SQLITE3_SAFE_FREE(select_query);
1772 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1774 if (sqlite3_step(stmt) == SQLITE_ROW) {
1775 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) {
1776 if (!SAFE_STRLCPY(storage_id, (const char *)sqlite3_column_text(stmt, 0), MEDIA_CONTENT_UUID_SIZE+1)) {
1777 media_content_error("Storage id copy fail");
1778 ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION;
1782 media_content_error("There's no media!!");
1783 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1786 SQLITE3_FINALIZE(stmt);
1791 #ifdef _USE_TVPD_MODE
1793 MEDIA_UHD_MEDIA_ID = 0,
1794 MEDIA_UHD_STORAGE_ID,
1797 MEDIA_UHD_CONTENT_ID,
1798 MEDIA_UHD_CONTENT_TITLE,
1799 MEDIA_UHD_FILE_NAME,
1800 MEDIA_UHD_FOLDER_ID,
1801 MEDIA_UHD_RELEASE_DATE,
1802 MEDIA_UHD_MODIFIED_TIME,
1803 MEDIA_UHD_PLAYED_POSITION,
1805 MEDIA_UHD_PLAYED_COUNT,
1806 } media_uhd_field_e;
1808 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
1810 media_uhd_s *_uhd = (media_uhd_s*)uhd;
1812 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID)))
1813 _uhd->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID));
1815 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID)))
1816 _uhd->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID));
1818 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH)))
1819 _uhd->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH));
1821 _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE);
1823 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID)))
1824 _uhd->content_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID));
1826 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE)))
1827 _uhd->content_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE));
1829 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME)))
1830 _uhd->file_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME));
1832 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE)))
1833 _uhd->release_date = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE));
1835 _uhd->modified_time = (int)sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
1836 _uhd->played_position = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
1837 _uhd->sub_type = (int)sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
1838 _uhd->played_count = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
1843 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
1845 int ret = MEDIA_CONTENT_ERROR_NONE;
1846 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1847 char *condition_query = NULL;
1848 char *option_query = NULL;
1849 sqlite3_stmt *stmt = NULL;
1850 attribute_h attr = NULL;
1851 filter_s *_filter = (filter_s*)filter;
1853 attr = _content_get_attirbute_handle();
1854 memset(select_query, 0x00, sizeof(select_query));
1856 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1857 snprintf(select_query, sizeof(select_query), SELECT_UHD_LIST_BY_STORAGE_ID, _filter->storage_id);
1859 SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
1861 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1862 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1864 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1865 SAFE_FREE(condition_query);
1866 SAFE_FREE(option_query);
1867 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1869 while (sqlite3_step(stmt) == SQLITE_ROW) {
1870 media_uhd_s *_uhd = (media_uhd_s*)calloc(1, sizeof(media_uhd_s));
1873 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1874 SQLITE3_FINALIZE(stmt);
1875 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1878 _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd);
1880 if (callback((media_uhd_h)_uhd, user_data) == false) {
1881 media_uhd_destroy((media_uhd_h) _uhd);
1884 media_uhd_destroy((media_uhd_h) _uhd);
1887 SQLITE3_FINALIZE(stmt);