add service_profile field for pvr table
[platform/core/api/media-content.git] / src / media_db.c
1 /*
2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16
17
18 #include <media_content.h>
19 #include <media_info_private.h>
20 #include <media_util_private.h>
21
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);
24
25 static char * __media_db_get_group_name(media_group_e group)
26 {
27         switch (group) {
28         case MEDIA_CONTENT_GROUP_DISPLAY_NAME:
29                 return (char *)DB_FIELD_MEDIA_DISPLAY_NAME;
30         case MEDIA_CONTENT_GROUP_TYPE:
31                 return (char *)DB_FIELD_MEDIA_TYPE;
32         case MEDIA_CONTENT_GROUP_MIME_TYPE:
33                 return (char *) DB_FIELD_MEDIA_MIME_TYPE;
34         case MEDIA_CONTENT_GROUP_SIZE:
35                 return (char *) DB_FIELD_MEDIA_SIZE;
36         case MEDIA_CONTENT_GROUP_ADDED_TIME:
37                 return (char *) DB_FIELD_MEDIA_ADDED_TIME;
38         case MEDIA_CONTENT_GROUP_MODIFIED_TIME:
39                 return (char *) DB_FIELD_MEDIA_MODIFIED_TIME;
40         case MEDIA_CONTENT_GROUP_TITLE:
41                 return (char *) DB_FIELD_MEDIA_TITLE;
42         case MEDIA_CONTENT_GROUP_ARTIST:
43                 return (char *) DB_FIELD_MEDIA_ARTIST;
44         case MEDIA_CONTENT_GROUP_ALBUM_ARTIST:
45                 return (char *) DB_FIELD_MEDIA_ALBUM_ARTIST;
46         case MEDIA_CONTENT_GROUP_GENRE:
47                 return (char *) DB_FIELD_MEDIA_GENRE;
48         case MEDIA_CONTENT_GROUP_COMPOSER:
49                 return (char *) DB_FIELD_MEDIA_COMPOSER;
50         case MEDIA_CONTENT_GROUP_YEAR:
51                 return (char *) DB_FIELD_MEDIA_YEAR;
52         case MEDIA_CONTENT_GROUP_RECORDED_DATE:
53                 return (char *) DB_FIELD_MEDIA_RECORDED_DATE;
54         case MEDIA_CONTENT_GROUP_COPYRIGHT:
55                 return (char *) DB_FIELD_MEDIA_COPYRIGHT;
56         case MEDIA_CONTENT_GROUP_TRACK_NUM:
57                 return (char *) DB_FIELD_MEDIA_TRACK_NUM;
58         case MEDIA_CONTENT_GROUP_DESCRIPTION:
59                 return (char *) DB_FIELD_MEDIA_DESCRIPTION;
60         case MEDIA_CONTENT_GROUP_LONGITUDE:
61                 return (char *) DB_FIELD_MEDIA_LONGITUDE;
62         case MEDIA_CONTENT_GROUP_LATITUDE:
63                 return (char *) DB_FIELD_MEDIA_LATITUDE;
64         case MEDIA_CONTENT_GROUP_ALTITUDE:
65                 return (char *) DB_FIELD_MEDIA_ALTITUDE;
66         case MEDIA_CONTENT_GROUP_BURST_IMAGE:
67                 return (char *) DB_FIELD_MEDIA_BURST_ID;
68         case MEDIA_CONTENT_GROUP_RATING:
69                 return (char *) DB_FIELD_MEDIA_RATING;
70         case MEDIA_CONTENT_GROUP_AUTHOR:
71                 return (char *) DB_FIELD_MEDIA_AUTHOR;
72         case MEDIA_CONTENT_GROUP_PROVIDER:
73                 return (char *) DB_FIELD_MEDIA_PROVIDER;
74         case MEDIA_CONTENT_GROUP_CONTENT_NAME:
75                 return (char *) DB_FIELD_MEDIA_CONTENT_NAME;
76         case MEDIA_CONTENT_GROUP_CATEGORY:
77                 return (char *) DB_FIELD_MEDIA_CATEGORY;
78         case MEDIA_CONTENT_GROUP_LOCATION_TAG:
79                 return (char *) DB_FIELD_MEDIA_LOCATION_TAG;
80         case MEDIA_CONTENT_GROUP_AGE_RATING:
81                 return (char *) DB_FIELD_MEDIA_AGE_RATING;
82         case MEDIA_CONTENT_GROUP_KEYWORD:
83                 return (char *) DB_FIELD_MEDIA_KEYWORD;
84         case MEDIA_CONTENT_GROUP_WEATHER:
85                 return (char *) DB_FIELD_MEDIA_WEATHER;
86 #ifdef _USE_TVPD_MODE
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;
91 #endif
92 #ifdef _USE_SENIOR_MODE
93         case MEDIA_CONTENT_GROUP_CONTACT:
94                 return (char *) DB_FIELD_MEDIA_CONTACT;
95 #endif
96 #ifdef _USE_TVPD_MODE
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;
195 #endif
196         default:
197                 return NULL;
198         }
199
200         return NULL;
201 }
202
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)
204 {
205         int ret = MEDIA_CONTENT_ERROR_NONE;
206         filter_s *_filter = NULL;
207
208         if (filter != NULL) {
209                 _filter = (filter_s*)filter;
210
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);
214                 }
215
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);
221                                 return ret;
222                         }
223                 } else {
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);
228                                 return ret;
229                         }
230                 }
231
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);
235                 }
236         }
237
238         return ret;
239 }
240
241 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
242 {
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;
250
251         attr = _content_get_attirbute_handle();
252         memset(select_query, 0x00, sizeof(select_query));
253
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:
259                 {
260                         media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
261                         return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
262                 }
263                 break;
264         case MEDIA_GROUP_ALBUM:
265                 attr = _content_get_alias_attirbute_handle();
266
267                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
268                         snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id);
269                 else
270                         snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_VIEW_MEDIA);
271
272                 break;
273         case MEDIA_GROUP_FOLDER:
274                 attr = _content_get_alias_attirbute_handle();
275
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);
278                 else
279                         snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_VIEW_MEDIA);
280
281                 break;
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;
286                 }
287                 break;
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;
292                 }
293                 break;
294         case MEDIA_GROUP_BOOKMARK:
295                 attr = _content_get_alias_attirbute_handle();
296
297                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
298                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id);
299                 else
300                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_VIEW_MEDIA);
301
302                 break;
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;
307                 }
308                 break;
309         case MEDIA_GROUP_FACE:
310                 attr = _content_get_alias_attirbute_handle();
311
312                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
313                         snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, _filter->storage_id);
314                 else
315                         snprintf(select_query, sizeof(select_query), SELECT_FACE_COUNT, DB_VIEW_MEDIA);
316                 break;
317 #ifdef _USE_TVPD_MODE
318         case MEDIA_GROUP_PVR:
319         case MEDIA_GROUP_UHD:
320 #endif
321         default:
322                 {
323                         media_content_error("Invalid group type [%d]", group_type);
324                         return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
325                 }
326                 break;
327         }
328
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);
331
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);
336
337         if (sqlite3_step(stmt) == SQLITE_ROW)
338                 *group_count = (int)sqlite3_column_int(stmt, 0);
339
340         SQLITE3_FINALIZE(stmt);
341
342         return ret;
343 }
344
345 int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
346 {
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;
354
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);
361                 else
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);
366                 else
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);
371                 else
372                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group));
373         }
374 #else
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);
377         else
378                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_VIEW_MEDIA);
379 #endif
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);
382
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));
389
390         SAFE_FREE(condition_query);
391         SAFE_FREE(option_query);
392
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);
397
398         if (sqlite3_step(stmt) == SQLITE_ROW)
399                 *group_count = (int)sqlite3_column_int(stmt, 0);
400
401         SQLITE3_FINALIZE(stmt);
402
403         return ret;
404 }
405
406 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
407 {
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;
412         char *name = NULL;
413         sqlite3_stmt *stmt = NULL;
414         attribute_h attr = NULL;
415         filter_s *_filter = (filter_s*)filter;
416
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);
423                 else
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);
428                 else
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);
433                 else
434                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group));
435         }
436 #else
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);
439         else
440                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_VIEW_MEDIA);
441 #endif
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);
444
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);
449
450         while (sqlite3_step(stmt) == SQLITE_ROW) {
451                 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
452
453                 if (callback(name, user_data) == false) {
454                         SAFE_FREE(name);
455                         break;
456                 }
457
458                 SAFE_FREE(name);
459         }
460
461         SQLITE3_FINALIZE(stmt);
462
463         return ret;
464 }
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)
467 {
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;
473         char *name = NULL;
474         sqlite3_stmt *stmt = NULL;
475         attribute_h attr = NULL;
476         filter_s *_filter = (filter_s*)filter;
477
478         attr = _content_get_attirbute_handle();
479         memset(select_query, 0x00, sizeof(select_query));
480         memset(group_query, 0x00, sizeof(group_query));
481
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);
486         }
487
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);
491                 else
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);
496                 else
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);
501                 else
502                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name);
503         }
504
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);
507
508         if (STRING_VALID(option_query))
509                 snprintf(group_query, sizeof(group_query), "GROUP BY %s %s", group_name, option_query);
510         else
511                 snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name);
512
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);
517
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));
521
522                 if (callback(name, sqlite3_column_int(stmt, 1), user_data) == false) {
523                         SAFE_FREE(name);
524                         break;
525                 }
526
527                 SAFE_FREE(name);
528         }
529
530         SQLITE3_FINALIZE(stmt);
531
532         return ret;
533 }
534 #endif
535 int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data)
536 {
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;
544
545         attr = _content_get_alias_attirbute_handle();
546         memset(select_query, 0x00, sizeof(select_query));
547
548         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
549                 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, _filter->storage_id);
550         else
551                 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_VIEW_MEDIA);
552
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);
555
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);
560
561         while (sqlite3_step(stmt) == SQLITE_ROW) {
562                 media_album_s *album = (media_album_s*)calloc(1, sizeof(media_album_s));
563
564                 if (album == NULL) {
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;
568                 }
569
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));
574
575                 if (callback((media_album_h)album, user_data) == false) {
576                         media_album_destroy((media_album_h)album);
577                         break;
578                 }
579
580                 media_album_destroy((media_album_h)album);
581         }
582
583         SQLITE3_FINALIZE(stmt);
584
585         return ret;
586 }
587
588 int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_data)
589 {
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;
597
598         attr = _content_get_alias_attirbute_handle();
599         memset(select_query, 0x00, sizeof(select_query));
600
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);
603         else
604                 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_VIEW_MEDIA);
605
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);
608
609         ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
610
611         SAFE_FREE(condition_query);
612         SAFE_FREE(option_query);
613         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
614
615         while (sqlite3_step(stmt) == SQLITE_ROW) {
616                 media_folder_s *_folder = (media_folder_s*)calloc(1, sizeof(media_folder_s));
617
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;
622                 }
623
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);
631
632                 if (callback((media_folder_h)_folder, user_data) == false) {
633                         media_folder_destroy((media_folder_h) _folder);
634                         break;
635                 }
636
637                 media_folder_destroy((media_folder_h) _folder);
638         }
639
640         SQLITE3_FINALIZE(stmt);
641
642         return ret;
643 }
644
645 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
646 {
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;
653
654         attr = _content_get_attirbute_handle();
655         memset(select_query, 0x00, sizeof(select_query));
656
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;
660         }
661
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);
664
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);
669
670         while (sqlite3_step(stmt) == SQLITE_ROW) {
671                 media_playlist_s *_playlist = (media_playlist_s*)calloc(1, sizeof(media_playlist_s));
672
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;
677                 }
678
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));
682
683                 if (callback((media_playlist_h)_playlist, user_data) == false) {
684                         media_playlist_destroy((media_playlist_h)_playlist);
685                         break;
686                 }
687                 media_playlist_destroy((media_playlist_h)_playlist);
688         }
689
690         SQLITE3_FINALIZE(stmt);
691
692         return ret;
693 }
694
695 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
696 {
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;
703
704         attr = _content_get_attirbute_handle();
705         memset(select_query, 0x00, sizeof(select_query));
706
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);
709
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);
712
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);
717
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*/
721
722                 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
723
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;
728                 }
729
730                 _media_info_item_get_detail(stmt, (media_info_h)_media);
731
732                 if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) {
733                         media_info_destroy((media_info_h)_media);
734                         break;
735                 }
736                 media_info_destroy((media_info_h)_media);
737
738         }
739
740         SQLITE3_FINALIZE(stmt);
741
742         return ret;
743 }
744
745 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
746 {
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;
753
754         attr = _content_get_attirbute_handle();
755         memset(select_query, 0x00, sizeof(select_query));
756
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;
761                 }
762         } else
763                 snprintf(select_query, sizeof(select_query), SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
764
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);
767
768         SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
769
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);
774
775         while (sqlite3_step(stmt) == SQLITE_ROW) {
776                 media_tag_s *_tag = (media_tag_s*)calloc(1, sizeof(media_tag_s));
777
778                 if (_tag == NULL) {
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;
782                 }
783
784                 _tag->tag_id = (int)sqlite3_column_int(stmt, 0);
785                 _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
786
787                 if (callback((media_tag_h)_tag, user_data) == false) {
788                         media_tag_destroy((media_tag_h)_tag);
789                         break;
790                 }
791                 media_tag_destroy((media_tag_h)_tag);
792         }
793
794         SQLITE3_FINALIZE(stmt);
795
796         return ret;
797 }
798
799 int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
800 {
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;
808
809         attr = _content_get_alias_attirbute_handle();
810
811         memset(select_query, 0x00, sizeof(select_query));
812
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);
816                 else
817                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
818         } else {
819                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
820                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, _filter->storage_id);
821                 else
822                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, DB_VIEW_MEDIA);
823         }
824
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);
827
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);
832
833         while (sqlite3_step(stmt) == SQLITE_ROW) {
834                 media_bookmark_s *bookmark = (media_bookmark_s*)calloc(1, sizeof(media_bookmark_s));
835
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;
840                 }
841
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));
847
848                 if (callback((media_bookmark_h)bookmark, user_data) == false) {
849                         media_bookmark_destroy((media_bookmark_h)bookmark);
850                         break;
851                 }
852
853                 media_bookmark_destroy((media_bookmark_h)bookmark);
854         }
855
856         SQLITE3_FINALIZE(stmt);
857
858         return ret;
859
860 }
861
862 int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
863 {
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;
871
872         attr = _content_get_alias_attirbute_handle();
873
874         memset(select_query, 0x00, sizeof(select_query));
875
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);
879                 else
880                         snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
881         } else {
882                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
883                         snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, _filter->storage_id);
884                 else
885                         snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, DB_VIEW_MEDIA);
886         }
887
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);
890
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);
895
896         while (sqlite3_step(stmt) == SQLITE_ROW) {
897                 media_face_s *face = (media_face_s*)calloc(1, sizeof(media_face_s));
898
899                 if (face == NULL) {
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;
903                 }
904
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));
913
914                 if (callback((media_face_h)face, user_data) == false) {
915                         media_face_destroy((media_face_h)face);
916                         break;
917                 }
918
919                 media_face_destroy((media_face_h)face);
920         }
921
922         SQLITE3_FINALIZE(stmt);
923
924         return ret;
925
926 }
927
928 int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_list_e group_type, int *item_count)
929 {
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;
937
938         attr = _content_get_attirbute_handle();
939         memset(select_query, 0x00, sizeof(select_query));
940
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);
944                 else
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);
950         } else {
951                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
952                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
953         }
954
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);
957
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);
962
963         if (sqlite3_step(stmt) == SQLITE_ROW)
964                 *item_count = (int)sqlite3_column_int(stmt, 0);
965
966         SQLITE3_FINALIZE(stmt);
967
968         return ret;
969 }
970
971 int _media_db_get_group_item_count(const char *group_name, filter_h filter, group_list_e group_type, int *item_count)
972 {
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;
982
983         attr = _content_get_attirbute_handle();
984         memset(select_query, 0x00, sizeof(select_query));
985
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);
993                                 else
994                                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
995                                 is_simple = TRUE;
996                 } else {
997                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_VIEW_MEDIA);
998                 }
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);
1002                 else
1003                         tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1004
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();
1010
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);
1013                 else
1014                         tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
1015
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);
1019
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();
1023
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);
1026                 else
1027                         tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
1028
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);
1034                 else
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);
1039                 else
1040                         SAFE_STRLCAT(select_query, SELECT_UHD_COUNT, sizeof(select_query));
1041 #endif
1042         } else {
1043                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1044                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1045         }
1046
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);
1051                 return ret;
1052         }
1053
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));
1060
1061                 if (!is_simple)
1062                         SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1063
1064                 SAFE_FREE(condition_query);
1065                 SAFE_FREE(option_query);
1066         }
1067
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);
1074
1075         if (sqlite3_step(stmt) == SQLITE_ROW)
1076                 *item_count = (int)sqlite3_column_int(stmt, 0);
1077
1078         SQLITE3_FINALIZE(stmt);
1079
1080         return ret;
1081 }
1082
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)
1084 {
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;
1092
1093         attr = _content_get_attirbute_handle();
1094         memset(select_query, 0x00, sizeof(select_query));
1095
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);
1099                 else
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);
1104                 else
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);
1109                 else
1110                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_VIEW_MEDIA, group_id);
1111         } else {
1112                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1113                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1114         }
1115
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);
1118
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);
1123
1124         while (sqlite3_step(stmt) == SQLITE_ROW) {
1125                 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1126                 if (item == NULL) {
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;
1130                 }
1131
1132                 _media_info_item_get_detail(stmt, (media_info_h)item);
1133
1134                 if (callback((media_info_h)item, user_data) == false) {
1135                         media_info_destroy((media_info_h)item);
1136                         break;
1137                 }
1138
1139                 media_info_destroy((media_info_h)item);
1140         }
1141
1142         SQLITE3_FINALIZE(stmt);
1143
1144         return ret;
1145 }
1146
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)
1148 {
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;
1156
1157         attr = _content_get_attirbute_handle();
1158         memset(select_query, 0x00, sizeof(select_query));
1159
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);
1163                 else
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);
1168                 else
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);
1172         } else {
1173                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1174                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1175         }
1176
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);
1179
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);
1184
1185         while (sqlite3_step(stmt) == SQLITE_ROW) {
1186                 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1187                 if (item == NULL) {
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;
1191                 }
1192
1193                 _media_info_item_get_detail(stmt, (media_info_h)item);
1194
1195                 if (callback((media_info_h)item, user_data) == false) {
1196                         media_info_destroy((media_info_h)item);
1197                         break;
1198                 }
1199
1200                 media_info_destroy((media_info_h)item);
1201         }
1202
1203         SQLITE3_FINALIZE(stmt);
1204
1205         return ret;
1206 }
1207
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)
1210 {
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;
1222
1223         attr = _content_get_attirbute_handle();
1224
1225         memset(select_query1, 0x00, sizeof(select_query1));
1226
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);
1229         else
1230                 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1231
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");
1237                 return ret;
1238         }
1239
1240         memset(select_query2, 0x00, sizeof(select_query2));
1241
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);
1244         else
1245                 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1246
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");
1254                 return ret;
1255         }
1256
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);
1263
1264         while (sqlite3_step(stmt) == SQLITE_ROW) {
1265                 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1266                 if (item == NULL) {
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;
1270                 }
1271
1272                 _media_info_item_get_detail(stmt, (media_info_h)item);
1273
1274                 if (callback((media_info_h)item, user_data) == false) {
1275                         media_info_destroy((media_info_h)item);
1276                         break;
1277                 }
1278
1279                 media_info_destroy((media_info_h)item);
1280         }
1281
1282         SQLITE3_FINALIZE(stmt);
1283
1284         return ret;
1285 }
1286 #endif
1287
1288 int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count)
1289 {
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;
1298
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);
1306                         else
1307                                 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1308
1309                         SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1310                 } else {
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));
1313                         else
1314                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1315                 }
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);
1320                         else
1321                                 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1322
1323                         SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1324                 } else {
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));
1327                         else
1328                                 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1329                 }
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);
1334                         else
1335                                 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1336
1337                         SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1338                 } else {
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));
1341                         else
1342                                 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1343                 }
1344         }
1345 #else
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));
1350                 } else {
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));
1353                 }
1354         } else {
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));
1357                 else
1358                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1359         }
1360 #endif
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);
1365                 return ret;
1366         }
1367
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));
1374
1375         SAFE_FREE(condition_query);
1376         SAFE_FREE(option_query);
1377
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);
1384
1385         if (sqlite3_step(stmt) == SQLITE_ROW)
1386                 *item_count = (int)sqlite3_column_int(stmt, 0);
1387
1388         SQLITE3_FINALIZE(stmt);
1389
1390         return ret;
1391 }
1392
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)
1394 {
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;
1403
1404         attr = _content_get_attirbute_handle();
1405         memset(select_query, 0x00, sizeof(select_query));
1406
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);
1410                 else
1411                         tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1412
1413                 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1414         } else {
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));
1417                 else
1418                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1419         }
1420
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);
1425                 return ret;
1426         }
1427
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);
1434
1435         while (sqlite3_step(stmt) == SQLITE_ROW) {
1436                 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1437                 if (item == NULL) {
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;
1441                 }
1442
1443                 _media_info_item_get_detail(stmt, (media_info_h)item);
1444
1445                 if (callback((media_info_h)item, user_data) == false) {
1446                         media_info_destroy((media_info_h)item);
1447                         break;
1448                 }
1449
1450                 media_info_destroy((media_info_h)item);
1451         }
1452
1453         SQLITE3_FINALIZE(stmt);
1454
1455         return ret;
1456 }
1457
1458 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
1459 {
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;
1466
1467         attr = _content_get_attirbute_handle();
1468         memset(select_query, 0x00, sizeof(select_query));
1469
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;
1473         }
1474
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);
1477
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);
1482
1483         while (sqlite3_step(stmt) == SQLITE_ROW) {
1484                 media_storage_s *_storage = (media_storage_s*)calloc(1, sizeof(media_storage_s));
1485
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;
1490                 }
1491
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);
1495
1496                 if (callback((media_storage_h)_storage, user_data) == false) {
1497                         media_storage_destroy((media_storage_h) _storage);
1498                         break;
1499                 }
1500
1501                 media_storage_destroy((media_storage_h) _storage);
1502         }
1503
1504         SQLITE3_FINALIZE(stmt);
1505
1506         return ret;
1507 }
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)
1510 {
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;
1519
1520         attr = _content_get_attirbute_handle();
1521         memset(select_query, 0x00, sizeof(select_query));
1522
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);
1526                 else
1527                         tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
1528
1529                 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1530         } else {
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));
1533                 else
1534                         snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
1535         }
1536
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);
1541                 return ret;
1542         }
1543
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);
1550
1551         while (sqlite3_step(stmt) == SQLITE_ROW) {
1552                 media_pvr_s *item = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1553                 if (item == NULL) {
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;
1557                 }
1558
1559                 _media_pvr_item_get_detail(stmt, (media_pvr_h)item);
1560
1561                 if (callback((media_pvr_h)item, user_data) == false) {
1562                         media_info_destroy((media_pvr_h)item);
1563                         break;
1564                 }
1565
1566                 media_pvr_destroy((media_pvr_h)item);
1567         }
1568
1569         SQLITE3_FINALIZE(stmt);
1570
1571         return ret;
1572 }
1573
1574 typedef enum {
1575         MEDIA_PVR_MEDIA_ID = 0,
1576         MEDIA_PVR_STORAGE_ID,
1577         MEDIA_PVR_PATH,
1578         MEDIA_PVR_SIZE,
1579         MEDIA_PVR_DURATION,
1580         MEDIA_PVR_TIME_ZONE,
1581         MEDIA_PVR_PTC,
1582         MEDIA_PVR_MAJOR,
1583         MEDIA_PVR_MINOR,
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,
1591         MEDIA_PVR_GUIDANCE,
1592         MEDIA_PVR_SYNOPSIS,
1593         MEDIA_PVR_GENRE,
1594         MEDIA_PVR_LANGUAGE,
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,
1604         MEDIA_PVR_HD,
1605         MEDIA_PVR_SUBTITLE,
1606         MEDIA_PVR_TTX,
1607         MEDIA_PVR_AD,
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,
1619         MEDIA_PVR_TVMODE,
1620         MEDIA_PVR_PLAY_COUNT,
1621         MEDIA_PVR_PRIVATE_DATA,
1622         MEDIA_PVR_HIGHLIGHT,
1623 } media_pvr_field_e;
1624
1625 void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
1626 {
1627         media_pvr_s *_pvr = (media_pvr_s*)pvr;
1628
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));
1631
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));
1634
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));
1637
1638         _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
1639
1640         _pvr->duration = (int)sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
1641
1642         _pvr->timezone = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
1643
1644         _pvr->ptc = (int)sqlite3_column_int(stmt, MEDIA_PVR_PTC);
1645
1646         _pvr->major = (int)sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
1647
1648         _pvr->minor = (int)sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
1649
1650         _pvr->channel_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
1651
1652         _pvr->service_profile = (unsigned int)sqlite3_column_int(stmt, MEDIA_PVR_SERVICE_PROFILE);
1653
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));
1656
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));
1659
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));
1662
1663         _pvr->program_num = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
1664
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));
1667
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));
1670
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));
1673
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));
1676
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));
1679
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));
1682
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));
1685
1686         _pvr->embargo_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
1687
1688         _pvr->expiry_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
1689
1690         _pvr->start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
1691
1692         _pvr->program_start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
1693
1694         _pvr->program_end_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
1695
1696         _pvr->program_date = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
1697
1698         _pvr->parental_rating = (int)sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
1699
1700         _pvr->timer_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
1701
1702         _pvr->series_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
1703
1704         _pvr->hd = (int)sqlite3_column_int(stmt, MEDIA_PVR_HD);
1705
1706         _pvr->subtitle = (int)sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
1707
1708         _pvr->ttx = (int)sqlite3_column_int(stmt, MEDIA_PVR_TTX);
1709
1710         _pvr->ad = (int)sqlite3_column_int(stmt, MEDIA_PVR_AD);
1711
1712         _pvr->hard_of_hearing_radio = (int)sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
1713
1714         _pvr->data_service = (int)sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
1715
1716         _pvr->content_lock = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
1717
1718         _pvr->content_watch = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
1719
1720         _pvr->has_audio_only = (int)sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
1721
1722         _pvr->is_local_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
1723
1724         _pvr->resolution = (int)sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
1725
1726         _pvr->aspectratio = (int)sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
1727
1728         _pvr->sports_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
1729
1730         _pvr->guidance_length = (int)sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
1731
1732         _pvr->tvmode = (int)sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
1733
1734         _pvr->play_count = (int)sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
1735
1736         _pvr->highlight = (int)sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
1737
1738         return;
1739 }
1740
1741 int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
1742 {
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;
1750
1751         attr = _content_get_attirbute_handle();
1752         memset(select_query, 0x00, sizeof(select_query));
1753
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);
1756         else
1757                 SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
1758
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);
1761
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);
1766
1767         while (sqlite3_step(stmt) == SQLITE_ROW) {
1768                 media_pvr_s *_pvr = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1769
1770                 if (_pvr == NULL) {
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;
1774                 }
1775
1776                 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
1777
1778                 if (callback((media_pvr_h)_pvr, user_data) == false) {
1779                         media_pvr_destroy((media_pvr_h) _pvr);
1780                         break;
1781                 }
1782
1783                 media_pvr_destroy((media_pvr_h) _pvr);
1784         }
1785
1786         SQLITE3_FINALIZE(stmt);
1787
1788         return ret;
1789 }
1790 #endif
1791
1792 int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id)
1793 {
1794         int ret = MEDIA_CONTENT_ERROR_NONE;
1795         sqlite3_stmt *stmt = NULL;
1796         char *select_query = NULL;
1797
1798         select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
1799
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);
1803
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;
1809                         }
1810                 }
1811         } else {
1812                 media_content_error("There's no media!!");
1813                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1814         }
1815
1816         SQLITE3_FINALIZE(stmt);
1817
1818         return ret;
1819 }
1820
1821 #ifdef _USE_TVPD_MODE
1822 typedef enum {
1823         MEDIA_UHD_MEDIA_ID = 0,
1824         MEDIA_UHD_STORAGE_ID,
1825         MEDIA_UHD_PATH,
1826         MEDIA_UHD_SIZE,
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,
1834         MEDIA_UHD_SUB_TYPE,
1835         MEDIA_UHD_PLAYED_COUNT,
1836 } media_uhd_field_e;
1837
1838 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
1839 {
1840         media_uhd_s *_uhd = (media_uhd_s*)uhd;
1841
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));
1844
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));
1847
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));
1850
1851         _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE);
1852
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));
1855
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));
1858
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));
1861
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));
1864
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);
1869
1870         return;
1871 }
1872
1873 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
1874 {
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;
1882
1883         attr = _content_get_attirbute_handle();
1884         memset(select_query, 0x00, sizeof(select_query));
1885
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);
1888         else
1889                 SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
1890
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);
1893
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);
1898
1899         while (sqlite3_step(stmt) == SQLITE_ROW) {
1900                 media_uhd_s *_uhd = (media_uhd_s*)calloc(1, sizeof(media_uhd_s));
1901
1902                 if (_uhd == NULL) {
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;
1906                 }
1907
1908                 _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd);
1909
1910                 if (callback((media_uhd_h)_uhd, user_data) == false) {
1911                         media_uhd_destroy((media_uhd_h) _uhd);
1912                         break;
1913                 }
1914                 media_uhd_destroy((media_uhd_h) _uhd);
1915         }
1916
1917         SQLITE3_FINALIZE(stmt);
1918
1919         return ret;
1920 }
1921 #endif