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