Remove unused product API
[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 #ifdef _USE_TVPD_MODE
636                 _folder->folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
637 #else
638                 _folder->folder_id = g_strdup_printf("%lld", sqlite3_column_int64(stmt, 0));
639 #endif
640                 _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
641                 _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
642                 _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 3));
643
644                 if (callback((media_folder_h)_folder, user_data) == false) {
645                         media_folder_destroy((media_folder_h) _folder);
646                         break;
647                 }
648
649                 media_folder_destroy((media_folder_h) _folder);
650         }
651
652         SQLITE3_FINALIZE(stmt);
653
654         return ret;
655 }
656
657 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
658 {
659         int ret = MEDIA_CONTENT_ERROR_NONE;
660         char *condition_query = NULL;
661         char *option_query = NULL;
662         sqlite3_stmt *stmt = NULL;
663
664         ret = __media_db_make_query(filter, &condition_query, &option_query);
665         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
666
667         ret = _content_query_prepare(SELECT_PLAYLIST_LIST, condition_query, option_query, &stmt);
668         g_free(condition_query);
669         g_free(option_query);
670         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
671
672         while (sqlite3_step(stmt) == SQLITE_ROW) {
673                 media_playlist_s *_playlist = g_new0(media_playlist_s, 1);
674
675                 _playlist->playlist_id = sqlite3_column_int(stmt, 0);
676                 _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
677                 _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
678
679                 if (callback((media_playlist_h)_playlist, user_data) == false) {
680                         media_playlist_destroy((media_playlist_h)_playlist);
681                         break;
682                 }
683                 media_playlist_destroy((media_playlist_h)_playlist);
684         }
685
686         SQLITE3_FINALIZE(stmt);
687
688         return ret;
689 }
690
691 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
692 {
693         int ret = MEDIA_CONTENT_ERROR_NONE;
694         char *select_query = NULL;
695         char *condition_query = NULL;
696         char *option_query = NULL;
697         sqlite3_stmt *stmt = NULL;
698
699         select_query = g_strdup_printf(SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
700
701         ret = __media_db_make_query(filter, &condition_query, &option_query);
702         if (ret != MEDIA_CONTENT_ERROR_NONE) {
703                 g_free(select_query);
704                 return ret;
705         }
706
707         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
708         g_free(select_query);
709         g_free(condition_query);
710         g_free(option_query);
711         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
712
713         while (sqlite3_step(stmt) == SQLITE_ROW) {
714                 int playlist_member_id = 0;
715                 playlist_member_id = sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX);     /*MEDIA_INFO_ITEM_MAX is pm_id*/
716
717                 media_info_s *_media = g_new0(media_info_s, 1);
718
719                 _media_info_item_get_detail(stmt, (media_info_h)_media);
720
721                 if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) {
722                         media_info_destroy((media_info_h)_media);
723                         break;
724                 }
725                 media_info_destroy((media_info_h)_media);
726
727         }
728
729         SQLITE3_FINALIZE(stmt);
730
731         return ret;
732 }
733
734 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
735 {
736         int ret = MEDIA_CONTENT_ERROR_NONE;
737         char *select_query = NULL;
738         char *condition_query = NULL;
739         char *option_query = NULL;
740         sqlite3_stmt *stmt = NULL;
741
742         if (STRING_VALID(media_id))
743                 select_query = g_strdup_printf(SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
744         else
745                 select_query = g_strdup(SELECT_TAG_LIST);
746
747         ret = __media_db_make_query(filter, &condition_query, &option_query);
748         if (ret != MEDIA_CONTENT_ERROR_NONE) {
749                 g_free(select_query);
750                 return ret;
751         }
752
753         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
754         g_free(select_query);
755         g_free(condition_query);
756         g_free(option_query);
757         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
758
759         while (sqlite3_step(stmt) == SQLITE_ROW) {
760                 media_tag_s *_tag = g_new0(media_tag_s, 1);
761
762                 _tag->tag_id = sqlite3_column_int(stmt, 0);
763                 _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
764
765                 if (callback((media_tag_h)_tag, user_data) == false) {
766                         media_tag_destroy((media_tag_h)_tag);
767                         break;
768                 }
769                 media_tag_destroy((media_tag_h)_tag);
770         }
771
772         SQLITE3_FINALIZE(stmt);
773
774         return ret;
775 }
776
777 int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
778 {
779         int ret = MEDIA_CONTENT_ERROR_NONE;
780         char *select_query = NULL;
781         char *condition_query = NULL;
782         char *option_query = NULL;
783         sqlite3_stmt *stmt = NULL;
784 #ifdef _USE_TVPD_MODE
785         filter_s *_filter = (filter_s *)filter;
786         if (STRING_VALID(media_id)) {   //get bookmark by media_id
787                 if (_filter && STRING_VALID(_filter->storage_id))
788                         select_query = g_strdup_printf(SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
789                 else
790                         select_query = g_strdup_printf(SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
791         } else {
792                 if (_filter && STRING_VALID(_filter->storage_id))
793                         select_query = g_strdup_printf(SELECT_BOOKMARK_LIST, _filter->storage_id);
794                 else
795                         select_query = g_strdup_printf(SELECT_BOOKMARK_LIST, DB_VIEW_MEDIA);
796         }
797 #else
798         if (STRING_VALID(media_id))
799                 select_query = g_strdup_printf(SELECT_BOOKMARK_LIST_BY_MEDIA_ID, media_id);
800         else
801                 select_query = g_strdup(SELECT_BOOKMARK_LIST);
802 #endif
803
804         ret = __media_db_make_query(filter, &condition_query, &option_query);
805         if (ret != MEDIA_CONTENT_ERROR_NONE) {
806                 g_free(select_query);
807                 return ret;
808         }
809
810         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
811         g_free(select_query);
812         g_free(condition_query);
813         g_free(option_query);
814         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
815
816         while (sqlite3_step(stmt) == SQLITE_ROW) {
817                 media_bookmark_s *bookmark = g_new0(media_bookmark_s, 1);
818
819                 bookmark->bookmark_id = sqlite3_column_int(stmt, 0);
820                 bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
821                 bookmark->marked_time = sqlite3_column_int(stmt, 2);
822                 bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
823                 bookmark->name = g_strdup((const char *)sqlite3_column_text(stmt, 4));
824
825                 if (callback((media_bookmark_h)bookmark, user_data) == false) {
826                         media_bookmark_destroy((media_bookmark_h)bookmark);
827                         break;
828                 }
829
830                 media_bookmark_destroy((media_bookmark_h)bookmark);
831         }
832
833         SQLITE3_FINALIZE(stmt);
834
835         return ret;
836
837 }
838
839 int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
840 {
841         int ret = MEDIA_CONTENT_ERROR_NONE;
842         char *select_query = NULL;
843         char *condition_query = NULL;
844         char *option_query = NULL;
845         sqlite3_stmt *stmt = NULL;
846 #ifdef _USE_TVPD_MODE
847         filter_s *_filter = (filter_s *)filter;
848         if (STRING_VALID(media_id)) {   //get face by media_id
849                 if (_filter && STRING_VALID(_filter->storage_id))
850                         select_query = g_strdup_printf(SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
851                 else
852                         select_query = g_strdup_printf(SELECT_FACE_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
853         } else {
854                 if (_filter && STRING_VALID(_filter->storage_id))
855                         select_query = g_strdup_printf(SELECT_FACE_LIST, _filter->storage_id);
856                 else
857                         select_query = g_strdup_printf(SELECT_FACE_LIST, DB_VIEW_MEDIA);
858         }
859 #else
860         if (STRING_VALID(media_id))
861                 select_query = g_strdup_printf(SELECT_FACE_LIST_BY_MEDIA_ID, media_id);
862         else
863                 select_query = g_strdup(SELECT_FACE_LIST);
864 #endif
865         ret = __media_db_make_query(filter, &condition_query, &option_query);
866         if (ret != MEDIA_CONTENT_ERROR_NONE) {
867                 g_free(select_query);
868                 return ret;
869         }
870
871         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
872         g_free(select_query);
873         g_free(condition_query);
874         g_free(option_query);
875         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
876
877         while (sqlite3_step(stmt) == SQLITE_ROW) {
878                 media_face_s *face = g_new0(media_face_s, 1);
879
880                 face->face_id = sqlite3_column_int(stmt, 0);
881                 face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
882                 face->face_rect_x = sqlite3_column_int(stmt, 2);
883                 face->face_rect_y = sqlite3_column_int(stmt, 3);
884                 face->face_rect_w = sqlite3_column_int(stmt, 4);
885                 face->face_rect_h = sqlite3_column_int(stmt, 5);
886                 face->orientation = sqlite3_column_int(stmt, 6);
887                 face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7));
888
889                 if (callback((media_face_h)face, user_data) == false) {
890                         media_face_destroy((media_face_h)face);
891                         break;
892                 }
893
894                 media_face_destroy((media_face_h)face);
895         }
896
897         SQLITE3_FINALIZE(stmt);
898
899         return ret;
900
901 }
902
903 int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_list_e group_type, int *item_count)
904 {
905         int ret = MEDIA_CONTENT_ERROR_NONE;
906         sqlite3_stmt *stmt = NULL;
907         char *select_query = NULL;
908         char *condition_query = NULL;
909         char *option_query = NULL;
910 #ifdef _USE_TVPD_MODE
911         filter_s *_filter = (filter_s *)filter;
912 #endif
913         switch (group_type) {
914         case MEDIA_GROUP_ALBUM:
915 #ifdef _USE_TVPD_MODE
916                 if (_filter && STRING_VALID(_filter->storage_id))
917                         select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id);
918                 else
919                         select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
920 #else
921                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_ALBUM, group_id);
922 #endif
923                 break;
924
925         case MEDIA_GROUP_PLAYLIST:
926                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id);
927                 break;
928
929         case MEDIA_GROUP_TAG:
930                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_TAG, group_id);
931                 break;
932
933         default:
934                 content_error("INVALID_PARAMETER");
935                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
936         }
937
938         ret = __media_db_make_query(filter, &condition_query, &option_query);
939         if (ret != MEDIA_CONTENT_ERROR_NONE) {
940                 g_free(select_query);
941                 return ret;
942         }
943
944         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
945         g_free(select_query);
946         g_free(condition_query);
947         g_free(option_query);
948         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
949
950         if (sqlite3_step(stmt) == SQLITE_ROW)
951                 *item_count = sqlite3_column_int(stmt, 0);
952
953         SQLITE3_FINALIZE(stmt);
954
955         return ret;
956 }
957
958 int _media_db_get_group_item_count(const char *group_name, filter_h filter, group_list_e group_type, int *item_count)
959 {
960         int ret = MEDIA_CONTENT_ERROR_NONE;
961         sqlite3_stmt *stmt = NULL;
962         char *select_query = NULL;
963         char *condition_query = NULL;
964         char *option_query = NULL;
965         char *tmp_option = NULL;
966         bool need_bracket = false;
967         filter_s *_filter = (filter_s *)filter;
968
969         switch (group_type) {
970         case MEDIA_GROUP_NONE:
971                 if (!_filter) {
972 #ifdef _USE_TVPD_MODE
973                         select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
974 #else
975                         select_query = g_strdup(SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE);
976 #endif
977                         break;
978                 }
979
980                 if (_filter->offset < 0 && _filter->count < 0) {
981 #ifdef _USE_TVPD_MODE
982                         if (STRING_VALID(_filter->storage_id))
983                                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
984                         else
985                                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
986 #else
987                         select_query = g_strdup(SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE);
988 #endif
989                 } else {
990 #ifdef _USE_TVPD_MODE
991                         if (STRING_VALID(_filter->storage_id))
992                                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_MEDIA, _filter->storage_id);
993                         else
994                                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_MEDIA, DB_VIEW_MEDIA);
995 #else
996                         select_query = g_strdup(SELECT_MEDIA_COUNT_FROM_MEDIA);
997 #endif
998                         need_bracket = true;
999                 }
1000                 break;
1001
1002         case MEDIA_GROUP_FOLDER:
1003 #ifdef _USE_TVPD_MODE
1004                 if (_filter && STRING_VALID(_filter->storage_id))
1005                         select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
1006                 else
1007                         select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1008 #else
1009                 select_query = g_strdup_printf(SELECT_MEDIA_COUNT_FROM_FOLDER, group_name);
1010 #endif
1011                 break;
1012
1013         case MEDIA_GROUP_TAG_BY_MEDIA_ID:
1014                 select_query = g_strdup_printf(SELECT_TAG_COUNT_BY_MEDIA_ID, group_name);
1015                 break;
1016
1017         case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
1018 #ifdef _USE_TVPD_MODE
1019                 if (_filter && STRING_VALID(_filter->storage_id))
1020                         select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1021                 else
1022                         select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
1023 #else
1024                 select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, group_name);
1025 #endif
1026                 break;
1027
1028         case MEDIA_GROUP_FACE_BY_MEDIA_ID:
1029 #ifdef _USE_TVPD_MODE
1030                 if (_filter && STRING_VALID(_filter->storage_id))
1031                         select_query = g_strdup_printf(SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1032                 else
1033                         select_query = g_strdup_printf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
1034 #else
1035                 select_query = g_strdup_printf(SELECT_FACE_COUNT_BY_MEDIA_ID, group_name);
1036 #endif
1037                 break;
1038
1039 #ifdef _USE_TVPD_MODE
1040         case MEDIA_GROUP_PVR:
1041                 if (_filter && STRING_VALID(_filter->storage_id))
1042                         select_query = g_strdup_printf(SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id);
1043                 else
1044                         select_query = g_strdup(SELECT_PVR_COUNT);
1045                 break;
1046
1047         case MEDIA_GROUP_UHD:
1048                 if (_filter && STRING_VALID(_filter->storage_id))
1049                         select_query = g_strdup_printf(SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id);
1050                 else
1051                         select_query = g_strdup(SELECT_UHD_COUNT);
1052                 break;
1053 #endif
1054         default:
1055                 content_error("INVALID_PARAMETER");
1056                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1057         }
1058
1059         ret = __media_db_make_query(filter, &condition_query, &option_query);
1060         if (ret != MEDIA_CONTENT_ERROR_NONE) {
1061                 g_free(select_query);
1062                 return ret;
1063         }
1064
1065         if (need_bracket) {
1066                 tmp_option = g_strconcat(option_query, ")", NULL);
1067                 g_free(option_query);
1068                 option_query = tmp_option;
1069         }
1070
1071         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1072         g_free(select_query);
1073         g_free(condition_query);
1074         g_free(option_query);
1075         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1076
1077         if (sqlite3_step(stmt) == SQLITE_ROW)
1078                 *item_count = sqlite3_column_int(stmt, 0);
1079
1080         SQLITE3_FINALIZE(stmt);
1081
1082         return ret;
1083 }
1084
1085 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)
1086 {
1087         int ret = MEDIA_CONTENT_ERROR_NONE;
1088         char *select_query = NULL;
1089         char *condition_query = NULL;
1090         char *option_query = NULL;
1091         sqlite3_stmt *stmt = NULL;
1092 #ifdef _USE_TVPD_MODE
1093         filter_s *_filter = (filter_s *)filter;
1094 #endif
1095
1096         switch (group_type) {
1097         case MEDIA_GROUP_ALBUM:
1098 #ifdef _USE_TVPD_MODE
1099                 if (_filter && STRING_VALID(_filter->storage_id))
1100                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id);
1101                 else
1102                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
1103 #else
1104                 select_query = g_strdup_printf(SELECT_MEDIA_FROM_ALBUM, group_id);
1105 #endif
1106                 break;
1107
1108         case MEDIA_GROUP_PLAYLIST:
1109 #ifdef _USE_TVPD_MODE
1110                 if (_filter && STRING_VALID(_filter->storage_id))
1111                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id);
1112                 else
1113                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_PLAYLIST, DB_VIEW_MEDIA, group_id);
1114 #else
1115                 select_query = g_strdup_printf(SELECT_MEDIA_FROM_PLAYLIST, group_id);
1116 #endif
1117                 break;
1118
1119         case MEDIA_GROUP_TAG:
1120 #ifdef _USE_TVPD_MODE
1121                 if (_filter && STRING_VALID(_filter->storage_id))
1122                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id);
1123                 else
1124                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_TAG, DB_VIEW_MEDIA, group_id);
1125 #else
1126                 select_query = g_strdup_printf(SELECT_MEDIA_FROM_TAG, group_id);
1127 #endif
1128                 break;
1129
1130         default:
1131                 content_error("INVALID_PARAMETER");
1132                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1133         }
1134
1135         ret = __media_db_make_query(filter, &condition_query, &option_query);
1136         if (ret != MEDIA_CONTENT_ERROR_NONE) {
1137                 g_free(select_query);
1138                 return ret;
1139         }
1140
1141         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1142         g_free(select_query);
1143         g_free(condition_query);
1144         g_free(option_query);
1145         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1146
1147         while (sqlite3_step(stmt) == SQLITE_ROW) {
1148                 media_info_s *item = g_new0(media_info_s, 1);
1149
1150                 _media_info_item_get_detail(stmt, (media_info_h)item);
1151
1152                 if (callback((media_info_h)item, user_data) == false) {
1153                         media_info_destroy((media_info_h)item);
1154                         break;
1155                 }
1156
1157                 media_info_destroy((media_info_h)item);
1158         }
1159
1160         SQLITE3_FINALIZE(stmt);
1161
1162         return ret;
1163 }
1164
1165 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)
1166 {
1167         int ret = MEDIA_CONTENT_ERROR_NONE;
1168         char *select_query = NULL;
1169         char *condition_query = NULL;
1170         char *option_query = NULL;
1171         sqlite3_stmt *stmt = NULL;
1172 #ifdef _USE_TVPD_MODE
1173         filter_s *_filter = (filter_s *)filter;
1174 #endif
1175
1176         switch (group_type) {
1177         case MEDIA_GROUP_NONE:
1178 #ifdef _USE_TVPD_MODE
1179                 if (_filter && STRING_VALID(_filter->storage_id))
1180                         select_query = g_strdup_printf(SELECT_MEDIA_ITEM, _filter->storage_id);
1181                 else
1182                         select_query = g_strdup_printf(SELECT_MEDIA_ITEM, DB_VIEW_MEDIA);
1183 #else
1184                 select_query = g_strdup(SELECT_MEDIA_ITEM);
1185 #endif
1186                 break;
1187
1188         case MEDIA_GROUP_FOLDER:
1189 #ifdef _USE_TVPD_MODE
1190                 if (_filter && STRING_VALID(_filter->storage_id))
1191                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name);
1192                 else
1193                         select_query = g_strdup_printf(SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1194 #else
1195                 select_query = g_strdup_printf(SELECT_MEDIA_FROM_FOLDER, group_name);
1196 #endif
1197                 break;
1198
1199         default:
1200                 content_error("INVALID_PARAMETER");
1201                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1202         }
1203
1204         ret = __media_db_make_query(filter, &condition_query, &option_query);
1205         if (ret != MEDIA_CONTENT_ERROR_NONE) {
1206                 g_free(select_query);
1207                 return ret;
1208         }
1209
1210         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1211         g_free(select_query);
1212         g_free(condition_query);
1213         g_free(option_query);
1214         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1215
1216         while (sqlite3_step(stmt) == SQLITE_ROW) {
1217                 media_info_s *item = g_new0(media_info_s, 1);
1218
1219                 _media_info_item_get_detail(stmt, (media_info_h)item);
1220
1221                 if (callback((media_info_h)item, user_data) == false) {
1222                         media_info_destroy((media_info_h)item);
1223                         break;
1224                 }
1225
1226                 media_info_destroy((media_info_h)item);
1227         }
1228
1229         SQLITE3_FINALIZE(stmt);
1230
1231         return ret;
1232 }
1233
1234 int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count)
1235 {
1236         int ret = MEDIA_CONTENT_ERROR_NONE;
1237         sqlite3_stmt *stmt = NULL;
1238         char select_query[MAX_QUERY_SIZE] = {0, };
1239         char *tmp_option = NULL;
1240         char *condition_query = NULL;
1241         char *option_query = NULL;
1242 #ifdef _USE_TVPD_MODE
1243         filter_s *_filter = (filter_s *)filter;
1244         if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
1245                 if (group_name) {
1246                         if (_filter && STRING_VALID(_filter->storage_id))
1247                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1248                         else
1249                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1250                 } else {
1251                         if (_filter && STRING_VALID(_filter->storage_id))
1252                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1253                         else
1254                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1255                 }
1256         } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
1257                 if (group_name) {
1258                         if (_filter && STRING_VALID(_filter->storage_id))
1259                                 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);
1260                         else
1261                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1262                 } else {
1263                         if (_filter && STRING_VALID(_filter->storage_id))
1264                                 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1265                         else
1266                                 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1267                 }
1268         } else {/*uhd content*/
1269                 if (group_name) {
1270                         if (_filter && STRING_VALID(_filter->storage_id))
1271                                 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);
1272                         else
1273                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1274                 } else {
1275                         if (_filter && STRING_VALID(_filter->storage_id))
1276                                 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1277                         else
1278                                 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1279                 }
1280         }
1281 #else
1282         if (group_name)
1283                 sqlite3_snprintf(MAX_QUERY_SIZE, select_query, SELECT_MEDIA_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1284         else
1285                 snprintf(select_query, MAX_QUERY_SIZE, SELECT_MEDIA_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1286 #endif
1287         ret = __media_db_make_query(filter, &condition_query, &option_query);
1288         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1289
1290         /* If 'filter' is not NULL, 'option_query' must be created. */
1291         if (option_query) {
1292                 tmp_option = g_strconcat(option_query, ")", NULL);
1293                 g_free(option_query);
1294                 option_query = tmp_option;
1295         } else {
1296                 SAFE_STRLCAT(select_query, ")", sizeof(select_query));
1297         }
1298
1299         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1300         g_free(condition_query);
1301         g_free(option_query);
1302         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1303
1304         if (sqlite3_step(stmt) == SQLITE_ROW)
1305                 *item_count = sqlite3_column_int(stmt, 0);
1306
1307         SQLITE3_FINALIZE(stmt);
1308
1309         return ret;
1310 }
1311
1312 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)
1313 {
1314         int ret = MEDIA_CONTENT_ERROR_NONE;
1315         char select_query[MAX_QUERY_SIZE] = {0, };
1316         char *condition_query = NULL;
1317         char *option_query = NULL;
1318         sqlite3_stmt *stmt = NULL;
1319 #ifdef _USE_TVPD_MODE
1320         filter_s *_filter = (filter_s *)filter;
1321         if (group_name) {
1322                 if (_filter && STRING_VALID(_filter->storage_id))
1323                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1324                 else
1325                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1326         } else {
1327                 if (_filter && STRING_VALID(_filter->storage_id))
1328                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1329                 else
1330                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1331         }
1332 #else
1333         if (group_name)
1334                 sqlite3_snprintf(MAX_QUERY_SIZE, select_query, SELECT_MEDIA_FROM_GROUP, __media_db_get_group_name(group), group_name);
1335         else
1336                 snprintf(select_query, MAX_QUERY_SIZE, SELECT_MEDIA_FROM_GROUP_NULL, __media_db_get_group_name(group));
1337 #endif
1338         ret = __media_db_make_query(filter, &condition_query, &option_query);
1339         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1340
1341         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1342         g_free(condition_query);
1343         g_free(option_query);
1344         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1345
1346         while (sqlite3_step(stmt) == SQLITE_ROW) {
1347                 media_info_s *item = g_new0(media_info_s, 1);
1348
1349                 _media_info_item_get_detail(stmt, (media_info_h)item);
1350
1351                 if (callback((media_info_h)item, user_data) == false) {
1352                         media_info_destroy((media_info_h)item);
1353                         break;
1354                 }
1355
1356                 media_info_destroy((media_info_h)item);
1357         }
1358
1359         SQLITE3_FINALIZE(stmt);
1360
1361         return ret;
1362 }
1363
1364 #ifdef _USE_TVPD_MODE
1365 int _media_db_get_storage_id_by_media_id(const char *media_id, char **storage_id)
1366 {
1367         int ret = MEDIA_CONTENT_ERROR_NONE;
1368         sqlite3_stmt *stmt = NULL;
1369         char *select_query = NULL;
1370
1371         select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
1372
1373         ret = _content_get_result(select_query, &stmt);
1374         SQLITE3_SAFE_FREE(select_query);
1375         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1376
1377         if (sqlite3_step(stmt) == SQLITE_ROW) {
1378                 *storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1379         } else {
1380                 content_error("Invalid media_id[%s]", media_id);
1381                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1382         }
1383
1384         SQLITE3_FINALIZE(stmt);
1385
1386         return ret;
1387 }
1388
1389 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)
1390 {
1391         int ret = MEDIA_CONTENT_ERROR_NONE;
1392         char select_query[DEFAULT_QUERY_SIZE] = {0, };
1393         char *condition_query = NULL;
1394         char *option_query = NULL;
1395         sqlite3_stmt *stmt = NULL;
1396         filter_s *_filter = (filter_s *)filter;
1397
1398         if (group_name) {
1399                 if (_filter && STRING_VALID(_filter->storage_id))
1400                         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);
1401                 else
1402                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
1403         } else {
1404                 if (_filter && STRING_VALID(_filter->storage_id))
1405                         snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1406                 else
1407                         snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
1408         }
1409
1410         ret = __media_db_make_query(filter, &condition_query, &option_query);
1411         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1412
1413         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1414         g_free(condition_query);
1415         g_free(option_query);
1416         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1417
1418         while (sqlite3_step(stmt) == SQLITE_ROW) {
1419                 media_pvr_s *item = g_new0(media_pvr_s, 1);
1420
1421                 _media_pvr_item_get_detail(stmt, (media_pvr_h)item);
1422
1423                 if (callback((media_pvr_h)item, user_data) == false) {
1424                         media_info_destroy((media_pvr_h)item);
1425                         break;
1426                 }
1427
1428                 media_pvr_destroy((media_pvr_h)item);
1429         }
1430
1431         SQLITE3_FINALIZE(stmt);
1432
1433         return ret;
1434 }
1435
1436 typedef enum {
1437         MEDIA_PVR_MEDIA_ID = 0,
1438         MEDIA_PVR_STORAGE_ID,
1439         MEDIA_PVR_PATH,
1440         MEDIA_PVR_SIZE,
1441         MEDIA_PVR_DURATION,
1442         MEDIA_PVR_TIME_ZONE,
1443         MEDIA_PVR_PTC,
1444         MEDIA_PVR_MAJOR,
1445         MEDIA_PVR_MINOR,
1446         MEDIA_PVR_CHANNEL_TYPE,
1447         MEDIA_PVR_CHANNEL_NAME,
1448         MEDIA_PVR_CHANNEL_NUM,
1449         MEDIA_PVR_SERVICE_PROFILE,
1450         MEDIA_PVR_PROGRAM_TITLE,
1451         MEDIA_PVR_PROGRAM_NUM,
1452         MEDIA_PVR_PROGRAM_CRID,
1453         MEDIA_PVR_GUIDANCE,
1454         MEDIA_PVR_SYNOPSIS,
1455         MEDIA_PVR_GENRE,
1456         MEDIA_PVR_LANGUAGE,
1457         MEDIA_PVR_EMBARGO_TIME,
1458         MEDIA_PVR_EXPIRY_TIME,
1459         MEDIA_PVR_START_TIME,
1460         MEDIA_PVR_PROGRAM_START_TIME,
1461         MEDIA_PVR_PROGRAM_END_TIME,
1462         MEDIA_PVR_PROGRAM_DATE,
1463         MEDIA_PVR_PARENTAL_RATING,
1464         MEDIA_PVR_TIMER_RECORD,
1465         MEDIA_PVR_SERIES_RECORD,
1466         MEDIA_PVR_HD,
1467         MEDIA_PVR_SUBTITLE,
1468         MEDIA_PVR_TTX,
1469         MEDIA_PVR_AD,
1470         MEDIA_PVR_HARDOF_HEARINGRADIO,
1471         MEDIA_PVR_DATA_SERVICE,
1472         MEDIA_PVR_CONTENT_LOCK,
1473         MEDIA_PVR_CONTENT_WATCH,
1474         MEDIA_PVR_HAS_AUDIO_ONLY,
1475         MEDIA_PVR_IS_LOCAL_RECORDED,
1476         MEDIA_PVR_RESOLUTION,
1477         MEDIA_PVR_ASPECTRATIO,
1478         MEDIA_PVR_MODIFIED_MONTH,
1479         MEDIA_PVR_SPORTS_TYPE,
1480         MEDIA_PVR_GUIDANCE_LENGTH,
1481         MEDIA_PVR_TVMODE,
1482         MEDIA_PVR_PLAY_COUNT,
1483         MEDIA_PVR_PRIVATE_DATA,
1484         MEDIA_PVR_HIGHLIGHT,
1485 } media_pvr_field_e;
1486
1487 void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
1488 {
1489         media_pvr_s *_pvr = (media_pvr_s*)pvr;
1490
1491         _pvr->media_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID));
1492         _pvr->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID));
1493         _pvr->path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH));
1494         _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
1495         _pvr->duration = sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
1496         _pvr->timezone = sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
1497         _pvr->ptc = sqlite3_column_int(stmt, MEDIA_PVR_PTC);
1498         _pvr->major = sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
1499         _pvr->minor = sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
1500         _pvr->channel_type = sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
1501         _pvr->service_profile = (unsigned int)sqlite3_column_int(stmt, MEDIA_PVR_SERVICE_PROFILE);
1502         _pvr->channel_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME));
1503         _pvr->channel_num = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM));
1504         _pvr->program_title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE));
1505         _pvr->program_num = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
1506         _pvr->program_crid = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID));
1507         _pvr->guidance = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE));
1508         _pvr->synopsis = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS));
1509         _pvr->genre = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE));
1510         _pvr->language = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE));
1511         _pvr->modified_month = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH));
1512         _pvr->private_data = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA));
1513         _pvr->embargo_time = sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
1514         _pvr->expiry_time = sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
1515         _pvr->start_time = sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
1516         _pvr->program_start_time = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
1517         _pvr->program_end_time = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
1518         _pvr->program_date = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
1519         _pvr->parental_rating = sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
1520         _pvr->timer_record = sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
1521         _pvr->series_record = sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
1522         _pvr->hd = sqlite3_column_int(stmt, MEDIA_PVR_HD);
1523         _pvr->subtitle = sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
1524         _pvr->ttx = sqlite3_column_int(stmt, MEDIA_PVR_TTX);
1525         _pvr->ad = sqlite3_column_int(stmt, MEDIA_PVR_AD);
1526         _pvr->hard_of_hearing_radio = sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
1527         _pvr->data_service = sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
1528         _pvr->content_lock = sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
1529         _pvr->content_watch = sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
1530         _pvr->has_audio_only = sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
1531         _pvr->is_local_record = sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
1532         _pvr->resolution = sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
1533         _pvr->aspectratio = sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
1534         _pvr->sports_type = sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
1535         _pvr->guidance_length = sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
1536         _pvr->tvmode = sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
1537         _pvr->play_count = sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
1538         _pvr->highlight = sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
1539
1540         return;
1541 }
1542
1543 int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
1544 {
1545         int ret = MEDIA_CONTENT_ERROR_NONE;
1546         char select_query[DEFAULT_QUERY_SIZE] = {0, };
1547         char *condition_query = NULL;
1548         char *option_query = NULL;
1549         sqlite3_stmt *stmt = NULL;
1550         filter_s *_filter = (filter_s *)filter;
1551
1552         if (_filter && STRING_VALID(_filter->storage_id))
1553                 snprintf(select_query, sizeof(select_query), SELECT_PVR_LIST_BY_STORAGE_ID, _filter->storage_id);
1554         else
1555                 SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
1556
1557         ret = __media_db_make_query(filter, &condition_query, &option_query);
1558         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1559
1560         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1561         g_free(condition_query);
1562         g_free(option_query);
1563         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1564
1565         while (sqlite3_step(stmt) == SQLITE_ROW) {
1566                 media_pvr_s *_pvr = g_new0(media_pvr_s, 1);
1567
1568                 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
1569
1570                 if (callback((media_pvr_h)_pvr, user_data) == false) {
1571                         media_pvr_destroy((media_pvr_h) _pvr);
1572                         break;
1573                 }
1574
1575                 media_pvr_destroy((media_pvr_h) _pvr);
1576         }
1577
1578         SQLITE3_FINALIZE(stmt);
1579
1580         return ret;
1581 }
1582
1583 typedef enum {
1584         MEDIA_UHD_MEDIA_ID = 0,
1585         MEDIA_UHD_STORAGE_ID,
1586         MEDIA_UHD_PATH,
1587         MEDIA_UHD_SIZE,
1588         MEDIA_UHD_CONTENT_ID,
1589         MEDIA_UHD_CONTENT_TITLE,
1590         MEDIA_UHD_FILE_NAME,
1591         MEDIA_UHD_FOLDER_ID,
1592         MEDIA_UHD_RELEASE_DATE,
1593         MEDIA_UHD_MODIFIED_TIME,
1594         MEDIA_UHD_PLAYED_POSITION,
1595         MEDIA_UHD_SUB_TYPE,
1596         MEDIA_UHD_PLAYED_COUNT,
1597 } media_uhd_field_e;
1598
1599 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
1600 {
1601         media_uhd_s *_uhd = (media_uhd_s*)uhd;
1602
1603         _uhd->media_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID));
1604         _uhd->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID));
1605         _uhd->path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH));
1606         _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE);
1607         _uhd->content_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID));
1608         _uhd->content_title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE));
1609         _uhd->file_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME));
1610         _uhd->release_date = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE));
1611         _uhd->modified_time = sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
1612         _uhd->played_position = sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
1613         _uhd->sub_type = sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
1614         _uhd->played_count = sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
1615
1616         return;
1617 }
1618
1619 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
1620 {
1621         int ret = MEDIA_CONTENT_ERROR_NONE;
1622         char select_query[DEFAULT_QUERY_SIZE] = {0, };
1623         char *condition_query = NULL;
1624         char *option_query = NULL;
1625         sqlite3_stmt *stmt = NULL;
1626         filter_s *_filter = (filter_s *)filter;
1627
1628         if (_filter && STRING_VALID(_filter->storage_id))
1629                 snprintf(select_query, sizeof(select_query), SELECT_UHD_LIST_BY_STORAGE_ID, _filter->storage_id);
1630         else
1631                 SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
1632
1633         ret = __media_db_make_query(filter, &condition_query, &option_query);
1634         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1635
1636         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1637         g_free(condition_query);
1638         g_free(option_query);
1639         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1640
1641         while (sqlite3_step(stmt) == SQLITE_ROW) {
1642                 media_uhd_s *_uhd = g_new0(media_uhd_s, 1);
1643
1644                 _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd);
1645
1646                 if (callback((media_uhd_h)_uhd, user_data) == false) {
1647                         media_uhd_destroy((media_uhd_h) _uhd);
1648                         break;
1649                 }
1650                 media_uhd_destroy((media_uhd_h) _uhd);
1651         }
1652
1653         SQLITE3_FINALIZE(stmt);
1654
1655         return ret;
1656 }
1657
1658 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
1659 {
1660         int ret = MEDIA_CONTENT_ERROR_NONE;
1661         char *condition_query = NULL;
1662         char *option_query = NULL;
1663         sqlite3_stmt *stmt = NULL;
1664
1665         ret = __media_db_make_query(filter, &condition_query, &option_query);
1666         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1667
1668         ret = _content_query_prepare(SELECT_STORAGE_LIST, condition_query, option_query, &stmt);
1669         g_free(condition_query);
1670         g_free(option_query);
1671         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1672
1673         while (sqlite3_step(stmt) == SQLITE_ROW) {
1674                 media_storage_s *_storage = g_new0(media_storage_s, 1);
1675
1676                 _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1677                 _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
1678
1679                 if (callback((media_storage_h)_storage, user_data) == false) {
1680                         media_storage_destroy((media_storage_h) _storage);
1681                         break;
1682                 }
1683
1684                 media_storage_destroy((media_storage_h) _storage);
1685         }
1686
1687         SQLITE3_FINALIZE(stmt);
1688
1689         return ret;
1690 }
1691 #endif