2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <media_content.h>
19 #include <media_info_private.h>
20 #include <media_util_private.h>
22 static char * __media_db_get_group_name(media_group_e group);
23 static int __media_db_make_query(filter_h filter, attribute_h attr, char *select_query, int select_query_size, char **condition_query, char **option_query);
25 static char * __media_db_get_group_name(media_group_e group)
28 case MEDIA_CONTENT_GROUP_DISPLAY_NAME:
29 return (char *)DB_FIELD_MEDIA_DISPLAY_NAME;
30 case MEDIA_CONTENT_GROUP_TYPE:
31 return (char *)DB_FIELD_MEDIA_TYPE;
32 case MEDIA_CONTENT_GROUP_MIME_TYPE:
33 return (char *) DB_FIELD_MEDIA_MIME_TYPE;
34 case MEDIA_CONTENT_GROUP_SIZE:
35 return (char *) DB_FIELD_MEDIA_SIZE;
36 case MEDIA_CONTENT_GROUP_ADDED_TIME:
37 return (char *) DB_FIELD_MEDIA_ADDED_TIME;
38 case MEDIA_CONTENT_GROUP_MODIFIED_TIME:
39 return (char *) DB_FIELD_MEDIA_MODIFIED_TIME;
40 case MEDIA_CONTENT_GROUP_TITLE:
41 return (char *) DB_FIELD_MEDIA_TITLE;
42 case MEDIA_CONTENT_GROUP_ARTIST:
43 return (char *) DB_FIELD_MEDIA_ARTIST;
44 case MEDIA_CONTENT_GROUP_ALBUM_ARTIST:
45 return (char *) DB_FIELD_MEDIA_ALBUM_ARTIST;
46 case MEDIA_CONTENT_GROUP_GENRE:
47 return (char *) DB_FIELD_MEDIA_GENRE;
48 case MEDIA_CONTENT_GROUP_COMPOSER:
49 return (char *) DB_FIELD_MEDIA_COMPOSER;
50 case MEDIA_CONTENT_GROUP_YEAR:
51 return (char *) DB_FIELD_MEDIA_YEAR;
52 case MEDIA_CONTENT_GROUP_RECORDED_DATE:
53 return (char *) DB_FIELD_MEDIA_RECORDED_DATE;
54 case MEDIA_CONTENT_GROUP_COPYRIGHT:
55 return (char *) DB_FIELD_MEDIA_COPYRIGHT;
56 case MEDIA_CONTENT_GROUP_TRACK_NUM:
57 return (char *) DB_FIELD_MEDIA_TRACK_NUM;
58 case MEDIA_CONTENT_GROUP_DESCRIPTION:
59 return (char *) DB_FIELD_MEDIA_DESCRIPTION;
60 case MEDIA_CONTENT_GROUP_LONGITUDE:
61 return (char *) DB_FIELD_MEDIA_LONGITUDE;
62 case MEDIA_CONTENT_GROUP_LATITUDE:
63 return (char *) DB_FIELD_MEDIA_LATITUDE;
64 case MEDIA_CONTENT_GROUP_ALTITUDE:
65 return (char *) DB_FIELD_MEDIA_ALTITUDE;
66 case MEDIA_CONTENT_GROUP_BURST_IMAGE:
67 return (char *) DB_FIELD_MEDIA_BURST_ID;
68 case MEDIA_CONTENT_GROUP_RATING:
69 return (char *) DB_FIELD_MEDIA_RATING;
70 case MEDIA_CONTENT_GROUP_AUTHOR:
71 return (char *) DB_FIELD_MEDIA_AUTHOR;
72 case MEDIA_CONTENT_GROUP_PROVIDER:
73 return (char *) DB_FIELD_MEDIA_PROVIDER;
74 case MEDIA_CONTENT_GROUP_CONTENT_NAME:
75 return (char *) DB_FIELD_MEDIA_CONTENT_NAME;
76 case MEDIA_CONTENT_GROUP_CATEGORY:
77 return (char *) DB_FIELD_MEDIA_CATEGORY;
78 case MEDIA_CONTENT_GROUP_LOCATION_TAG:
79 return (char *) DB_FIELD_MEDIA_LOCATION_TAG;
80 case MEDIA_CONTENT_GROUP_AGE_RATING:
81 return (char *) DB_FIELD_MEDIA_AGE_RATING;
82 case MEDIA_CONTENT_GROUP_KEYWORD:
83 return (char *) DB_FIELD_MEDIA_KEYWORD;
84 case MEDIA_CONTENT_GROUP_WEATHER:
85 return (char *) DB_FIELD_MEDIA_WEATHER;
87 case MEDIA_CONTENT_GROUP_MODIFIED_MONTH:
88 return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
89 case MEDIA_CONTENT_GROUP_MODIFIED_DATE:
90 return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
92 #ifdef _USE_SENIOR_MODE
93 case MEDIA_CONTENT_GROUP_CONTACT:
94 return (char *) DB_FIELD_MEDIA_CONTACT;
97 case MEDIA_CONTENT_GROUP_ALBUM:
98 return (char *) DB_FIELD_MEDIA_ALBUM;
99 case MEDIA_PVR_GROUP_DURATION:
100 return (char *) DB_FIELD_PVR_DURATION;
101 case MEDIA_PVR_GROUP_TIME_ZONE:
102 return (char *) DB_FIELD_PVR_TIME_ZONE;
103 case MEDIA_PVR_GROUP_PTC:
104 return (char *) DB_FIELD_PVR_PTC;
105 case MEDIA_PVR_GROUP_MAJOR:
106 return (char *) DB_FIELD_PVR_MAJOR;
107 case MEDIA_PVR_GROUP_MINOR:
108 return (char *) DB_FIELD_PVR_MINOR;
109 case MEDIA_PVR_GROUP_CHANNEL_TYPE:
110 return (char *) DB_FIELD_PVR_CHANNEL_TYPE;
111 case MEDIA_PVR_GROUP_CHANNEL_NAME:
112 return (char *) DB_FIELD_PVR_CHANNEL_NAME;
113 case MEDIA_PVR_GROUP_CHANNEL_NUM:
114 return (char *) DB_FIELD_PVR_CHANNEL_NUM;
115 case MEDIA_PVR_GROUP_PROGRAM_TITLE:
116 return (char *) DB_FIELD_PVR_PROGRAM_TITLE;
117 case MEDIA_PVR_GROUP_PROGRAM_NUM:
118 return (char *) DB_FIELD_PVR_PROGRAM_NUM;
119 case MEDIA_PVR_GROUP_PROGRAM_CRID:
120 return (char *) DB_FIELD_PVR_PROGRAM_CRID;
121 case MEDIA_PVR_GROUP_GUIDANCE:
122 return (char *) DB_FIELD_PVR_GUIDANCE;
123 case MEDIA_PVR_GROUP_SYNOPSIS:
124 return (char *) DB_FIELD_PVR_SYNOPSIS;
125 case MEDIA_PVR_GROUP_GENRE:
126 return (char *) DB_FIELD_PVR_GENRE;
127 case MEDIA_PVR_GROUP_LANGUAGE:
128 return (char *) DB_FIELD_PVR_LANGUAGE;
129 case MEDIA_PVR_GROUP_EMBARGO_TIME:
130 return (char *) DB_FIELD_PVR_EMBARGO_TIME;
131 case MEDIA_PVR_GROUP_EXPIRY_TIME:
132 return (char *) DB_FIELD_PVR_EXPIRY_TIME;
133 case MEDIA_PVR_GROUP_START_TIME:
134 return (char *) DB_FIELD_PVR_START_TIME;
135 case MEDIA_PVR_GROUP_PROGRAM_START_TIME:
136 return (char *) DB_FIELD_PVR_PROGRAM_START_TIME;
137 case MEDIA_PVR_GROUP_PROGRAM_END_TIME:
138 return (char *) DB_FIELD_PVR_PROGRAM_END_TIME;
139 case MEDIA_PVR_GROUP_PROGRAM_DATE:
140 return (char *) DB_FIELD_PVR_PROGRAM_DATE;
141 case MEDIA_PVR_GROUP_PARENTAL_RATING:
142 return (char *) DB_FIELD_PVR_PARENTAL_RATING;
143 case MEDIA_PVR_GROUP_TIMER_RECORD:
144 return (char *) DB_FIELD_PVR_TIMER_RECORD;
145 case MEDIA_PVR_GROUP_SERIES_RECORD:
146 return (char *) DB_FIELD_PVR_SERIES_RECORD;
147 case MEDIA_PVR_GROUP_HD:
148 return (char *) DB_FIELD_PVR_HD;
149 case MEDIA_PVR_GROUP_SUBTITLE:
150 return (char *) DB_FIELD_PVR_SUBTITLE;
151 case MEDIA_PVR_GROUP_TTX:
152 return (char *) DB_FIELD_PVR_TTX;
153 case MEDIA_PVR_GROUP_AD:
154 return (char *) DB_FIELD_PVR_AD;
155 case MEDIA_PVR_GROUP_HARDOF_HEARINGRADIO:
156 return (char *) DB_FIELD_PVR_HARDOF_HEARINGRADIO;
157 case MEDIA_PVR_GROUP_DATA_SERVICE:
158 return (char *) DB_FIELD_PVR_DATA_SERVICE;
159 case MEDIA_PVR_GROUP_CONTENT_LOCK:
160 return (char *) DB_FIELD_PVR_CONTENT_LOCK;
161 case MEDIA_PVR_GROUP_CONTENT_WATCH:
162 return (char *) DB_FIELD_PVR_CONTENT_WATCH;
163 case MEDIA_PVR_GROUP_HAS_AUDIO_ONLY:
164 return (char *) DB_FIELD_PVR_HAS_AUDIO_ONLY;
165 case MEDIA_PVR_GROUP_IS_LOCAL_RECORDED:
166 return (char *) DB_FIELD_PVR_IS_LOCAL_RECORD;
167 case MEDIA_PVR_GROUP_RESOLUTION:
168 return (char *) DB_FIELD_PVR_RESOLUTION;
169 case MEDIA_PVR_GROUP_ASPECTRATIO:
170 return (char *) DB_FIELD_PVR_ASPECTRATIO;
171 case MEDIA_PVR_GROUP_MODIFIED_MONTH:
172 return (char *) DB_FIELD_PVR_MODIFIED_DATE;
173 case MEDIA_PVR_GROUP_MODIFIED_DATE:
174 return (char *) DB_FIELD_PVR_MODIFIED_DATE;
175 case MEDIA_PVR_GROUP_SPORTS_TYPE:
176 return (char *) DB_FIELD_PVR_SPORTS_TYPE;
177 case MEDIA_PVR_GROUP_GUIDANCE_LENGTH:
178 return (char *) DB_FIELD_PVR_GUIDANCE_LENGTH;
179 case MEDIA_PVR_GROUP_TVMODE:
180 return (char *) DB_FIELD_PVR_TVMODE;
181 case MEDIA_PVR_GROUP_PLAY_COUNT:
182 return (char *) DB_FIELD_PVR_PLAY_COUNT;
183 case MEDIA_PVR_GROUP_PRIVATE_DATA:
184 return (char *) DB_FIELD_PVR_PRIVATE_DATA;
185 case MEDIA_UHD_GROUP_CONTENT_TITLE:
186 return (char *) DB_FIELD_UHD_CONTENT_TITLE;
187 case MEDIA_UHD_GROUP_RELEASE_DATE:
188 return (char *) DB_FIELD_UHD_RELEASE_DATE;
189 case MEDIA_UHD_GROUP_SUB_TYPE:
190 return (char *) DB_FIELD_UHD_SUB_TYPE;
191 case MEDIA_UHD_GROUP_FILE_NAME:
192 return (char *) DB_FIELD_UHD_FILE_NAME;
193 case MEDIA_UHD_GROUP_PLAYED_COUNT:
194 return (char *) DB_FIELD_UHD_PLAYED_COUNT;
203 static int __media_db_make_query(filter_h filter, attribute_h attr, char *select_query, int select_query_size, char **condition_query, char **option_query)
205 int ret = MEDIA_CONTENT_ERROR_NONE;
206 filter_s *_filter = NULL;
208 if (filter != NULL) {
209 _filter = (filter_s*)filter;
211 if (STRING_VALID(_filter->condition)) {
212 ret = _media_filter_attribute_generate(attr, filter, condition_query);
213 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
216 if (_filter->is_full_order == false) {
217 /* Process for filter v1 */
218 ret = _media_filter_attribute_option_generate(attr, filter, option_query);
219 if (ret != MEDIA_CONTENT_ERROR_NONE) {
220 SAFE_FREE(*condition_query);
224 /* Process for filter v2 */
225 ret = _media_filter_attribute_option_generate_with_full_query(attr, filter, option_query);
226 if (ret != MEDIA_CONTENT_ERROR_NONE) {
227 SAFE_FREE(*condition_query);
232 if (STRING_VALID(*condition_query)) {
233 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, select_query_size);
234 SAFE_STRLCAT(select_query, QUERY_KEYWORD_AND, select_query_size);
241 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
243 int ret = MEDIA_CONTENT_ERROR_NONE;
244 sqlite3_stmt *stmt = NULL;
245 char select_query[MAX_QUERY_SIZE] = {0, };
246 char *condition_query = NULL;
247 char *option_query = NULL;
248 attribute_h attr = NULL;
249 filter_s *_filter = (filter_s*)filter;
251 attr = _content_get_attirbute_handle();
252 memset(select_query, 0x00, sizeof(select_query));
254 switch (group_type) {
255 case MEDIA_GROUP_NONE:
256 case MEDIA_GROUP_TAG_BY_MEDIA_ID:
257 case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
258 case MEDIA_GROUP_FACE_BY_MEDIA_ID:
260 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
261 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
264 case MEDIA_GROUP_ALBUM:
265 attr = _content_get_alias_attirbute_handle();
267 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
268 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id);
270 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_VIEW_MEDIA);
273 case MEDIA_GROUP_FOLDER:
274 attr = _content_get_alias_attirbute_handle();
276 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
277 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
279 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_VIEW_MEDIA);
282 case MEDIA_GROUP_PLAYLIST:
283 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) {
284 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
285 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
288 case MEDIA_GROUP_TAG:
289 if (!SAFE_STRLCPY(select_query, SELECT_TAG_COUNT, sizeof(select_query))) {
290 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
291 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
294 case MEDIA_GROUP_BOOKMARK:
295 attr = _content_get_alias_attirbute_handle();
297 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
298 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id);
300 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_VIEW_MEDIA);
303 case MEDIA_GROUP_STORAGE:
304 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) {
305 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
306 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
309 case MEDIA_GROUP_FACE:
310 attr = _content_get_alias_attirbute_handle();
312 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
313 snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, _filter->storage_id);
315 snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, DB_VIEW_MEDIA);
317 #ifdef _USE_TVPD_MODE
318 case MEDIA_GROUP_PVR:
319 case MEDIA_GROUP_UHD:
323 media_content_error("Invalid group type [%d]", group_type);
324 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
329 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
330 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
332 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
333 SAFE_FREE(condition_query);
334 SAFE_FREE(option_query);
335 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
337 if (sqlite3_step(stmt) == SQLITE_ROW)
338 *group_count = (int)sqlite3_column_int(stmt, 0);
340 SQLITE3_FINALIZE(stmt);
345 int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
347 int ret = MEDIA_CONTENT_ERROR_NONE;
348 sqlite3_stmt *stmt = NULL;
349 char select_query[MAX_QUERY_SIZE] = {0, };
350 char *condition_query = NULL;
351 char *option_query = NULL;
352 attribute_h attr = NULL;
353 filter_s *_filter = (filter_s*)filter;
355 attr = _content_get_attirbute_handle();
356 memset(select_query, 0x00, sizeof(select_query));
357 #ifdef _USE_TVPD_MODE
358 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
359 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
360 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
362 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_VIEW_MEDIA);
363 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content*/
364 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
365 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
367 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT, __media_db_get_group_name(group));
368 } else { /*uhd content*/
369 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
370 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
372 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group));
375 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
376 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
378 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_VIEW_MEDIA);
380 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
381 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
383 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
384 if (STRING_VALID(condition_query))
385 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
386 if (STRING_VALID(option_query))
387 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
388 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
390 SAFE_FREE(condition_query);
391 SAFE_FREE(option_query);
393 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
394 SAFE_FREE(condition_query);
395 SAFE_FREE(option_query);
396 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
398 if (sqlite3_step(stmt) == SQLITE_ROW)
399 *group_count = (int)sqlite3_column_int(stmt, 0);
401 SQLITE3_FINALIZE(stmt);
406 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
408 int ret = MEDIA_CONTENT_ERROR_NONE;
409 char select_query[MAX_QUERY_SIZE] = {0, };
410 char *condition_query = NULL;
411 char *option_query = NULL;
413 sqlite3_stmt *stmt = NULL;
414 attribute_h attr = NULL;
415 filter_s *_filter = (filter_s*)filter;
417 attr = _content_get_attirbute_handle();
418 memset(select_query, 0x00, sizeof(select_query));
419 #ifdef _USE_TVPD_MODE
420 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
421 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
422 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
424 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_VIEW_MEDIA);
425 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content */
426 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
427 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
429 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST, __media_db_get_group_name(group));
430 } else { /* uhd content */
431 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
432 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
434 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group));
437 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
438 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
440 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_VIEW_MEDIA);
442 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
443 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
445 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
446 SAFE_FREE(condition_query);
447 SAFE_FREE(option_query);
448 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
450 while (sqlite3_step(stmt) == SQLITE_ROW) {
451 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
453 if (callback(name, user_data) == false) {
461 SQLITE3_FINALIZE(stmt);
465 #ifdef _USE_TVPD_MODE
466 int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, media_group_and_count_cb callback, void *user_data)
468 int ret = MEDIA_CONTENT_ERROR_NONE;
469 char select_query[DEFAULT_QUERY_SIZE] = {0, };
470 char group_query[DEFAULT_QUERY_SIZE] = {0, };
471 char *condition_query = NULL;
472 char *option_query = NULL;
474 sqlite3_stmt *stmt = NULL;
475 attribute_h attr = NULL;
476 filter_s *_filter = (filter_s*)filter;
478 attr = _content_get_attirbute_handle();
479 memset(select_query, 0x00, sizeof(select_query));
480 memset(group_query, 0x00, sizeof(group_query));
482 char* group_name = __media_db_get_group_name(group);
483 if (!STRING_VALID(group_name)) {
484 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
485 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
488 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
489 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
490 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, _filter->storage_id);
492 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, DB_VIEW_MEDIA);
493 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
494 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
495 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
497 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT, group_name);
498 } else {/*uhd content*/
499 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
500 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
502 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name);
505 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
506 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
508 if (STRING_VALID(option_query))
509 snprintf(group_query, sizeof(group_query), "GROUP BY %s %s", group_name, option_query);
511 snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name);
513 ret = _content_query_prepare(&stmt, select_query, condition_query, group_query);
514 SAFE_FREE(condition_query);
515 SAFE_FREE(option_query);
516 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
518 while (sqlite3_step(stmt) == SQLITE_ROW) {
519 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
520 name = strdup((const char *)sqlite3_column_text(stmt, 0));
522 if (callback(name, sqlite3_column_int(stmt, 1), user_data) == false) {
530 SQLITE3_FINALIZE(stmt);
535 int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data)
537 int ret = MEDIA_CONTENT_ERROR_NONE;
538 char select_query[MAX_QUERY_SIZE] = {0, };
539 char *condition_query = NULL;
540 char *option_query = NULL;
541 sqlite3_stmt *stmt = NULL;
542 attribute_h attr = NULL;
543 filter_s *_filter = (filter_s*)filter;
545 attr = _content_get_alias_attirbute_handle();
546 memset(select_query, 0x00, sizeof(select_query));
548 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
549 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, _filter->storage_id);
551 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_VIEW_MEDIA);
553 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
554 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
556 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
557 SAFE_FREE(condition_query);
558 SAFE_FREE(option_query);
559 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
561 while (sqlite3_step(stmt) == SQLITE_ROW) {
562 media_album_s *album = (media_album_s*)calloc(1, sizeof(media_album_s));
565 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
566 SQLITE3_FINALIZE(stmt);
567 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
570 album->album_id = (int)sqlite3_column_int(stmt, 0);
571 album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
572 album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2));
573 album->album_art_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
575 if (callback((media_album_h)album, user_data) == false) {
576 media_album_destroy((media_album_h)album);
580 media_album_destroy((media_album_h)album);
583 SQLITE3_FINALIZE(stmt);
588 int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_data)
590 int ret = MEDIA_CONTENT_ERROR_NONE;
591 char select_query[MAX_QUERY_SIZE] = {0, };
592 char *condition_query = NULL;
593 char *option_query = NULL;
594 sqlite3_stmt *stmt = NULL;
595 attribute_h attr = NULL;
596 filter_s *_filter = (filter_s*)filter;
598 attr = _content_get_alias_attirbute_handle();
599 memset(select_query, 0x00, sizeof(select_query));
601 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
602 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
604 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_VIEW_MEDIA);
606 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
607 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
609 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
611 SAFE_FREE(condition_query);
612 SAFE_FREE(option_query);
613 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
615 while (sqlite3_step(stmt) == SQLITE_ROW) {
616 media_folder_s *_folder = (media_folder_s*)calloc(1, sizeof(media_folder_s));
618 if (_folder == NULL) {
619 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
620 SQLITE3_FINALIZE(stmt);
621 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
624 _folder->folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
625 _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
626 _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
627 _folder->storage_type = (int)sqlite3_column_int(stmt, 3);
628 _folder->modified_time = (int)sqlite3_column_int(stmt, 4);
629 _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 5));
630 _folder->folder_order = (int)sqlite3_column_int(stmt, 6);
632 if (callback((media_folder_h)_folder, user_data) == false) {
633 media_folder_destroy((media_folder_h) _folder);
637 media_folder_destroy((media_folder_h) _folder);
640 SQLITE3_FINALIZE(stmt);
645 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
647 int ret = MEDIA_CONTENT_ERROR_NONE;
648 char select_query[MAX_QUERY_SIZE] = {0, };
649 char *condition_query = NULL;
650 char *option_query = NULL;
651 sqlite3_stmt *stmt = NULL;
652 attribute_h attr = NULL;
654 attr = _content_get_attirbute_handle();
655 memset(select_query, 0x00, sizeof(select_query));
657 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_LIST, sizeof(select_query))) {
658 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
659 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
662 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
663 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
665 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
666 SAFE_FREE(condition_query);
667 SAFE_FREE(option_query);
668 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
670 while (sqlite3_step(stmt) == SQLITE_ROW) {
671 media_playlist_s *_playlist = (media_playlist_s*)calloc(1, sizeof(media_playlist_s));
673 if (_playlist == NULL) {
674 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
675 SQLITE3_FINALIZE(stmt);
676 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
679 _playlist->playlist_id = (int)sqlite3_column_int(stmt, 0);
680 _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
681 _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
683 if (callback((media_playlist_h)_playlist, user_data) == false) {
684 media_playlist_destroy((media_playlist_h)_playlist);
687 media_playlist_destroy((media_playlist_h)_playlist);
690 SQLITE3_FINALIZE(stmt);
695 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
697 int ret = MEDIA_CONTENT_ERROR_NONE;
698 char select_query[MAX_QUERY_SIZE] = {0, };
699 char *condition_query = NULL;
700 char *option_query = NULL;
701 sqlite3_stmt *stmt = NULL;
702 attribute_h attr = NULL;
704 attr = _content_get_attirbute_handle();
705 memset(select_query, 0x00, sizeof(select_query));
707 /*snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ID_FROM_PLAYLIST_VIEW, playlist_id);*/
708 snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
710 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
711 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
713 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
714 SAFE_FREE(condition_query);
715 SAFE_FREE(option_query);
716 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
718 while (sqlite3_step(stmt) == SQLITE_ROW) {
719 int playlist_member_id = 0;
720 playlist_member_id = (int)sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX); /*MEDIA_INFO_ITEM_MAX is pm_id*/
722 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
724 if (_media == NULL) {
725 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
726 SQLITE3_FINALIZE(stmt);
727 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
730 _media_info_item_get_detail(stmt, (media_info_h)_media);
732 if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) {
733 media_info_destroy((media_info_h)_media);
736 media_info_destroy((media_info_h)_media);
740 SQLITE3_FINALIZE(stmt);
745 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
747 int ret = MEDIA_CONTENT_ERROR_NONE;
748 char select_query[MAX_QUERY_SIZE] = {0, };
749 char *condition_query = NULL;
750 char *option_query = NULL;
751 sqlite3_stmt *stmt = NULL;
752 attribute_h attr = NULL;
754 attr = _content_get_attirbute_handle();
755 memset(select_query, 0x00, sizeof(select_query));
757 if (!STRING_VALID(media_id)) {
758 if (!SAFE_STRLCPY(select_query, SELECT_TAG_LIST, sizeof(select_query))) {
759 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
760 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
763 snprintf(select_query, sizeof(select_query), SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
765 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
766 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
768 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
770 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
771 SAFE_FREE(condition_query);
772 SAFE_FREE(option_query);
773 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
775 while (sqlite3_step(stmt) == SQLITE_ROW) {
776 media_tag_s *_tag = (media_tag_s*)calloc(1, sizeof(media_tag_s));
779 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
780 SQLITE3_FINALIZE(stmt);
781 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
784 _tag->tag_id = (int)sqlite3_column_int(stmt, 0);
785 _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
787 if (callback((media_tag_h)_tag, user_data) == false) {
788 media_tag_destroy((media_tag_h)_tag);
791 media_tag_destroy((media_tag_h)_tag);
794 SQLITE3_FINALIZE(stmt);
799 int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
801 int ret = MEDIA_CONTENT_ERROR_NONE;
802 char select_query[MAX_QUERY_SIZE] = {0, };
803 char *condition_query = NULL;
804 char *option_query = NULL;
805 sqlite3_stmt *stmt = NULL;
806 attribute_h attr = NULL;
807 filter_s *_filter = (filter_s*)filter;
809 attr = _content_get_alias_attirbute_handle();
811 memset(select_query, 0x00, sizeof(select_query));
813 if (STRING_VALID(media_id)) { //get bookmark by media_id
814 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
815 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
817 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
819 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
820 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, _filter->storage_id);
822 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, DB_VIEW_MEDIA);
825 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
826 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
828 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
829 SAFE_FREE(condition_query);
830 SAFE_FREE(option_query);
831 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
833 while (sqlite3_step(stmt) == SQLITE_ROW) {
834 media_bookmark_s *bookmark = (media_bookmark_s*)calloc(1, sizeof(media_bookmark_s));
836 if (bookmark == NULL) {
837 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
838 SQLITE3_FINALIZE(stmt);
839 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
842 bookmark->bookmark_id = (int)sqlite3_column_int(stmt, 0);
843 bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
844 bookmark->marked_time = (int)sqlite3_column_int(stmt, 2);
845 bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
846 bookmark->name = g_strdup((const char *)sqlite3_column_text(stmt, 4));
848 if (callback((media_bookmark_h)bookmark, user_data) == false) {
849 media_bookmark_destroy((media_bookmark_h)bookmark);
853 media_bookmark_destroy((media_bookmark_h)bookmark);
856 SQLITE3_FINALIZE(stmt);
862 int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
864 int ret = MEDIA_CONTENT_ERROR_NONE;
865 char select_query[MAX_QUERY_SIZE] = {0, };
866 char *condition_query = NULL;
867 char *option_query = NULL;
868 sqlite3_stmt *stmt = NULL;
869 attribute_h attr = NULL;
870 filter_s *_filter = (filter_s*)filter;
872 attr = _content_get_alias_attirbute_handle();
874 memset(select_query, 0x00, sizeof(select_query));
876 if (STRING_VALID(media_id)) { //get face by media_id
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_VIEW_MEDIA, media_id);
882 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
883 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, _filter->storage_id);
885 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, DB_VIEW_MEDIA);
888 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
889 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
891 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
892 SAFE_FREE(condition_query);
893 SAFE_FREE(option_query);
894 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
896 while (sqlite3_step(stmt) == SQLITE_ROW) {
897 media_face_s *face = (media_face_s*)calloc(1, sizeof(media_face_s));
900 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
901 SQLITE3_FINALIZE(stmt);
902 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
905 face->face_id = (int)sqlite3_column_int(stmt, 0);
906 face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
907 face->face_rect_x = (int)sqlite3_column_int(stmt, 2);
908 face->face_rect_y = (int)sqlite3_column_int(stmt, 3);
909 face->face_rect_w = (int)sqlite3_column_int(stmt, 4);
910 face->face_rect_h = (int)sqlite3_column_int(stmt, 5);
911 face->orientation = (int)sqlite3_column_int(stmt, 6);
912 face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7));
914 if (callback((media_face_h)face, user_data) == false) {
915 media_face_destroy((media_face_h)face);
919 media_face_destroy((media_face_h)face);
922 SQLITE3_FINALIZE(stmt);
928 int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_list_e group_type, int *item_count)
930 int ret = MEDIA_CONTENT_ERROR_NONE;
931 sqlite3_stmt *stmt = NULL;
932 char select_query[MAX_QUERY_SIZE] = {0, };
933 char *condition_query = NULL;
934 char *option_query = NULL;
935 attribute_h attr = NULL;
936 filter_s *_filter = (filter_s*)filter;
938 attr = _content_get_attirbute_handle();
939 memset(select_query, 0x00, sizeof(select_query));
941 if (group_type == MEDIA_GROUP_ALBUM) {
942 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
943 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id);
945 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
946 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
947 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id);
948 } else if (group_type == MEDIA_GROUP_TAG) {
949 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_TAG, group_id);
951 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
952 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
955 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
956 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
958 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
959 SAFE_FREE(condition_query);
960 SAFE_FREE(option_query);
961 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
963 if (sqlite3_step(stmt) == SQLITE_ROW)
964 *item_count = (int)sqlite3_column_int(stmt, 0);
966 SQLITE3_FINALIZE(stmt);
971 int _media_db_get_group_item_count(const char *group_name, filter_h filter, group_list_e group_type, int *item_count)
973 int ret = MEDIA_CONTENT_ERROR_NONE;
974 sqlite3_stmt *stmt = NULL;
975 char select_query[MAX_QUERY_SIZE] = {0, };
976 char *tmp_query = NULL;
977 char *condition_query = NULL;
978 char *option_query = NULL;
979 bool is_simple = FALSE;
980 attribute_h attr = NULL;
981 filter_s *_filter = (filter_s*)filter;
983 attr = _content_get_attirbute_handle();
984 memset(select_query, 0x00, sizeof(select_query));
986 if (group_type == MEDIA_GROUP_NONE) {
987 /* There are 2 ways to get count for media table for performance
988 If user wants to set offset and count, use SQL SELECT_MEDIA_COUNT_FROM_MEDIA.
989 If user wants to get count without setting count, SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE */
990 if (_filter && ((_filter->offset < 0) && (_filter->count < 0))) {
991 if (STRING_VALID(_filter->storage_id))
992 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
994 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
997 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_VIEW_MEDIA);
999 } else if (group_type == MEDIA_GROUP_FOLDER) {
1000 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1001 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
1003 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1005 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1006 } else if (group_type == MEDIA_GROUP_TAG_BY_MEDIA_ID) {
1007 snprintf(select_query, sizeof(select_query), SELECT_TAG_COUNT_BY_MEDIA_ID, group_name);
1008 } else if (group_type == MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID) {
1009 attr = _content_get_alias_attirbute_handle();
1011 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1012 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1014 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
1016 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1017 } else if (group_type == MEDIA_GROUP_STORAGE) {
1018 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_STORAGE, group_name, group_name);
1020 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1021 } else if (group_type == MEDIA_GROUP_FACE_BY_MEDIA_ID) {
1022 attr = _content_get_alias_attirbute_handle();
1024 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1025 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1027 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
1029 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1030 #ifdef _USE_TVPD_MODE
1031 } else if (group_type == MEDIA_GROUP_PVR) {
1032 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1033 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id);
1035 SAFE_STRLCAT(select_query, SELECT_PVR_COUNT, sizeof(select_query));
1036 } else if (group_type == MEDIA_GROUP_UHD) {
1037 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1038 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id);
1040 SAFE_STRLCAT(select_query, SELECT_UHD_COUNT, sizeof(select_query));
1043 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1044 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1047 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1048 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1049 if (tmp_query != NULL)
1050 SQLITE3_SAFE_FREE(tmp_query);
1054 if (group_type == MEDIA_GROUP_NONE) {
1055 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1056 if (STRING_VALID(condition_query))
1057 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1058 if (STRING_VALID(option_query))
1059 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1062 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1064 SAFE_FREE(condition_query);
1065 SAFE_FREE(option_query);
1068 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1069 if (tmp_query != NULL)
1070 SQLITE3_SAFE_FREE(tmp_query);
1071 SAFE_FREE(condition_query);
1072 SAFE_FREE(option_query);
1073 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1075 if (sqlite3_step(stmt) == SQLITE_ROW)
1076 *item_count = (int)sqlite3_column_int(stmt, 0);
1078 SQLITE3_FINALIZE(stmt);
1083 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)
1085 int ret = MEDIA_CONTENT_ERROR_NONE;
1086 char select_query[MAX_QUERY_SIZE] = {0, };
1087 char *condition_query = NULL;
1088 char *option_query = NULL;
1089 sqlite3_stmt *stmt = NULL;
1090 attribute_h attr = NULL;
1091 filter_s *_filter = (filter_s*)filter;
1093 attr = _content_get_attirbute_handle();
1094 memset(select_query, 0x00, sizeof(select_query));
1096 if (group_type == MEDIA_GROUP_ALBUM) {
1097 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1098 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id);
1100 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
1101 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
1102 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1103 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id);
1105 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, DB_VIEW_MEDIA, group_id);
1106 } else if (group_type == MEDIA_GROUP_TAG) {
1107 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1108 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id);
1110 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_VIEW_MEDIA, group_id);
1112 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1113 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1116 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1117 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1119 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1120 SAFE_FREE(condition_query);
1121 SAFE_FREE(option_query);
1122 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1124 while (sqlite3_step(stmt) == SQLITE_ROW) {
1125 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1127 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1128 SQLITE3_FINALIZE(stmt);
1129 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1132 _media_info_item_get_detail(stmt, (media_info_h)item);
1134 if (callback((media_info_h)item, user_data) == false) {
1135 media_info_destroy((media_info_h)item);
1139 media_info_destroy((media_info_h)item);
1142 SQLITE3_FINALIZE(stmt);
1147 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)
1149 int ret = MEDIA_CONTENT_ERROR_NONE;
1150 char select_query[MAX_QUERY_SIZE] = {0, };
1151 char *condition_query = NULL;
1152 char *option_query = NULL;
1153 sqlite3_stmt *stmt = NULL;
1154 attribute_h attr = NULL;
1155 filter_s *_filter = (filter_s*)filter;
1157 attr = _content_get_attirbute_handle();
1158 memset(select_query, 0x00, sizeof(select_query));
1160 if (group_type == MEDIA_GROUP_NONE) {
1161 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1162 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, _filter->storage_id);
1164 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, DB_VIEW_MEDIA);
1165 } else if (group_type == MEDIA_GROUP_FOLDER) {
1166 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1167 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name);
1169 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1170 } else if (group_type == MEDIA_GROUP_STORAGE) {
1171 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name, group_name);
1173 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1174 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1177 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1178 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1180 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1181 SAFE_FREE(condition_query);
1182 SAFE_FREE(option_query);
1183 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1185 while (sqlite3_step(stmt) == SQLITE_ROW) {
1186 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1188 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1189 SQLITE3_FINALIZE(stmt);
1190 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1193 _media_info_item_get_detail(stmt, (media_info_h)item);
1195 if (callback((media_info_h)item, user_data) == false) {
1196 media_info_destroy((media_info_h)item);
1200 media_info_destroy((media_info_h)item);
1203 SQLITE3_FINALIZE(stmt);
1208 #ifdef _USE_SENIOR_MODE
1209 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)
1211 int ret = MEDIA_CONTENT_ERROR_NONE;
1212 char select_query1[MAX_QUERY_SIZE] = {0, };
1213 char *condition_query1 = NULL;
1214 char *option_query1 = NULL;
1215 char select_query2[MAX_QUERY_SIZE] = {0, };
1216 char *condition_query2 = NULL;
1217 char *option_query2 = NULL;
1218 sqlite3_stmt *stmt = NULL;
1219 attribute_h attr = NULL;
1220 filter_s *_filter1 = (filter_s*)filter1;
1221 filter_s *_filter2 = (filter_s*)filter2;
1223 attr = _content_get_attirbute_handle();
1225 memset(select_query1, 0x00, sizeof(select_query1));
1227 if ((_filter1 != NULL) && STRING_VALID(_filter1->storage_id))
1228 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, _filter1->storage_id, group_name);
1230 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1232 ret = __media_db_make_query(filter1, attr, select_query1, sizeof(select_query1), &condition_query1, &option_query1);
1233 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1234 SAFE_FREE(condition_query1);
1235 SAFE_FREE(option_query1);
1236 media_content_error("create select_query1 failed");
1240 memset(select_query2, 0x00, sizeof(select_query2));
1242 if ((_filter2 != NULL) && STRING_VALID(_filter2->storage_id))
1243 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, _filter2->storage_id, group_name);
1245 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1247 ret = __media_db_make_query(filter2, attr, select_query2, sizeof(select_query2), &condition_query2, &option_query2);
1248 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1249 SAFE_FREE(condition_query1);
1250 SAFE_FREE(option_query1);
1251 SAFE_FREE(condition_query2);
1252 SAFE_FREE(option_query2);
1253 media_content_error("create select_query2 failed");
1257 ret = _content_query_prepare_by_union_select(&stmt, select_query1, condition_query1, option_query1, select_query2, condition_query2, option_query2);
1258 SAFE_FREE(condition_query1);
1259 SAFE_FREE(option_query1);
1260 SAFE_FREE(condition_query2);
1261 SAFE_FREE(option_query2);
1262 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1264 while (sqlite3_step(stmt) == SQLITE_ROW) {
1265 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1267 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1268 SQLITE3_FINALIZE(stmt);
1269 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1272 _media_info_item_get_detail(stmt, (media_info_h)item);
1274 if (callback((media_info_h)item, user_data) == false) {
1275 media_info_destroy((media_info_h)item);
1279 media_info_destroy((media_info_h)item);
1282 SQLITE3_FINALIZE(stmt);
1288 int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count)
1290 int ret = MEDIA_CONTENT_ERROR_NONE;
1291 sqlite3_stmt *stmt = NULL;
1292 char select_query[MAX_QUERY_SIZE] = {0, };
1293 char *tmp_query = NULL;
1294 char *condition_query = NULL;
1295 char *option_query = NULL;
1296 attribute_h attr = NULL;
1297 filter_s *_filter = (filter_s*)filter;
1299 attr = _content_get_attirbute_handle();
1300 memset(select_query, 0x00, sizeof(select_query));
1301 #ifdef _USE_TVPD_MODE
1302 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
1303 if (group_name != NULL) {
1304 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1305 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1307 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1309 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1311 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1312 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1314 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1316 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
1317 if (group_name != NULL) {
1318 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1319 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1321 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1323 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_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1328 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1330 } else {/*uhd content*/
1331 if (group_name != NULL) {
1332 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1333 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1335 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1337 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1339 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1340 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1342 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1346 if (group_name != NULL) {
1347 if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) {
1348 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1349 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1351 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1352 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1355 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1356 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1358 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1361 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1362 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1363 if (tmp_query != NULL)
1364 SQLITE3_SAFE_FREE(tmp_query);
1368 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1369 if (STRING_VALID(condition_query))
1370 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1371 if (STRING_VALID(option_query))
1372 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1373 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1375 SAFE_FREE(condition_query);
1376 SAFE_FREE(option_query);
1378 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1379 if (tmp_query != NULL)
1380 SQLITE3_SAFE_FREE(tmp_query);
1381 SAFE_FREE(condition_query);
1382 SAFE_FREE(option_query);
1383 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1385 if (sqlite3_step(stmt) == SQLITE_ROW)
1386 *item_count = (int)sqlite3_column_int(stmt, 0);
1388 SQLITE3_FINALIZE(stmt);
1393 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)
1395 int ret = MEDIA_CONTENT_ERROR_NONE;
1396 char select_query[MAX_QUERY_SIZE] = {0, };
1397 char *tmp_query = NULL;
1398 char *condition_query = NULL;
1399 char *option_query = NULL;
1400 sqlite3_stmt *stmt = NULL;
1401 attribute_h attr = NULL;
1402 filter_s *_filter = (filter_s*)filter;
1404 attr = _content_get_attirbute_handle();
1405 memset(select_query, 0x00, sizeof(select_query));
1407 if (group_name != NULL) {
1408 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1409 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1411 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1413 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1415 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1416 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1418 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1421 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1422 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1423 if (tmp_query != NULL)
1424 SQLITE3_SAFE_FREE(tmp_query);
1428 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1429 if (tmp_query != NULL)
1430 SQLITE3_SAFE_FREE(tmp_query);
1431 SAFE_FREE(condition_query);
1432 SAFE_FREE(option_query);
1433 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1435 while (sqlite3_step(stmt) == SQLITE_ROW) {
1436 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1438 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1439 SQLITE3_FINALIZE(stmt);
1440 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1443 _media_info_item_get_detail(stmt, (media_info_h)item);
1445 if (callback((media_info_h)item, user_data) == false) {
1446 media_info_destroy((media_info_h)item);
1450 media_info_destroy((media_info_h)item);
1453 SQLITE3_FINALIZE(stmt);
1458 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
1460 int ret = MEDIA_CONTENT_ERROR_NONE;
1461 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1462 char *condition_query = NULL;
1463 char *option_query = NULL;
1464 sqlite3_stmt *stmt = NULL;
1465 attribute_h attr = NULL;
1467 attr = _content_get_attirbute_handle();
1468 memset(select_query, 0x00, sizeof(select_query));
1470 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_LIST, sizeof(select_query))) {
1471 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1472 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1475 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1476 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1478 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1479 SAFE_FREE(condition_query);
1480 SAFE_FREE(option_query);
1481 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1483 while (sqlite3_step(stmt) == SQLITE_ROW) {
1484 media_storage_s *_storage = (media_storage_s*)calloc(1, sizeof(media_storage_s));
1486 if (_storage == NULL) {
1487 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1488 SQLITE3_FINALIZE(stmt);
1489 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1492 _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1493 _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
1494 _storage->storage_type = (int)sqlite3_column_int(stmt, 2);
1496 if (callback((media_storage_h)_storage, user_data) == false) {
1497 media_storage_destroy((media_storage_h) _storage);
1501 media_storage_destroy((media_storage_h) _storage);
1504 SQLITE3_FINALIZE(stmt);
1508 #ifdef _USE_TVPD_MODE
1509 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)
1511 int ret = MEDIA_CONTENT_ERROR_NONE;
1512 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1513 char *tmp_query = NULL;
1514 char *condition_query = NULL;
1515 char *option_query = NULL;
1516 sqlite3_stmt *stmt = NULL;
1517 attribute_h attr = NULL;
1518 filter_s *_filter = (filter_s*)filter;
1520 attr = _content_get_attirbute_handle();
1521 memset(select_query, 0x00, sizeof(select_query));
1523 if (group_name != NULL) {
1524 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1525 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1527 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
1529 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1531 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1532 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1534 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
1537 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1538 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1539 if (tmp_query != NULL)
1540 sqlite3_free(tmp_query);
1544 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1545 if (tmp_query != NULL)
1546 sqlite3_free(tmp_query);
1547 SAFE_FREE(condition_query);
1548 SAFE_FREE(option_query);
1549 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1551 while (sqlite3_step(stmt) == SQLITE_ROW) {
1552 media_pvr_s *item = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1554 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1555 SQLITE3_FINALIZE(stmt);
1556 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1559 _media_pvr_item_get_detail(stmt, (media_pvr_h)item);
1561 if (callback((media_pvr_h)item, user_data) == false) {
1562 media_info_destroy((media_pvr_h)item);
1566 media_pvr_destroy((media_pvr_h)item);
1569 SQLITE3_FINALIZE(stmt);
1575 MEDIA_PVR_MEDIA_ID = 0,
1576 MEDIA_PVR_STORAGE_ID,
1580 MEDIA_PVR_TIME_ZONE,
1584 MEDIA_PVR_CHANNEL_TYPE,
1585 MEDIA_PVR_CHANNEL_NAME,
1586 MEDIA_PVR_CHANNEL_NUM,
1587 MEDIA_PVR_SERVICE_PROFILE,
1588 MEDIA_PVR_PROGRAM_TITLE,
1589 MEDIA_PVR_PROGRAM_NUM,
1590 MEDIA_PVR_PROGRAM_CRID,
1595 MEDIA_PVR_EMBARGO_TIME,
1596 MEDIA_PVR_EXPIRY_TIME,
1597 MEDIA_PVR_START_TIME,
1598 MEDIA_PVR_PROGRAM_START_TIME,
1599 MEDIA_PVR_PROGRAM_END_TIME,
1600 MEDIA_PVR_PROGRAM_DATE,
1601 MEDIA_PVR_PARENTAL_RATING,
1602 MEDIA_PVR_TIMER_RECORD,
1603 MEDIA_PVR_SERIES_RECORD,
1608 MEDIA_PVR_HARDOF_HEARINGRADIO,
1609 MEDIA_PVR_DATA_SERVICE,
1610 MEDIA_PVR_CONTENT_LOCK,
1611 MEDIA_PVR_CONTENT_WATCH,
1612 MEDIA_PVR_HAS_AUDIO_ONLY,
1613 MEDIA_PVR_IS_LOCAL_RECORDED,
1614 MEDIA_PVR_RESOLUTION,
1615 MEDIA_PVR_ASPECTRATIO,
1616 MEDIA_PVR_MODIFIED_MONTH,
1617 MEDIA_PVR_SPORTS_TYPE,
1618 MEDIA_PVR_GUIDANCE_LENGTH,
1620 MEDIA_PVR_PLAY_COUNT,
1621 MEDIA_PVR_PRIVATE_DATA,
1622 MEDIA_PVR_HIGHLIGHT,
1623 } media_pvr_field_e;
1625 void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
1627 media_pvr_s *_pvr = (media_pvr_s*)pvr;
1629 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID)))
1630 _pvr->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID));
1632 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID)))
1633 _pvr->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID));
1635 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH)))
1636 _pvr->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH));
1638 _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
1640 _pvr->duration = (int)sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
1642 _pvr->timezone = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
1644 _pvr->ptc = (int)sqlite3_column_int(stmt, MEDIA_PVR_PTC);
1646 _pvr->major = (int)sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
1648 _pvr->minor = (int)sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
1650 _pvr->channel_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
1652 _pvr->service_profile = (unsigned int)sqlite3_column_int(stmt, MEDIA_PVR_SERVICE_PROFILE);
1654 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME)))
1655 _pvr->channel_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME));
1657 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM)))
1658 _pvr->channel_num = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM));
1660 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE)))
1661 _pvr->program_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE));
1663 _pvr->program_num = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
1665 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID)))
1666 _pvr->program_crid = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID));
1668 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE)))
1669 _pvr->guidance = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE));
1671 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS)))
1672 _pvr->synopsis = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS));
1674 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE)))
1675 _pvr->genre = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE));
1677 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE)))
1678 _pvr->language = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE));
1680 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH)))
1681 _pvr->modified_month = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH));
1683 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA)))
1684 _pvr->private_data = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA));
1686 _pvr->embargo_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
1688 _pvr->expiry_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
1690 _pvr->start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
1692 _pvr->program_start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
1694 _pvr->program_end_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
1696 _pvr->program_date = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
1698 _pvr->parental_rating = (int)sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
1700 _pvr->timer_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
1702 _pvr->series_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
1704 _pvr->hd = (int)sqlite3_column_int(stmt, MEDIA_PVR_HD);
1706 _pvr->subtitle = (int)sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
1708 _pvr->ttx = (int)sqlite3_column_int(stmt, MEDIA_PVR_TTX);
1710 _pvr->ad = (int)sqlite3_column_int(stmt, MEDIA_PVR_AD);
1712 _pvr->hard_of_hearing_radio = (int)sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
1714 _pvr->data_service = (int)sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
1716 _pvr->content_lock = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
1718 _pvr->content_watch = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
1720 _pvr->has_audio_only = (int)sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
1722 _pvr->is_local_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
1724 _pvr->resolution = (int)sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
1726 _pvr->aspectratio = (int)sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
1728 _pvr->sports_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
1730 _pvr->guidance_length = (int)sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
1732 _pvr->tvmode = (int)sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
1734 _pvr->play_count = (int)sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
1736 _pvr->highlight = (int)sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
1741 int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
1743 int ret = MEDIA_CONTENT_ERROR_NONE;
1744 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1745 char *condition_query = NULL;
1746 char *option_query = NULL;
1747 sqlite3_stmt *stmt = NULL;
1748 attribute_h attr = NULL;
1749 filter_s *_filter = (filter_s*)filter;
1751 attr = _content_get_attirbute_handle();
1752 memset(select_query, 0x00, sizeof(select_query));
1754 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1755 snprintf(select_query, sizeof(select_query), SELECT_PVR_LIST_BY_STORAGE_ID, _filter->storage_id);
1757 SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
1759 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1760 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1762 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1763 SAFE_FREE(condition_query);
1764 SAFE_FREE(option_query);
1765 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1767 while (sqlite3_step(stmt) == SQLITE_ROW) {
1768 media_pvr_s *_pvr = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1771 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1772 SQLITE3_FINALIZE(stmt);
1773 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1776 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
1778 if (callback((media_pvr_h)_pvr, user_data) == false) {
1779 media_pvr_destroy((media_pvr_h) _pvr);
1783 media_pvr_destroy((media_pvr_h) _pvr);
1786 SQLITE3_FINALIZE(stmt);
1792 int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id)
1794 int ret = MEDIA_CONTENT_ERROR_NONE;
1795 sqlite3_stmt *stmt = NULL;
1796 char *select_query = NULL;
1798 select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
1800 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
1801 SQLITE3_SAFE_FREE(select_query);
1802 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1804 if (sqlite3_step(stmt) == SQLITE_ROW) {
1805 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0))) {
1806 if (!SAFE_STRLCPY(storage_id, (const char *)sqlite3_column_text(stmt, 0), MEDIA_CONTENT_UUID_SIZE+1)) {
1807 media_content_error("Storage id copy fail");
1808 ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION;
1812 media_content_error("There's no media!!");
1813 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1816 SQLITE3_FINALIZE(stmt);
1821 #ifdef _USE_TVPD_MODE
1823 MEDIA_UHD_MEDIA_ID = 0,
1824 MEDIA_UHD_STORAGE_ID,
1827 MEDIA_UHD_CONTENT_ID,
1828 MEDIA_UHD_CONTENT_TITLE,
1829 MEDIA_UHD_FILE_NAME,
1830 MEDIA_UHD_FOLDER_ID,
1831 MEDIA_UHD_RELEASE_DATE,
1832 MEDIA_UHD_MODIFIED_TIME,
1833 MEDIA_UHD_PLAYED_POSITION,
1835 MEDIA_UHD_PLAYED_COUNT,
1836 } media_uhd_field_e;
1838 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
1840 media_uhd_s *_uhd = (media_uhd_s*)uhd;
1842 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID)))
1843 _uhd->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID));
1845 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID)))
1846 _uhd->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID));
1848 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH)))
1849 _uhd->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH));
1851 _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE);
1853 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID)))
1854 _uhd->content_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID));
1856 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE)))
1857 _uhd->content_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE));
1859 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME)))
1860 _uhd->file_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME));
1862 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE)))
1863 _uhd->release_date = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE));
1865 _uhd->modified_time = (int)sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
1866 _uhd->played_position = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
1867 _uhd->sub_type = (int)sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
1868 _uhd->played_count = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
1873 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
1875 int ret = MEDIA_CONTENT_ERROR_NONE;
1876 char select_query[DEFAULT_QUERY_SIZE] = {0, };
1877 char *condition_query = NULL;
1878 char *option_query = NULL;
1879 sqlite3_stmt *stmt = NULL;
1880 attribute_h attr = NULL;
1881 filter_s *_filter = (filter_s*)filter;
1883 attr = _content_get_attirbute_handle();
1884 memset(select_query, 0x00, sizeof(select_query));
1886 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1887 snprintf(select_query, sizeof(select_query), SELECT_UHD_LIST_BY_STORAGE_ID, _filter->storage_id);
1889 SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
1891 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1892 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1894 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1895 SAFE_FREE(condition_query);
1896 SAFE_FREE(option_query);
1897 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1899 while (sqlite3_step(stmt) == SQLITE_ROW) {
1900 media_uhd_s *_uhd = (media_uhd_s*)calloc(1, sizeof(media_uhd_s));
1903 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1904 SQLITE3_FINALIZE(stmt);
1905 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1908 _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd);
1910 if (callback((media_uhd_h)_uhd, user_data) == false) {
1911 media_uhd_destroy((media_uhd_h) _uhd);
1914 media_uhd_destroy((media_uhd_h) _uhd);
1917 SQLITE3_FINALIZE(stmt);