Modify folder_id type
[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 const char * __media_db_get_group_name(media_group_e group)
23 {
24         switch (group) {
25         case MEDIA_CONTENT_GROUP_DISPLAY_NAME:
26                 return DB_FIELD_MEDIA_DISPLAY_NAME;
27         case MEDIA_CONTENT_GROUP_TYPE:
28                 return DB_FIELD_MEDIA_TYPE;
29         case MEDIA_CONTENT_GROUP_MIME_TYPE:
30                 return DB_FIELD_MEDIA_MIME_TYPE;
31         case MEDIA_CONTENT_GROUP_SIZE:
32                 return DB_FIELD_MEDIA_SIZE;
33         case MEDIA_CONTENT_GROUP_ADDED_TIME:
34                 return DB_FIELD_MEDIA_ADDED_TIME;
35         case MEDIA_CONTENT_GROUP_MODIFIED_TIME:
36                 return DB_FIELD_MEDIA_MODIFIED_TIME;
37         case MEDIA_CONTENT_GROUP_TITLE:
38                 return DB_FIELD_MEDIA_TITLE;
39         case MEDIA_CONTENT_GROUP_ARTIST:
40                 return DB_FIELD_MEDIA_ARTIST;
41         case MEDIA_CONTENT_GROUP_ALBUM_ARTIST:
42                 return DB_FIELD_MEDIA_ALBUM_ARTIST;
43         case MEDIA_CONTENT_GROUP_GENRE:
44                 return DB_FIELD_MEDIA_GENRE;
45         case MEDIA_CONTENT_GROUP_COMPOSER:
46                 return DB_FIELD_MEDIA_COMPOSER;
47         case MEDIA_CONTENT_GROUP_YEAR:
48                 return DB_FIELD_MEDIA_YEAR;
49         case MEDIA_CONTENT_GROUP_RECORDED_DATE:
50                 return DB_FIELD_MEDIA_RECORDED_DATE;
51         case MEDIA_CONTENT_GROUP_COPYRIGHT:
52                 return DB_FIELD_MEDIA_COPYRIGHT;
53         case MEDIA_CONTENT_GROUP_TRACK_NUM:
54                 return DB_FIELD_MEDIA_TRACK_NUM;
55         case MEDIA_CONTENT_GROUP_DESCRIPTION:
56                 return DB_FIELD_MEDIA_DESCRIPTION;
57         case MEDIA_CONTENT_GROUP_LONGITUDE:
58                 return DB_FIELD_MEDIA_LONGITUDE;
59         case MEDIA_CONTENT_GROUP_LATITUDE:
60                 return DB_FIELD_MEDIA_LATITUDE;
61         case MEDIA_CONTENT_GROUP_ALTITUDE:
62                 return DB_FIELD_MEDIA_ALTITUDE;
63         case MEDIA_CONTENT_GROUP_RATING:
64                 return DB_FIELD_MEDIA_RATING;
65 #ifdef _USE_TVPD_MODE
66         case MEDIA_CONTENT_GROUP_MODIFIED_MONTH:
67                 return DB_FIELD_MEDIA_MODIFIED_DATE;
68         case MEDIA_CONTENT_GROUP_MODIFIED_DATE:
69                 return DB_FIELD_MEDIA_MODIFIED_DATE;
70         case MEDIA_CONTENT_GROUP_ALBUM:
71                 return DB_FIELD_MEDIA_ALBUM;
72         case MEDIA_PVR_GROUP_DURATION:
73                 return DB_FIELD_PVR_DURATION;
74         case MEDIA_PVR_GROUP_TIME_ZONE:
75                 return DB_FIELD_PVR_TIME_ZONE;
76         case MEDIA_PVR_GROUP_PTC:
77                 return DB_FIELD_PVR_PTC;
78         case MEDIA_PVR_GROUP_MAJOR:
79                 return DB_FIELD_PVR_MAJOR;
80         case MEDIA_PVR_GROUP_MINOR:
81                 return DB_FIELD_PVR_MINOR;
82         case MEDIA_PVR_GROUP_CHANNEL_TYPE:
83                 return DB_FIELD_PVR_CHANNEL_TYPE;
84         case MEDIA_PVR_GROUP_CHANNEL_NAME:
85                 return DB_FIELD_PVR_CHANNEL_NAME;
86         case MEDIA_PVR_GROUP_CHANNEL_NUM:
87                 return DB_FIELD_PVR_CHANNEL_NUM;
88         case MEDIA_PVR_GROUP_PROGRAM_TITLE:
89                 return DB_FIELD_PVR_PROGRAM_TITLE;
90         case MEDIA_PVR_GROUP_PROGRAM_NUM:
91                 return DB_FIELD_PVR_PROGRAM_NUM;
92         case MEDIA_PVR_GROUP_PROGRAM_CRID:
93                 return DB_FIELD_PVR_PROGRAM_CRID;
94         case MEDIA_PVR_GROUP_GUIDANCE:
95                 return DB_FIELD_PVR_GUIDANCE;
96         case MEDIA_PVR_GROUP_SYNOPSIS:
97                 return DB_FIELD_PVR_SYNOPSIS;
98         case MEDIA_PVR_GROUP_GENRE:
99                 return DB_FIELD_PVR_GENRE;
100         case MEDIA_PVR_GROUP_LANGUAGE:
101                 return DB_FIELD_PVR_LANGUAGE;
102         case MEDIA_PVR_GROUP_EMBARGO_TIME:
103                 return DB_FIELD_PVR_EMBARGO_TIME;
104         case MEDIA_PVR_GROUP_EXPIRY_TIME:
105                 return DB_FIELD_PVR_EXPIRY_TIME;
106         case MEDIA_PVR_GROUP_START_TIME:
107                 return DB_FIELD_PVR_START_TIME;
108         case MEDIA_PVR_GROUP_PROGRAM_START_TIME:
109                 return DB_FIELD_PVR_PROGRAM_START_TIME;
110         case MEDIA_PVR_GROUP_PROGRAM_END_TIME:
111                 return DB_FIELD_PVR_PROGRAM_END_TIME;
112         case MEDIA_PVR_GROUP_PROGRAM_DATE:
113                 return DB_FIELD_PVR_PROGRAM_DATE;
114         case MEDIA_PVR_GROUP_PARENTAL_RATING:
115                 return DB_FIELD_PVR_PARENTAL_RATING;
116         case MEDIA_PVR_GROUP_TIMER_RECORD:
117                 return DB_FIELD_PVR_TIMER_RECORD;
118         case MEDIA_PVR_GROUP_SERIES_RECORD:
119                 return DB_FIELD_PVR_SERIES_RECORD;
120         case MEDIA_PVR_GROUP_HD:
121                 return DB_FIELD_PVR_HD;
122         case MEDIA_PVR_GROUP_SUBTITLE:
123                 return DB_FIELD_PVR_SUBTITLE;
124         case MEDIA_PVR_GROUP_TTX:
125                 return DB_FIELD_PVR_TTX;
126         case MEDIA_PVR_GROUP_AD:
127                 return DB_FIELD_PVR_AD;
128         case MEDIA_PVR_GROUP_HARDOF_HEARINGRADIO:
129                 return DB_FIELD_PVR_HARDOF_HEARINGRADIO;
130         case MEDIA_PVR_GROUP_DATA_SERVICE:
131                 return DB_FIELD_PVR_DATA_SERVICE;
132         case MEDIA_PVR_GROUP_CONTENT_LOCK:
133                 return DB_FIELD_PVR_CONTENT_LOCK;
134         case MEDIA_PVR_GROUP_CONTENT_WATCH:
135                 return DB_FIELD_PVR_CONTENT_WATCH;
136         case MEDIA_PVR_GROUP_HAS_AUDIO_ONLY:
137                 return DB_FIELD_PVR_HAS_AUDIO_ONLY;
138         case MEDIA_PVR_GROUP_IS_LOCAL_RECORDED:
139                 return DB_FIELD_PVR_IS_LOCAL_RECORD;
140         case MEDIA_PVR_GROUP_RESOLUTION:
141                 return DB_FIELD_PVR_RESOLUTION;
142         case MEDIA_PVR_GROUP_ASPECTRATIO:
143                 return DB_FIELD_PVR_ASPECTRATIO;
144         case MEDIA_PVR_GROUP_MODIFIED_MONTH:
145                 return DB_FIELD_PVR_MODIFIED_DATE;
146         case MEDIA_PVR_GROUP_MODIFIED_DATE:
147                 return DB_FIELD_PVR_MODIFIED_DATE;
148         case MEDIA_PVR_GROUP_SPORTS_TYPE:
149                 return DB_FIELD_PVR_SPORTS_TYPE;
150         case MEDIA_PVR_GROUP_GUIDANCE_LENGTH:
151                 return DB_FIELD_PVR_GUIDANCE_LENGTH;
152         case MEDIA_PVR_GROUP_TVMODE:
153                 return DB_FIELD_PVR_TVMODE;
154         case MEDIA_PVR_GROUP_PLAY_COUNT:
155                 return DB_FIELD_PVR_PLAY_COUNT;
156         case MEDIA_PVR_GROUP_PRIVATE_DATA:
157                 return DB_FIELD_PVR_PRIVATE_DATA;
158         case MEDIA_UHD_GROUP_CONTENT_TITLE:
159                 return DB_FIELD_UHD_CONTENT_TITLE;
160         case MEDIA_UHD_GROUP_RELEASE_DATE:
161                 return DB_FIELD_UHD_RELEASE_DATE;
162         case MEDIA_UHD_GROUP_SUB_TYPE:
163                 return DB_FIELD_UHD_SUB_TYPE;
164         case MEDIA_UHD_GROUP_FILE_NAME:
165                 return DB_FIELD_UHD_FILE_NAME;
166         case MEDIA_UHD_GROUP_PLAYED_COUNT:
167                 return DB_FIELD_UHD_PLAYED_COUNT;
168 #endif
169         default:
170                 return NULL;
171         }
172
173         return NULL;
174 }
175
176 static int __media_db_make_query(filter_h filter, char **condition_query, char **option_query)
177 {
178         int ret = MEDIA_CONTENT_ERROR_NONE;
179         filter_s *_filter = (filter_s *)filter;
180
181         content_retv_if(!_filter, MEDIA_CONTENT_ERROR_NONE);
182
183         if (STRING_VALID(_filter->condition)) {
184                 ret = _media_filter_build_condition(_filter->is_full_condition, _filter->condition, _filter->condition_collate_type, condition_query);
185                 content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
186         }
187
188         ret = _media_filter_build_option(filter, option_query);
189         if (ret != MEDIA_CONTENT_ERROR_NONE)
190                 g_free(*condition_query);
191
192         return ret;
193 }
194
195 #ifdef _USE_TVPD_MODE
196 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
197 {
198         int ret = MEDIA_CONTENT_ERROR_NONE;
199         sqlite3_stmt *stmt = NULL;
200         char *select_query = NULL;
201         char *condition_query = NULL;
202         char *option_query = NULL;
203         filter_s *_filter = (filter_s *)filter;
204
205         switch (group_type) {
206         case MEDIA_GROUP_ALBUM:
207                 if (_filter && STRING_VALID(_filter->storage_id))
208                         select_query = g_strdup_printf(SELECT_ALBUM_COUNT, _filter->storage_id);
209                 else
210                         select_query = g_strdup_printf(SELECT_ALBUM_COUNT, DB_VIEW_MEDIA);
211                 break;
212
213         case MEDIA_GROUP_FOLDER:
214                 if (_filter && STRING_VALID(_filter->storage_id))
215                         select_query = g_strdup_printf(SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
216                 else
217                         select_query = g_strdup_printf(SELECT_FOLDER_COUNT, DB_VIEW_MEDIA);
218                 break;
219
220         case MEDIA_GROUP_PLAYLIST:
221                 select_query = g_strdup(SELECT_PLAYLIST_COUNT);
222                 break;
223
224         case MEDIA_GROUP_TAG:
225                 select_query = g_strdup(SELECT_TAG_COUNT);
226                 break;
227
228         case MEDIA_GROUP_BOOKMARK:
229                 if (_filter && STRING_VALID(_filter->storage_id))
230                         select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT, _filter->storage_id);
231                 else
232                         select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT, DB_VIEW_MEDIA);
233
234                 break;
235
236         case MEDIA_GROUP_FACE:
237                 if (_filter && STRING_VALID(_filter->storage_id))
238                         select_query = g_strdup_printf(SELECT_FACE_COUNT, _filter->storage_id);
239                 else
240                         select_query = g_strdup_printf(SELECT_FACE_COUNT, DB_VIEW_MEDIA);
241                 break;
242
243         default:
244                 content_error("Invalid group type [%d]", group_type);
245                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
246         }
247
248         ret = __media_db_make_query(filter, &condition_query, &option_query);
249         if (ret != MEDIA_CONTENT_ERROR_NONE) {
250                 g_free(select_query);
251                 return ret;
252         }
253
254         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
255         g_free(select_query);
256         g_free(condition_query);
257         g_free(option_query);
258         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
259
260         if (sqlite3_step(stmt) == SQLITE_ROW)
261                 *group_count = sqlite3_column_int(stmt, 0);
262
263         SQLITE3_FINALIZE(stmt);
264
265         return ret;
266 }
267
268 int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
269 {
270         int ret = MEDIA_CONTENT_ERROR_NONE;
271         sqlite3_stmt *stmt = NULL;
272         char select_query[MAX_QUERY_SIZE] = {0, };
273         char *condition_query = NULL;
274         char *option_query = NULL;
275         char *tmp_option = NULL;
276         filter_s *_filter = (filter_s *)filter;
277
278         if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
279                 if (_filter && STRING_VALID(_filter->storage_id))
280                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
281                 else
282                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_VIEW_MEDIA);
283         } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content*/
284                 if (_filter && STRING_VALID(_filter->storage_id))
285                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
286                 else
287                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT, __media_db_get_group_name(group));
288         } else { /*uhd content*/
289                 if (_filter && STRING_VALID(_filter->storage_id))
290                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
291                 else
292                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group));
293         }
294         ret = __media_db_make_query(filter, &condition_query, &option_query);
295         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
296
297         if (option_query) {
298                 tmp_option = g_strconcat(option_query, ")", NULL);
299                 g_free(option_query);
300                 option_query = tmp_option;
301         } else {
302                 SAFE_STRLCAT(select_query, ")", sizeof(select_query));
303         }
304
305         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
306         g_free(condition_query);
307         g_free(option_query);
308         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
309
310         if (sqlite3_step(stmt) == SQLITE_ROW)
311                 *group_count = sqlite3_column_int(stmt, 0);
312
313         SQLITE3_FINALIZE(stmt);
314
315         return ret;
316 }
317
318 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
319 {
320         int ret = MEDIA_CONTENT_ERROR_NONE;
321         char select_query[MAX_QUERY_SIZE] = {0, };
322         char *condition_query = NULL;
323         char *option_query = NULL;
324         char *name = NULL;
325         sqlite3_stmt *stmt = NULL;
326         filter_s *_filter = (filter_s *)filter;
327
328         if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
329                 if (_filter && STRING_VALID(_filter->storage_id))
330                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
331                 else
332                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_VIEW_MEDIA);
333         } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content */
334                 if (_filter && STRING_VALID(_filter->storage_id))
335                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
336                 else
337                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST, __media_db_get_group_name(group));
338         } else { /* uhd content */
339                 if (_filter && STRING_VALID(_filter->storage_id))
340                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
341                 else
342                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group));
343         }
344         ret = __media_db_make_query(filter, &condition_query, &option_query);
345         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
346
347         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
348         g_free(condition_query);
349         g_free(option_query);
350         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
351
352         while (sqlite3_step(stmt) == SQLITE_ROW) {
353                 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
354
355                 if (callback(name, user_data) == false) {
356                         g_free(name);
357                         break;
358                 }
359
360                 g_free(name);
361         }
362
363         SQLITE3_FINALIZE(stmt);
364
365         return ret;
366 }
367
368 int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, media_group_and_count_cb callback, void *user_data)
369 {
370         int ret = MEDIA_CONTENT_ERROR_NONE;
371         char select_query[DEFAULT_QUERY_SIZE] = {0, };
372         char group_query[DEFAULT_QUERY_SIZE] = {0, };
373         char *condition_query = NULL;
374         char *option_query = NULL;
375         char *name = NULL;
376         sqlite3_stmt *stmt = NULL;
377         filter_s *_filter = (filter_s *)filter;
378
379         const char* group_name = __media_db_get_group_name(group);
380         content_retip_if_fail(STRING_VALID(group_name));
381
382         if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
383                 if (_filter && STRING_VALID(_filter->storage_id))
384                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, _filter->storage_id);
385                 else
386                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, DB_VIEW_MEDIA);
387         } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
388                 if (_filter && STRING_VALID(_filter->storage_id))
389                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
390                 else
391                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT, group_name);
392         } else {/*uhd content*/
393                 if (_filter && STRING_VALID(_filter->storage_id))
394                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
395                 else
396                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name);
397         }
398
399         ret = __media_db_make_query(filter, &condition_query, &option_query);
400         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
401
402         if (STRING_VALID(option_query))
403                 snprintf(group_query, sizeof(group_query), "GROUP BY %s %s", group_name, option_query);
404         else
405                 snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name);
406
407         ret = _content_query_prepare(select_query, condition_query, group_query, &stmt);
408         g_free(condition_query);
409         g_free(option_query);
410         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
411
412         while (sqlite3_step(stmt) == SQLITE_ROW) {
413                 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
414
415                 if (callback(name, sqlite3_column_int(stmt, 1), user_data) == false) {
416                         g_free(name);
417                         break;
418                 }
419
420                 g_free(name);
421         }
422
423         SQLITE3_FINALIZE(stmt);
424
425         return ret;
426 }
427 #else
428 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
429 {
430         int ret = MEDIA_CONTENT_ERROR_NONE;
431         sqlite3_stmt *stmt = NULL;
432         char *select_query = NULL;
433         char *condition_query = NULL;
434         char *option_query = NULL;
435
436         switch (group_type) {
437         case MEDIA_GROUP_ALBUM:
438                 select_query = g_strdup(SELECT_ALBUM_COUNT);
439                 break;
440
441         case MEDIA_GROUP_FOLDER:
442                 select_query = g_strdup(SELECT_FOLDER_COUNT);
443                 break;
444
445         case MEDIA_GROUP_PLAYLIST:
446                 select_query = g_strdup(SELECT_PLAYLIST_COUNT);
447                 break;
448
449         case MEDIA_GROUP_TAG:
450                 select_query = g_strdup(SELECT_TAG_COUNT);
451                 break;
452
453         case MEDIA_GROUP_BOOKMARK:
454                 select_query = g_strdup(SELECT_BOOKMARK_COUNT);
455                 break;
456
457         case MEDIA_GROUP_FACE:
458                 select_query = g_strdup(SELECT_FACE_COUNT);
459                 break;
460
461         default:
462                 content_error("Invalid group type [%d]", group_type);
463                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
464         }
465
466         ret = __media_db_make_query(filter, &condition_query, &option_query);
467         if (ret != MEDIA_CONTENT_ERROR_NONE) {
468                 g_free(select_query);
469                 return ret;
470         }
471
472         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
473         g_free(select_query);
474         g_free(condition_query);
475         g_free(option_query);
476         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
477
478         if (sqlite3_step(stmt) == SQLITE_ROW)
479                 *group_count = sqlite3_column_int(stmt, 0);
480
481         SQLITE3_FINALIZE(stmt);
482
483         return ret;
484 }
485
486 int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
487 {
488         int ret = MEDIA_CONTENT_ERROR_NONE;
489         sqlite3_stmt *stmt = NULL;
490         char *select_query = NULL;
491         char *condition_query = NULL;
492         char *option_query = NULL;
493
494         select_query = g_strdup_printf(SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), __media_db_get_group_name(group));
495
496         ret = __media_db_make_query(filter, &condition_query, &option_query);
497         if (ret != MEDIA_CONTENT_ERROR_NONE) {
498                 g_free(select_query);
499                 return ret;
500         }
501
502         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
503         g_free(select_query);
504         g_free(condition_query);
505         g_free(option_query);
506         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
507
508         if (sqlite3_step(stmt) == SQLITE_ROW)
509                 *group_count = sqlite3_column_int(stmt, 0);
510
511         SQLITE3_FINALIZE(stmt);
512
513         return ret;
514 }
515
516 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
517 {
518         int ret = MEDIA_CONTENT_ERROR_NONE;
519         char *select_query = NULL;
520         char *condition_query = NULL;
521         char *option_query = NULL;
522         char *name = NULL;
523         sqlite3_stmt *stmt = NULL;
524
525         select_query = g_strdup_printf(SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group));
526
527         ret = __media_db_make_query(filter, &condition_query, &option_query);
528         if (ret != MEDIA_CONTENT_ERROR_NONE) {
529                 g_free(select_query);
530                 return ret;
531         }
532
533         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
534         g_free(select_query);
535         g_free(condition_query);
536         g_free(option_query);
537         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
538
539         while (sqlite3_step(stmt) == SQLITE_ROW) {
540                 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
541
542                 if (callback(name, user_data) == false) {
543                         g_free(name);
544                         break;
545                 }
546
547                 g_free(name);
548         }
549
550         SQLITE3_FINALIZE(stmt);
551
552         return ret;
553 }
554 #endif
555
556 int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data)
557 {
558         int ret = MEDIA_CONTENT_ERROR_NONE;
559         char *select_query = NULL;
560         char *condition_query = NULL;
561         char *option_query = NULL;
562         sqlite3_stmt *stmt = NULL;
563 #ifdef _USE_TVPD_MODE
564         filter_s *_filter = (filter_s *)filter;
565         if (_filter && STRING_VALID(_filter->storage_id))
566                 select_query = g_strdup_printf(SELECT_ALBUM_LIST, _filter->storage_id);
567         else
568                 select_query = g_strdup_printf(SELECT_ALBUM_LIST, DB_VIEW_MEDIA);
569 #else
570         select_query = g_strdup(SELECT_ALBUM_LIST);
571 #endif
572         ret = __media_db_make_query(filter, &condition_query, &option_query);
573         if (ret != MEDIA_CONTENT_ERROR_NONE) {
574                 g_free(select_query);
575                 return ret;
576         }
577
578         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
579         g_free(select_query);
580         g_free(condition_query);
581         g_free(option_query);
582         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
583
584         while (sqlite3_step(stmt) == SQLITE_ROW) {
585                 media_album_s *album = g_new0(media_album_s, 1);
586
587                 album->album_id = sqlite3_column_int(stmt, 0);
588                 album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
589                 album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2));
590                 album->album_art_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
591
592                 if (callback((media_album_h)album, user_data) == false) {
593                         media_album_destroy((media_album_h)album);
594                         break;
595                 }
596
597                 media_album_destroy((media_album_h)album);
598         }
599
600         SQLITE3_FINALIZE(stmt);
601
602         return ret;
603 }
604
605 int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_data)
606 {
607         int ret = MEDIA_CONTENT_ERROR_NONE;
608         char *select_query = NULL;
609         char *condition_query = NULL;
610         char *option_query = NULL;
611         sqlite3_stmt *stmt = NULL;
612 #ifdef _USE_TVPD_MODE
613         filter_s *_filter = (filter_s *)filter;
614         if (_filter && STRING_VALID(_filter->storage_id))
615                 select_query = g_strdup_printf(SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
616         else
617                 select_query = g_strdup_printf(SELECT_FOLDER_LIST, DB_VIEW_MEDIA);
618 #else
619         select_query = g_strdup(SELECT_FOLDER_LIST);
620 #endif
621         ret = __media_db_make_query(filter, &condition_query, &option_query);
622         if (ret != MEDIA_CONTENT_ERROR_NONE) {
623                 g_free(select_query);
624                 return ret;
625         }
626
627         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
628         g_free(select_query);
629         g_free(condition_query);
630         g_free(option_query);
631         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
632
633         while (sqlite3_step(stmt) == SQLITE_ROW) {
634                 media_folder_s *_folder = g_new0(media_folder_s, 1);
635                 _folder->folder_id = g_strdup_printf("%lld", sqlite3_column_int64(stmt, 0));
636                 _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
637                 _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
638                 _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 3));
639
640                 if (callback((media_folder_h)_folder, user_data) == false) {
641                         media_folder_destroy((media_folder_h) _folder);
642                         break;
643                 }
644
645                 media_folder_destroy((media_folder_h) _folder);
646         }
647
648         SQLITE3_FINALIZE(stmt);
649
650         return ret;
651 }
652
653 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
654 {
655         int ret = MEDIA_CONTENT_ERROR_NONE;
656         char *condition_query = NULL;
657         char *option_query = NULL;
658         sqlite3_stmt *stmt = NULL;
659
660         ret = __media_db_make_query(filter, &condition_query, &option_query);
661         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
662
663         ret = _content_query_prepare(SELECT_PLAYLIST_LIST, condition_query, option_query, &stmt);
664         g_free(condition_query);
665         g_free(option_query);
666         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
667
668         while (sqlite3_step(stmt) == SQLITE_ROW) {
669                 media_playlist_s *_playlist = g_new0(media_playlist_s, 1);
670
671                 _playlist->playlist_id = sqlite3_column_int(stmt, 0);
672                 _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
673                 _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
674
675                 if (callback((media_playlist_h)_playlist, user_data) == false) {
676                         media_playlist_destroy((media_playlist_h)_playlist);
677                         break;
678                 }
679                 media_playlist_destroy((media_playlist_h)_playlist);
680         }
681
682         SQLITE3_FINALIZE(stmt);
683
684         return ret;
685 }
686
687 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
688 {
689         int ret = MEDIA_CONTENT_ERROR_NONE;
690         char *select_query = NULL;
691         char *condition_query = NULL;
692         char *option_query = NULL;
693         sqlite3_stmt *stmt = NULL;
694
695         select_query = g_strdup_printf(SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
696
697         ret = __media_db_make_query(filter, &condition_query, &option_query);
698         if (ret != MEDIA_CONTENT_ERROR_NONE) {
699                 g_free(select_query);
700                 return ret;
701         }
702
703         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
704         g_free(select_query);
705         g_free(condition_query);
706         g_free(option_query);
707         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
708
709         while (sqlite3_step(stmt) == SQLITE_ROW) {
710                 int playlist_member_id = 0;
711                 playlist_member_id = sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX);     /*MEDIA_INFO_ITEM_MAX is pm_id*/
712
713                 media_info_s *_media = g_new0(media_info_s, 1);
714
715                 _media_info_item_get_detail(stmt, (media_info_h)_media);
716
717                 if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) {
718                         media_info_destroy((media_info_h)_media);
719                         break;
720                 }
721                 media_info_destroy((media_info_h)_media);
722
723         }
724
725         SQLITE3_FINALIZE(stmt);
726
727         return ret;
728 }
729
730 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
731 {
732         int ret = MEDIA_CONTENT_ERROR_NONE;
733         char *select_query = NULL;
734         char *condition_query = NULL;
735         char *option_query = NULL;
736         sqlite3_stmt *stmt = NULL;
737
738         if (STRING_VALID(media_id))
739                 select_query = g_strdup_printf(SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
740         else
741                 select_query = g_strdup(SELECT_TAG_LIST);
742
743         ret = __media_db_make_query(filter, &condition_query, &option_query);
744         if (ret != MEDIA_CONTENT_ERROR_NONE) {
745                 g_free(select_query);
746                 return ret;
747         }
748
749         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
750         g_free(select_query);
751         g_free(condition_query);
752         g_free(option_query);
753         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
754
755         while (sqlite3_step(stmt) == SQLITE_ROW) {
756                 media_tag_s *_tag = g_new0(media_tag_s, 1);
757
758                 _tag->tag_id = sqlite3_column_int(stmt, 0);
759                 _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
760
761                 if (callback((media_tag_h)_tag, user_data) == false) {
762                         media_tag_destroy((media_tag_h)_tag);
763                         break;
764                 }
765                 media_tag_destroy((media_tag_h)_tag);
766         }
767
768         SQLITE3_FINALIZE(stmt);
769
770         return ret;
771 }
772
773 int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
774 {
775         int ret = MEDIA_CONTENT_ERROR_NONE;
776         char *select_query = NULL;
777         char *condition_query = NULL;
778         char *option_query = NULL;
779         sqlite3_stmt *stmt = NULL;
780 #ifdef _USE_TVPD_MODE
781         filter_s *_filter = (filter_s *)filter;
782         if (STRING_VALID(media_id)) {   //get bookmark by media_id
783                 if (_filter && STRING_VALID(_filter->storage_id))
784                         select_query = g_strdup_printf(SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
785                 else
786                         select_query = g_strdup_printf(SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
787         } else {
788                 if (_filter && STRING_VALID(_filter->storage_id))
789                         select_query = g_strdup_printf(SELECT_BOOKMARK_LIST, _filter->storage_id);
790                 else
791                         select_query = g_strdup_printf(SELECT_BOOKMARK_LIST, DB_VIEW_MEDIA);
792         }
793 #else
794         if (STRING_VALID(media_id))
795                 select_query = g_strdup_printf(SELECT_BOOKMARK_LIST_BY_MEDIA_ID, media_id);
796         else
797                 select_query = g_strdup(SELECT_BOOKMARK_LIST);
798 #endif
799
800         ret = __media_db_make_query(filter, &condition_query, &option_query);
801         if (ret != MEDIA_CONTENT_ERROR_NONE) {
802                 g_free(select_query);
803                 return ret;
804         }
805
806         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
807         g_free(select_query);
808         g_free(condition_query);
809         g_free(option_query);
810         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
811
812         while (sqlite3_step(stmt) == SQLITE_ROW) {
813                 media_bookmark_s *bookmark = g_new0(media_bookmark_s, 1);
814
815                 bookmark->bookmark_id = sqlite3_column_int(stmt, 0);
816                 bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
817                 bookmark->marked_time = sqlite3_column_int(stmt, 2);
818                 bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
819                 bookmark->name = g_strdup((const char *)sqlite3_column_text(stmt, 4));
820
821                 if (callback((media_bookmark_h)bookmark, user_data) == false) {
822                         media_bookmark_destroy((media_bookmark_h)bookmark);
823                         break;
824                 }
825
826                 media_bookmark_destroy((media_bookmark_h)bookmark);
827         }
828
829         SQLITE3_FINALIZE(stmt);
830
831         return ret;
832
833 }
834
835 int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
836 {
837         int ret = MEDIA_CONTENT_ERROR_NONE;
838         char *select_query = NULL;
839         char *condition_query = NULL;
840         char *option_query = NULL;
841         sqlite3_stmt *stmt = NULL;
842 #ifdef _USE_TVPD_MODE
843         filter_s *_filter = (filter_s *)filter;
844         if (STRING_VALID(media_id)) {   //get face by media_id
845                 if (_filter && STRING_VALID(_filter->storage_id))
846                         select_query = g_strdup_printf(SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
847                 else
848                         select_query = g_strdup_printf(SELECT_FACE_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
849         } else {
850                 if (_filter && STRING_VALID(_filter->storage_id))
851                         select_query = g_strdup_printf(SELECT_FACE_LIST, _filter->storage_id);
852                 else
853                         select_query = g_strdup_printf(SELECT_FACE_LIST, DB_VIEW_MEDIA);
854         }
855 #else
856         if (STRING_VALID(media_id))
857                 select_query = g_strdup_printf(SELECT_FACE_LIST_BY_MEDIA_ID, media_id);
858         else
859                 select_query = g_strdup(SELECT_FACE_LIST);
860 #endif
861         ret = __media_db_make_query(filter, &condition_query, &option_query);
862         if (ret != MEDIA_CONTENT_ERROR_NONE) {
863                 g_free(select_query);
864                 return ret;
865         }
866
867         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
868         g_free(select_query);
869         g_free(condition_query);
870         g_free(option_query);
871         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
872
873         while (sqlite3_step(stmt) == SQLITE_ROW) {
874                 media_face_s *face = g_new0(media_face_s, 1);
875
876                 face->face_id = sqlite3_column_int(stmt, 0);
877                 face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
878                 face->face_rect_x = sqlite3_column_int(stmt, 2);
879                 face->face_rect_y = sqlite3_column_int(stmt, 3);
880                 face->face_rect_w = sqlite3_column_int(stmt, 4);
881                 face->face_rect_h = sqlite3_column_int(stmt, 5);
882                 face->orientation = sqlite3_column_int(stmt, 6);
883                 face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7));
884
885                 if (callback((media_face_h)face, user_data) == false) {
886                         media_face_destroy((media_face_h)face);
887                         break;
888                 }
889
890                 media_face_destroy((media_face_h)face);
891         }
892
893         SQLITE3_FINALIZE(stmt);
894
895         return ret;
896
897 }
898
899 int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_list_e group_type, int *item_count)
900 {
901         int ret = MEDIA_CONTENT_ERROR_NONE;
902         sqlite3_stmt *stmt = NULL;
903         char *select_query = NULL;
904         char *condition_query = NULL;
905         char *option_query = NULL;
906 #ifdef _USE_TVPD_MODE
907         filter_s *_filter = (filter_s *)filter;
908 #endif
909         switch (group_type) {
910         case MEDIA_GROUP_ALBUM:
911 #ifdef _USE_TVPD_MODE
912                 if (_filter && STRING_VALID(_filter->storage_id))
913                         select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id);
914                 else
915                         select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
916 #else
917                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_ALBUM, group_id);
918 #endif
919                 break;
920
921         case MEDIA_GROUP_PLAYLIST:
922                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id);
923                 break;
924
925         case MEDIA_GROUP_TAG:
926                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_TAG, group_id);
927                 break;
928
929         default:
930                 content_error("INVALID_PARAMETER");
931                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
932         }
933
934         ret = __media_db_make_query(filter, &condition_query, &option_query);
935         if (ret != MEDIA_CONTENT_ERROR_NONE) {
936                 g_free(select_query);
937                 return ret;
938         }
939
940         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
941         g_free(select_query);
942         g_free(condition_query);
943         g_free(option_query);
944         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
945
946         if (sqlite3_step(stmt) == SQLITE_ROW)
947                 *item_count = sqlite3_column_int(stmt, 0);
948
949         SQLITE3_FINALIZE(stmt);
950
951         return ret;
952 }
953
954 int _media_db_get_group_item_count(const char *group_name, filter_h filter, group_list_e group_type, int *item_count)
955 {
956         int ret = MEDIA_CONTENT_ERROR_NONE;
957         sqlite3_stmt *stmt = NULL;
958         char *select_query = NULL;
959         char *condition_query = NULL;
960         char *option_query = NULL;
961         char *tmp_option = NULL;
962         bool need_bracket = false;
963         filter_s *_filter = (filter_s *)filter;
964
965         switch (group_type) {
966         case MEDIA_GROUP_NONE:
967                 if (!_filter) {
968 #ifdef _USE_TVPD_MODE
969                         select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
970 #else
971                         select_query = g_strdup(SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE);
972 #endif
973                         break;
974                 }
975
976                 if (_filter->offset < 0 && _filter->count < 0) {
977 #ifdef _USE_TVPD_MODE
978                         if (STRING_VALID(_filter->storage_id))
979                                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
980                         else
981                                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
982 #else
983                         select_query = g_strdup(SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE);
984 #endif
985                 } else {
986 #ifdef _USE_TVPD_MODE
987                         if (STRING_VALID(_filter->storage_id))
988                                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_MEDIA, _filter->storage_id);
989                         else
990                                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_MEDIA, DB_VIEW_MEDIA);
991 #else
992                         select_query = g_strdup(SELECT_MEDIA_COUNT_FROM_MEDIA);
993 #endif
994                         need_bracket = true;
995                 }
996                 break;
997
998         case MEDIA_GROUP_FOLDER:
999 #ifdef _USE_TVPD_MODE
1000                 if (_filter && STRING_VALID(_filter->storage_id))
1001                         select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
1002                 else
1003                         select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1004 #else
1005                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_FOLDER, group_name);
1006 #endif
1007                 break;
1008
1009         case MEDIA_GROUP_TAG_BY_MEDIA_ID:
1010                 select_query = g_strdup_printf(SELECT_TAG_COUNT_BY_MEDIA_ID, group_name);
1011                 break;
1012
1013         case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
1014 #ifdef _USE_TVPD_MODE
1015                 if (_filter && STRING_VALID(_filter->storage_id))
1016                         select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1017                 else
1018                         select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
1019 #else
1020                 select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, group_name);
1021 #endif
1022                 break;
1023
1024         case MEDIA_GROUP_FACE_BY_MEDIA_ID:
1025 #ifdef _USE_TVPD_MODE
1026                 if (_filter && STRING_VALID(_filter->storage_id))
1027                         select_query = g_strdup_printf(SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1028                 else
1029                         select_query = g_strdup_printf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
1030 #else
1031                 select_query = g_strdup_printf(SELECT_FACE_COUNT_BY_MEDIA_ID, group_name);
1032 #endif
1033                 break;
1034
1035 #ifdef _USE_TVPD_MODE
1036         case MEDIA_GROUP_PVR:
1037                 if (_filter && STRING_VALID(_filter->storage_id))
1038                         select_query = g_strdup_printf(SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id);
1039                 else
1040                         select_query = g_strdup(SELECT_PVR_COUNT);
1041                 break;
1042
1043         case MEDIA_GROUP_UHD:
1044                 if (_filter && STRING_VALID(_filter->storage_id))
1045                         select_query = g_strdup_printf(SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id);
1046                 else
1047                         select_query = g_strdup(SELECT_UHD_COUNT);
1048                 break;
1049 #endif
1050         default:
1051                 content_error("INVALID_PARAMETER");
1052                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1053         }
1054
1055         ret = __media_db_make_query(filter, &condition_query, &option_query);
1056         if (ret != MEDIA_CONTENT_ERROR_NONE) {
1057                 g_free(select_query);
1058                 return ret;
1059         }
1060
1061         if (need_bracket) {
1062                 tmp_option = g_strconcat(option_query, ")", NULL);
1063                 g_free(option_query);
1064                 option_query = tmp_option;
1065         }
1066
1067         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1068         g_free(select_query);
1069         g_free(condition_query);
1070         g_free(option_query);
1071         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1072
1073         if (sqlite3_step(stmt) == SQLITE_ROW)
1074                 *item_count = sqlite3_column_int(stmt, 0);
1075
1076         SQLITE3_FINALIZE(stmt);
1077
1078         return ret;
1079 }
1080
1081 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)
1082 {
1083         int ret = MEDIA_CONTENT_ERROR_NONE;
1084         char *select_query = NULL;
1085         char *condition_query = NULL;
1086         char *option_query = NULL;
1087         sqlite3_stmt *stmt = NULL;
1088 #ifdef _USE_TVPD_MODE
1089         filter_s *_filter = (filter_s *)filter;
1090 #endif
1091
1092         switch (group_type) {
1093         case MEDIA_GROUP_ALBUM:
1094 #ifdef _USE_TVPD_MODE
1095                 if (_filter && STRING_VALID(_filter->storage_id))
1096                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id);
1097                 else
1098                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
1099 #else
1100                 select_query = g_strdup_printf(SELECT_MEDIA_FROM_ALBUM, group_id);
1101 #endif
1102                 break;
1103
1104         case MEDIA_GROUP_PLAYLIST:
1105 #ifdef _USE_TVPD_MODE
1106                 if (_filter && STRING_VALID(_filter->storage_id))
1107                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id);
1108                 else
1109                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_PLAYLIST, DB_VIEW_MEDIA, group_id);
1110 #else
1111                 select_query = g_strdup_printf(SELECT_MEDIA_FROM_PLAYLIST, group_id);
1112 #endif
1113                 break;
1114
1115         case MEDIA_GROUP_TAG:
1116 #ifdef _USE_TVPD_MODE
1117                 if (_filter && STRING_VALID(_filter->storage_id))
1118                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id);
1119                 else
1120                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_TAG, DB_VIEW_MEDIA, group_id);
1121 #else
1122                 select_query = g_strdup_printf(SELECT_MEDIA_FROM_TAG, group_id);
1123 #endif
1124                 break;
1125
1126         default:
1127                 content_error("INVALID_PARAMETER");
1128                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1129         }
1130
1131         ret = __media_db_make_query(filter, &condition_query, &option_query);
1132         if (ret != MEDIA_CONTENT_ERROR_NONE) {
1133                 g_free(select_query);
1134                 return ret;
1135         }
1136
1137         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1138         g_free(select_query);
1139         g_free(condition_query);
1140         g_free(option_query);
1141         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1142
1143         while (sqlite3_step(stmt) == SQLITE_ROW) {
1144                 media_info_s *item = g_new0(media_info_s, 1);
1145
1146                 _media_info_item_get_detail(stmt, (media_info_h)item);
1147
1148                 if (callback((media_info_h)item, user_data) == false) {
1149                         media_info_destroy((media_info_h)item);
1150                         break;
1151                 }
1152
1153                 media_info_destroy((media_info_h)item);
1154         }
1155
1156         SQLITE3_FINALIZE(stmt);
1157
1158         return ret;
1159 }
1160
1161 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)
1162 {
1163         int ret = MEDIA_CONTENT_ERROR_NONE;
1164         char *select_query = NULL;
1165         char *condition_query = NULL;
1166         char *option_query = NULL;
1167         sqlite3_stmt *stmt = NULL;
1168 #ifdef _USE_TVPD_MODE
1169         filter_s *_filter = (filter_s *)filter;
1170 #endif
1171
1172         switch (group_type) {
1173         case MEDIA_GROUP_NONE:
1174 #ifdef _USE_TVPD_MODE
1175                 if (_filter && STRING_VALID(_filter->storage_id))
1176                         select_query = g_strdup_printf(SELECT_MEDIA_ITEM, _filter->storage_id);
1177                 else
1178                         select_query = g_strdup_printf(SELECT_MEDIA_ITEM, DB_VIEW_MEDIA);
1179 #else
1180                 select_query = g_strdup(SELECT_MEDIA_ITEM);
1181 #endif
1182                 break;
1183
1184         case MEDIA_GROUP_FOLDER:
1185 #ifdef _USE_TVPD_MODE
1186                 if (_filter && STRING_VALID(_filter->storage_id))
1187                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name);
1188                 else
1189                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1190 #else
1191                 select_query = g_strdup_printf(SELECT_MEDIA_FROM_FOLDER, group_name);
1192 #endif
1193                 break;
1194
1195         default:
1196                 content_error("INVALID_PARAMETER");
1197                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1198         }
1199
1200         ret = __media_db_make_query(filter, &condition_query, &option_query);
1201         if (ret != MEDIA_CONTENT_ERROR_NONE) {
1202                 g_free(select_query);
1203                 return ret;
1204         }
1205
1206         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1207         g_free(select_query);
1208         g_free(condition_query);
1209         g_free(option_query);
1210         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1211
1212         while (sqlite3_step(stmt) == SQLITE_ROW) {
1213                 media_info_s *item = g_new0(media_info_s, 1);
1214
1215                 _media_info_item_get_detail(stmt, (media_info_h)item);
1216
1217                 if (callback((media_info_h)item, user_data) == false) {
1218                         media_info_destroy((media_info_h)item);
1219                         break;
1220                 }
1221
1222                 media_info_destroy((media_info_h)item);
1223         }
1224
1225         SQLITE3_FINALIZE(stmt);
1226
1227         return ret;
1228 }
1229
1230 int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count)
1231 {
1232         int ret = MEDIA_CONTENT_ERROR_NONE;
1233         sqlite3_stmt *stmt = NULL;
1234         char select_query[MAX_QUERY_SIZE] = {0, };
1235         char *tmp_option = NULL;
1236         char *condition_query = NULL;
1237         char *option_query = NULL;
1238 #ifdef _USE_TVPD_MODE
1239         filter_s *_filter = (filter_s *)filter;
1240         if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
1241                 if (group_name) {
1242                         if (_filter && STRING_VALID(_filter->storage_id))
1243                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1244                         else
1245                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1246                 } else {
1247                         if (_filter && STRING_VALID(_filter->storage_id))
1248                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1249                         else
1250                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1251                 }
1252         } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
1253                 if (group_name) {
1254                         if (_filter && STRING_VALID(_filter->storage_id))
1255                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1256                         else
1257                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1258                 } else {
1259                         if (_filter && STRING_VALID(_filter->storage_id))
1260                                 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1261                         else
1262                                 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1263                 }
1264         } else {/*uhd content*/
1265                 if (group_name) {
1266                         if (_filter && STRING_VALID(_filter->storage_id))
1267                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_UHD_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1268                         else
1269                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1270                 } else {
1271                         if (_filter && STRING_VALID(_filter->storage_id))
1272                                 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1273                         else
1274                                 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1275                 }
1276         }
1277 #else
1278         if (group_name)
1279                 sqlite3_snprintf(MAX_QUERY_SIZE, select_query, SELECT_MEDIA_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1280         else
1281                 snprintf(select_query, MAX_QUERY_SIZE, SELECT_MEDIA_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1282 #endif
1283         ret = __media_db_make_query(filter, &condition_query, &option_query);
1284         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1285
1286         /* If 'filter' is not NULL, 'option_query' must be created. */
1287         if (option_query) {
1288                 tmp_option = g_strconcat(option_query, ")", NULL);
1289                 g_free(option_query);
1290                 option_query = tmp_option;
1291         } else {
1292                 SAFE_STRLCAT(select_query, ")", sizeof(select_query));
1293         }
1294
1295         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1296         g_free(condition_query);
1297         g_free(option_query);
1298         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1299
1300         if (sqlite3_step(stmt) == SQLITE_ROW)
1301                 *item_count = sqlite3_column_int(stmt, 0);
1302
1303         SQLITE3_FINALIZE(stmt);
1304
1305         return ret;
1306 }
1307
1308 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)
1309 {
1310         int ret = MEDIA_CONTENT_ERROR_NONE;
1311         char select_query[MAX_QUERY_SIZE] = {0, };
1312         char *condition_query = NULL;
1313         char *option_query = NULL;
1314         sqlite3_stmt *stmt = NULL;
1315 #ifdef _USE_TVPD_MODE
1316         filter_s *_filter = (filter_s *)filter;
1317         if (group_name) {
1318                 if (_filter && STRING_VALID(_filter->storage_id))
1319                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1320                 else
1321                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1322         } else {
1323                 if (_filter && STRING_VALID(_filter->storage_id))
1324                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1325                 else
1326                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1327         }
1328 #else
1329         if (group_name)
1330                 sqlite3_snprintf(MAX_QUERY_SIZE, select_query, SELECT_MEDIA_FROM_GROUP, __media_db_get_group_name(group), group_name);
1331         else
1332                 snprintf(select_query, MAX_QUERY_SIZE, SELECT_MEDIA_FROM_GROUP_NULL, __media_db_get_group_name(group));
1333 #endif
1334         ret = __media_db_make_query(filter, &condition_query, &option_query);
1335         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1336
1337         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1338         g_free(condition_query);
1339         g_free(option_query);
1340         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1341
1342         while (sqlite3_step(stmt) == SQLITE_ROW) {
1343                 media_info_s *item = g_new0(media_info_s, 1);
1344
1345                 _media_info_item_get_detail(stmt, (media_info_h)item);
1346
1347                 if (callback((media_info_h)item, user_data) == false) {
1348                         media_info_destroy((media_info_h)item);
1349                         break;
1350                 }
1351
1352                 media_info_destroy((media_info_h)item);
1353         }
1354
1355         SQLITE3_FINALIZE(stmt);
1356
1357         return ret;
1358 }
1359
1360 #ifdef _USE_TVPD_MODE
1361 int _media_db_get_storage_id_by_media_id(const char *media_id, char **storage_id)
1362 {
1363         int ret = MEDIA_CONTENT_ERROR_NONE;
1364         sqlite3_stmt *stmt = NULL;
1365         char *select_query = NULL;
1366
1367         select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
1368
1369         ret = _content_get_result(select_query, &stmt);
1370         SQLITE3_SAFE_FREE(select_query);
1371         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1372
1373         if (sqlite3_step(stmt) == SQLITE_ROW) {
1374                 *storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1375         } else {
1376                 content_error("Invalid media_id[%s]", media_id);
1377                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1378         }
1379
1380         SQLITE3_FINALIZE(stmt);
1381
1382         return ret;
1383 }
1384
1385 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)
1386 {
1387         int ret = MEDIA_CONTENT_ERROR_NONE;
1388         char select_query[DEFAULT_QUERY_SIZE] = {0, };
1389         char *condition_query = NULL;
1390         char *option_query = NULL;
1391         sqlite3_stmt *stmt = NULL;
1392         filter_s *_filter = (filter_s *)filter;
1393
1394         if (group_name) {
1395                 if (_filter && STRING_VALID(_filter->storage_id))
1396                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1397                 else
1398                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
1399         } else {
1400                 if (_filter && STRING_VALID(_filter->storage_id))
1401                         snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1402                 else
1403                         snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
1404         }
1405
1406         ret = __media_db_make_query(filter, &condition_query, &option_query);
1407         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1408
1409         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1410         g_free(condition_query);
1411         g_free(option_query);
1412         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1413
1414         while (sqlite3_step(stmt) == SQLITE_ROW) {
1415                 media_pvr_s *item = g_new0(media_pvr_s, 1);
1416
1417                 _media_pvr_item_get_detail(stmt, (media_pvr_h)item);
1418
1419                 if (callback((media_pvr_h)item, user_data) == false) {
1420                         media_info_destroy((media_pvr_h)item);
1421                         break;
1422                 }
1423
1424                 media_pvr_destroy((media_pvr_h)item);
1425         }
1426
1427         SQLITE3_FINALIZE(stmt);
1428
1429         return ret;
1430 }
1431
1432 typedef enum {
1433         MEDIA_PVR_MEDIA_ID = 0,
1434         MEDIA_PVR_STORAGE_ID,
1435         MEDIA_PVR_PATH,
1436         MEDIA_PVR_SIZE,
1437         MEDIA_PVR_DURATION,
1438         MEDIA_PVR_TIME_ZONE,
1439         MEDIA_PVR_PTC,
1440         MEDIA_PVR_MAJOR,
1441         MEDIA_PVR_MINOR,
1442         MEDIA_PVR_CHANNEL_TYPE,
1443         MEDIA_PVR_CHANNEL_NAME,
1444         MEDIA_PVR_CHANNEL_NUM,
1445         MEDIA_PVR_SERVICE_PROFILE,
1446         MEDIA_PVR_PROGRAM_TITLE,
1447         MEDIA_PVR_PROGRAM_NUM,
1448         MEDIA_PVR_PROGRAM_CRID,
1449         MEDIA_PVR_GUIDANCE,
1450         MEDIA_PVR_SYNOPSIS,
1451         MEDIA_PVR_GENRE,
1452         MEDIA_PVR_LANGUAGE,
1453         MEDIA_PVR_EMBARGO_TIME,
1454         MEDIA_PVR_EXPIRY_TIME,
1455         MEDIA_PVR_START_TIME,
1456         MEDIA_PVR_PROGRAM_START_TIME,
1457         MEDIA_PVR_PROGRAM_END_TIME,
1458         MEDIA_PVR_PROGRAM_DATE,
1459         MEDIA_PVR_PARENTAL_RATING,
1460         MEDIA_PVR_TIMER_RECORD,
1461         MEDIA_PVR_SERIES_RECORD,
1462         MEDIA_PVR_HD,
1463         MEDIA_PVR_SUBTITLE,
1464         MEDIA_PVR_TTX,
1465         MEDIA_PVR_AD,
1466         MEDIA_PVR_HARDOF_HEARINGRADIO,
1467         MEDIA_PVR_DATA_SERVICE,
1468         MEDIA_PVR_CONTENT_LOCK,
1469         MEDIA_PVR_CONTENT_WATCH,
1470         MEDIA_PVR_HAS_AUDIO_ONLY,
1471         MEDIA_PVR_IS_LOCAL_RECORDED,
1472         MEDIA_PVR_RESOLUTION,
1473         MEDIA_PVR_ASPECTRATIO,
1474         MEDIA_PVR_MODIFIED_MONTH,
1475         MEDIA_PVR_SPORTS_TYPE,
1476         MEDIA_PVR_GUIDANCE_LENGTH,
1477         MEDIA_PVR_TVMODE,
1478         MEDIA_PVR_PLAY_COUNT,
1479         MEDIA_PVR_PRIVATE_DATA,
1480         MEDIA_PVR_HIGHLIGHT,
1481 } media_pvr_field_e;
1482
1483 void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
1484 {
1485         media_pvr_s *_pvr = (media_pvr_s*)pvr;
1486
1487         _pvr->media_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID));
1488         _pvr->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID));
1489         _pvr->path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH));
1490         _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
1491         _pvr->duration = sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
1492         _pvr->timezone = sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
1493         _pvr->ptc = sqlite3_column_int(stmt, MEDIA_PVR_PTC);
1494         _pvr->major = sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
1495         _pvr->minor = sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
1496         _pvr->channel_type = sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
1497         _pvr->service_profile = (unsigned int)sqlite3_column_int(stmt, MEDIA_PVR_SERVICE_PROFILE);
1498         _pvr->channel_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME));
1499         _pvr->channel_num = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM));
1500         _pvr->program_title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE));
1501         _pvr->program_num = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
1502         _pvr->program_crid = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID));
1503         _pvr->guidance = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE));
1504         _pvr->synopsis = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS));
1505         _pvr->genre = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE));
1506         _pvr->language = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE));
1507         _pvr->modified_month = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH));
1508         _pvr->private_data = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA));
1509         _pvr->embargo_time = sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
1510         _pvr->expiry_time = sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
1511         _pvr->start_time = sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
1512         _pvr->program_start_time = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
1513         _pvr->program_end_time = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
1514         _pvr->program_date = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
1515         _pvr->parental_rating = sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
1516         _pvr->timer_record = sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
1517         _pvr->series_record = sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
1518         _pvr->hd = sqlite3_column_int(stmt, MEDIA_PVR_HD);
1519         _pvr->subtitle = sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
1520         _pvr->ttx = sqlite3_column_int(stmt, MEDIA_PVR_TTX);
1521         _pvr->ad = sqlite3_column_int(stmt, MEDIA_PVR_AD);
1522         _pvr->hard_of_hearing_radio = sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
1523         _pvr->data_service = sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
1524         _pvr->content_lock = sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
1525         _pvr->content_watch = sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
1526         _pvr->has_audio_only = sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
1527         _pvr->is_local_record = sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
1528         _pvr->resolution = sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
1529         _pvr->aspectratio = sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
1530         _pvr->sports_type = sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
1531         _pvr->guidance_length = sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
1532         _pvr->tvmode = sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
1533         _pvr->play_count = sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
1534         _pvr->highlight = sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
1535
1536         return;
1537 }
1538
1539 int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
1540 {
1541         int ret = MEDIA_CONTENT_ERROR_NONE;
1542         char select_query[DEFAULT_QUERY_SIZE] = {0, };
1543         char *condition_query = NULL;
1544         char *option_query = NULL;
1545         sqlite3_stmt *stmt = NULL;
1546         filter_s *_filter = (filter_s *)filter;
1547
1548         if (_filter && STRING_VALID(_filter->storage_id))
1549                 snprintf(select_query, sizeof(select_query), SELECT_PVR_LIST_BY_STORAGE_ID, _filter->storage_id);
1550         else
1551                 SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
1552
1553         ret = __media_db_make_query(filter, &condition_query, &option_query);
1554         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1555
1556         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1557         g_free(condition_query);
1558         g_free(option_query);
1559         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1560
1561         while (sqlite3_step(stmt) == SQLITE_ROW) {
1562                 media_pvr_s *_pvr = g_new0(media_pvr_s, 1);
1563
1564                 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
1565
1566                 if (callback((media_pvr_h)_pvr, user_data) == false) {
1567                         media_pvr_destroy((media_pvr_h) _pvr);
1568                         break;
1569                 }
1570
1571                 media_pvr_destroy((media_pvr_h) _pvr);
1572         }
1573
1574         SQLITE3_FINALIZE(stmt);
1575
1576         return ret;
1577 }
1578
1579 typedef enum {
1580         MEDIA_UHD_MEDIA_ID = 0,
1581         MEDIA_UHD_STORAGE_ID,
1582         MEDIA_UHD_PATH,
1583         MEDIA_UHD_SIZE,
1584         MEDIA_UHD_CONTENT_ID,
1585         MEDIA_UHD_CONTENT_TITLE,
1586         MEDIA_UHD_FILE_NAME,
1587         MEDIA_UHD_FOLDER_ID,
1588         MEDIA_UHD_RELEASE_DATE,
1589         MEDIA_UHD_MODIFIED_TIME,
1590         MEDIA_UHD_PLAYED_POSITION,
1591         MEDIA_UHD_SUB_TYPE,
1592         MEDIA_UHD_PLAYED_COUNT,
1593 } media_uhd_field_e;
1594
1595 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
1596 {
1597         media_uhd_s *_uhd = (media_uhd_s*)uhd;
1598
1599         _uhd->media_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID));
1600         _uhd->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID));
1601         _uhd->path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH));
1602         _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE);
1603         _uhd->content_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID));
1604         _uhd->content_title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE));
1605         _uhd->file_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME));
1606         _uhd->release_date = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE));
1607         _uhd->modified_time = sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
1608         _uhd->played_position = sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
1609         _uhd->sub_type = sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
1610         _uhd->played_count = sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
1611
1612         return;
1613 }
1614
1615 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
1616 {
1617         int ret = MEDIA_CONTENT_ERROR_NONE;
1618         char select_query[DEFAULT_QUERY_SIZE] = {0, };
1619         char *condition_query = NULL;
1620         char *option_query = NULL;
1621         sqlite3_stmt *stmt = NULL;
1622         filter_s *_filter = (filter_s *)filter;
1623
1624         if (_filter && STRING_VALID(_filter->storage_id))
1625                 snprintf(select_query, sizeof(select_query), SELECT_UHD_LIST_BY_STORAGE_ID, _filter->storage_id);
1626         else
1627                 SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
1628
1629         ret = __media_db_make_query(filter, &condition_query, &option_query);
1630         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1631
1632         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1633         g_free(condition_query);
1634         g_free(option_query);
1635         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1636
1637         while (sqlite3_step(stmt) == SQLITE_ROW) {
1638                 media_uhd_s *_uhd = g_new0(media_uhd_s, 1);
1639
1640                 _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd);
1641
1642                 if (callback((media_uhd_h)_uhd, user_data) == false) {
1643                         media_uhd_destroy((media_uhd_h) _uhd);
1644                         break;
1645                 }
1646                 media_uhd_destroy((media_uhd_h) _uhd);
1647         }
1648
1649         SQLITE3_FINALIZE(stmt);
1650
1651         return ret;
1652 }
1653
1654 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
1655 {
1656         int ret = MEDIA_CONTENT_ERROR_NONE;
1657         char *condition_query = NULL;
1658         char *option_query = NULL;
1659         sqlite3_stmt *stmt = NULL;
1660
1661         ret = __media_db_make_query(filter, &condition_query, &option_query);
1662         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1663
1664         ret = _content_query_prepare(SELECT_STORAGE_LIST, condition_query, option_query, &stmt);
1665         g_free(condition_query);
1666         g_free(option_query);
1667         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1668
1669         while (sqlite3_step(stmt) == SQLITE_ROW) {
1670                 media_storage_s *_storage = g_new0(media_storage_s, 1);
1671
1672                 _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1673                 _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
1674
1675                 if (callback((media_storage_h)_storage, user_data) == false) {
1676                         media_storage_destroy((media_storage_h) _storage);
1677                         break;
1678                 }
1679
1680                 media_storage_destroy((media_storage_h) _storage);
1681         }
1682
1683         SQLITE3_FINALIZE(stmt);
1684
1685         return ret;
1686 }
1687 #endif