apply content_retip_if_fail() for invalid parameters
[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         if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
289                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
290                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
291                 else
292                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_VIEW_MEDIA);
293         } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content*/
294                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
295                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
296                 else
297                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT, __media_db_get_group_name(group));
298         } else { /*uhd content*/
299                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
300                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
301                 else
302                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group));
303         }
304         ret = __media_db_make_query(filter, &condition_query, &option_query);
305         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
306
307         if (option_query) {
308                 tmp_option = g_strconcat(option_query, ")", NULL);
309                 g_free(option_query);
310                 option_query = tmp_option;
311         } else {
312                 SAFE_STRLCAT(select_query, ")", sizeof(select_query));
313         }
314
315         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
316         g_free(condition_query);
317         g_free(option_query);
318         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
319
320         if (sqlite3_step(stmt) == SQLITE_ROW)
321                 *group_count = sqlite3_column_int(stmt, 0);
322
323         SQLITE3_FINALIZE(stmt);
324
325         return ret;
326 }
327
328 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
329 {
330         int ret = MEDIA_CONTENT_ERROR_NONE;
331         char select_query[MAX_QUERY_SIZE] = {0, };
332         char *condition_query = NULL;
333         char *option_query = NULL;
334         char *name = NULL;
335         sqlite3_stmt *stmt = NULL;
336         filter_s *_filter = (filter_s *)filter;
337
338         if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
339                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
340                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
341                 else
342                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_VIEW_MEDIA);
343         } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content */
344                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
345                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
346                 else
347                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST, __media_db_get_group_name(group));
348         } else { /* uhd content */
349                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
350                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
351                 else
352                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group));
353         }
354         ret = __media_db_make_query(filter, &condition_query, &option_query);
355         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
356
357         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
358         g_free(condition_query);
359         g_free(option_query);
360         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
361
362         while (sqlite3_step(stmt) == SQLITE_ROW) {
363                 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
364
365                 if (callback(name, user_data) == false) {
366                         g_free(name);
367                         break;
368                 }
369
370                 g_free(name);
371         }
372
373         SQLITE3_FINALIZE(stmt);
374
375         return ret;
376 }
377
378 int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, media_group_and_count_cb callback, void *user_data)
379 {
380         int ret = MEDIA_CONTENT_ERROR_NONE;
381         char select_query[DEFAULT_QUERY_SIZE] = {0, };
382         char group_query[DEFAULT_QUERY_SIZE] = {0, };
383         char *condition_query = NULL;
384         char *option_query = NULL;
385         char *name = NULL;
386         sqlite3_stmt *stmt = NULL;
387         filter_s *_filter = (filter_s *)filter;
388
389         const char* group_name = __media_db_get_group_name(group);
390         content_retip_if_fail(STRING_VALID(group_name));
391
392         if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
393                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
394                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, _filter->storage_id);
395                 else
396                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, DB_VIEW_MEDIA);
397         } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
398                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
399                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
400                 else
401                         snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT, group_name);
402         } else {/*uhd content*/
403                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
404                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
405                 else
406                         snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name);
407         }
408
409         ret = __media_db_make_query(filter, &condition_query, &option_query);
410         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
411
412         if (STRING_VALID(option_query))
413                 snprintf(group_query, sizeof(group_query), "GROUP BY %s %s", group_name, option_query);
414         else
415                 snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name);
416
417         ret = _content_query_prepare(select_query, condition_query, group_query, &stmt);
418         g_free(condition_query);
419         g_free(option_query);
420         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
421
422         while (sqlite3_step(stmt) == SQLITE_ROW) {
423                 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
424
425                 if (callback(name, sqlite3_column_int(stmt, 1), user_data) == false) {
426                         g_free(name);
427                         break;
428                 }
429
430                 g_free(name);
431         }
432
433         SQLITE3_FINALIZE(stmt);
434
435         return ret;
436 }
437 #else
438 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
439 {
440         int ret = MEDIA_CONTENT_ERROR_NONE;
441         sqlite3_stmt *stmt = NULL;
442         char *select_query = NULL;
443         char *condition_query = NULL;
444         char *option_query = NULL;
445         filter_s *_filter = (filter_s *)filter;
446
447         switch (group_type) {
448         case MEDIA_GROUP_ALBUM:
449                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
450                         select_query = g_strdup_printf(SELECT_ALBUM_COUNT_BY_STORAGE_ID, _filter->storage_id);
451                 else
452                         select_query = g_strdup(SELECT_ALBUM_COUNT);
453                 break;
454
455         case MEDIA_GROUP_FOLDER:
456                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
457                         select_query = g_strdup_printf(SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id);
458                 else
459                         select_query = g_strdup(SELECT_FOLDER_COUNT);
460                 break;
461
462         case MEDIA_GROUP_PLAYLIST:
463                 select_query = g_strdup(SELECT_PLAYLIST_COUNT);
464                 break;
465
466         case MEDIA_GROUP_TAG:
467                 select_query = g_strdup(SELECT_TAG_COUNT);
468                 break;
469
470         case MEDIA_GROUP_BOOKMARK:
471                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
472                         select_query = g_strdup_printf(SELECT_BOOKMARK_COUNT_BY_STORAGE_ID, _filter->storage_id);
473                 else
474                         select_query = g_strdup(SELECT_BOOKMARK_COUNT);
475
476                 break;
477
478         case MEDIA_GROUP_STORAGE:
479                 select_query = g_strdup(SELECT_STORAGE_COUNT);
480                 break;
481
482         case MEDIA_GROUP_FACE:
483                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
484                         select_query = g_strdup_printf(SELECT_FACE_COUNT_BY_STORAGE_ID, _filter->storage_id);
485                 else
486                         select_query = g_strdup(SELECT_FACE_COUNT);
487                 break;
488
489         default:
490                 content_error("Invalid group type [%d]", group_type);
491                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
492         }
493
494         ret = __media_db_make_query(filter, &condition_query, &option_query);
495         if (ret != MEDIA_CONTENT_ERROR_NONE) {
496                 g_free(select_query);
497                 return ret;
498         }
499
500         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
501         g_free(select_query);
502         g_free(condition_query);
503         g_free(option_query);
504         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
505
506         if (sqlite3_step(stmt) == SQLITE_ROW)
507                 *group_count = sqlite3_column_int(stmt, 0);
508
509         SQLITE3_FINALIZE(stmt);
510
511         return ret;
512 }
513
514 int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
515 {
516         int ret = MEDIA_CONTENT_ERROR_NONE;
517         sqlite3_stmt *stmt = NULL;
518         char *select_query = NULL;
519         char *condition_query = NULL;
520         char *option_query = NULL;
521         filter_s *_filter = (filter_s *)filter;
522
523         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
524                 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);
525         else
526                 select_query = g_strdup_printf(SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), __media_db_get_group_name(group));
527
528         ret = __media_db_make_query(filter, &condition_query, &option_query);
529         if (ret != MEDIA_CONTENT_ERROR_NONE) {
530                 g_free(select_query);
531                 return ret;
532         }
533
534         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
535         g_free(select_query);
536         g_free(condition_query);
537         g_free(option_query);
538         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
539
540         if (sqlite3_step(stmt) == SQLITE_ROW)
541                 *group_count = sqlite3_column_int(stmt, 0);
542
543         SQLITE3_FINALIZE(stmt);
544
545         return ret;
546 }
547
548 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
549 {
550         int ret = MEDIA_CONTENT_ERROR_NONE;
551         char *select_query = NULL;
552         char *condition_query = NULL;
553         char *option_query = NULL;
554         char *name = NULL;
555         sqlite3_stmt *stmt = NULL;
556         filter_s *_filter = (filter_s *)filter;
557
558         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
559                 select_query = g_strdup_printf(SELECT_MEDIA_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
560         else
561                 select_query = g_strdup_printf(SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group));
562
563         ret = __media_db_make_query(filter, &condition_query, &option_query);
564         if (ret != MEDIA_CONTENT_ERROR_NONE) {
565                 g_free(select_query);
566                 return ret;
567         }
568
569         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
570         g_free(select_query);
571         g_free(condition_query);
572         g_free(option_query);
573         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
574
575         while (sqlite3_step(stmt) == SQLITE_ROW) {
576                 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
577
578                 if (callback(name, user_data) == false) {
579                         g_free(name);
580                         break;
581                 }
582
583                 g_free(name);
584         }
585
586         SQLITE3_FINALIZE(stmt);
587
588         return ret;
589 }
590 #endif
591
592 int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data)
593 {
594         int ret = MEDIA_CONTENT_ERROR_NONE;
595         char select_query[MAX_QUERY_SIZE] = {0, };
596         char *condition_query = NULL;
597         char *option_query = NULL;
598         sqlite3_stmt *stmt = NULL;
599         filter_s *_filter = (filter_s *)filter;
600
601 #ifdef _USE_TVPD_MODE
602         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
603                 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, _filter->storage_id);
604         else
605                 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_VIEW_MEDIA);
606 #else
607         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
608                 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST_BY_STORAGE_ID, _filter->storage_id);
609         else
610                 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST);
611 #endif
612         ret = __media_db_make_query(filter, &condition_query, &option_query);
613         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
614
615         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
616         g_free(condition_query);
617         g_free(option_query);
618         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
619
620         while (sqlite3_step(stmt) == SQLITE_ROW) {
621                 media_album_s *album = g_new0(media_album_s, 1);
622
623                 album->album_id = sqlite3_column_int(stmt, 0);
624                 album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
625                 album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2));
626                 album->album_art_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
627
628                 if (callback((media_album_h)album, user_data) == false) {
629                         media_album_destroy((media_album_h)album);
630                         break;
631                 }
632
633                 media_album_destroy((media_album_h)album);
634         }
635
636         SQLITE3_FINALIZE(stmt);
637
638         return ret;
639 }
640
641 int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_data)
642 {
643         int ret = MEDIA_CONTENT_ERROR_NONE;
644         char select_query[MAX_QUERY_SIZE] = {0, };
645         char *condition_query = NULL;
646         char *option_query = NULL;
647         sqlite3_stmt *stmt = NULL;
648         filter_s *_filter = (filter_s *)filter;
649
650 #ifdef _USE_TVPD_MODE
651         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
652                 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
653         else
654                 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_VIEW_MEDIA);
655 #else
656         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
657                 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id);
658         else
659                 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST);
660 #endif
661         ret = __media_db_make_query(filter, &condition_query, &option_query);
662         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
663
664         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
665         g_free(condition_query);
666         g_free(option_query);
667         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
668
669         while (sqlite3_step(stmt) == SQLITE_ROW) {
670                 media_folder_s *_folder = g_new0(media_folder_s, 1);
671
672                 _folder->folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
673                 _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
674                 _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
675                 _folder->storage_type = sqlite3_column_int(stmt, 3);
676                 _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 4));
677
678                 if (callback((media_folder_h)_folder, user_data) == false) {
679                         media_folder_destroy((media_folder_h) _folder);
680                         break;
681                 }
682
683                 media_folder_destroy((media_folder_h) _folder);
684         }
685
686         SQLITE3_FINALIZE(stmt);
687
688         return ret;
689 }
690
691 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
692 {
693         int ret = MEDIA_CONTENT_ERROR_NONE;
694         char *condition_query = NULL;
695         char *option_query = NULL;
696         sqlite3_stmt *stmt = NULL;
697
698         ret = __media_db_make_query(filter, &condition_query, &option_query);
699         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
700
701         ret = _content_query_prepare(SELECT_PLAYLIST_LIST, condition_query, option_query, &stmt);
702         g_free(condition_query);
703         g_free(option_query);
704         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
705
706         while (sqlite3_step(stmt) == SQLITE_ROW) {
707                 media_playlist_s *_playlist = g_new0(media_playlist_s, 1);
708
709                 _playlist->playlist_id = sqlite3_column_int(stmt, 0);
710                 _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
711                 _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
712
713                 if (callback((media_playlist_h)_playlist, user_data) == false) {
714                         media_playlist_destroy((media_playlist_h)_playlist);
715                         break;
716                 }
717                 media_playlist_destroy((media_playlist_h)_playlist);
718         }
719
720         SQLITE3_FINALIZE(stmt);
721
722         return ret;
723 }
724
725 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
726 {
727         int ret = MEDIA_CONTENT_ERROR_NONE;
728         char *select_query = NULL;
729         char *condition_query = NULL;
730         char *option_query = NULL;
731         sqlite3_stmt *stmt = NULL;
732
733         select_query = g_strdup_printf(SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
734
735         ret = __media_db_make_query(filter, &condition_query, &option_query);
736         if (ret != MEDIA_CONTENT_ERROR_NONE) {
737                 g_free(select_query);
738                 return ret;
739         }
740
741         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
742         g_free(select_query);
743         g_free(condition_query);
744         g_free(option_query);
745         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
746
747         while (sqlite3_step(stmt) == SQLITE_ROW) {
748                 int playlist_member_id = 0;
749                 playlist_member_id = sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX);     /*MEDIA_INFO_ITEM_MAX is pm_id*/
750
751                 media_info_s *_media = g_new0(media_info_s, 1);
752
753                 _media_info_item_get_detail(stmt, (media_info_h)_media);
754
755                 if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) {
756                         media_info_destroy((media_info_h)_media);
757                         break;
758                 }
759                 media_info_destroy((media_info_h)_media);
760
761         }
762
763         SQLITE3_FINALIZE(stmt);
764
765         return ret;
766 }
767
768 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
769 {
770         int ret = MEDIA_CONTENT_ERROR_NONE;
771         char *select_query = NULL;
772         char *condition_query = NULL;
773         char *option_query = NULL;
774         sqlite3_stmt *stmt = NULL;
775
776         if (STRING_VALID(media_id))
777                 select_query = g_strdup_printf(SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
778         else
779                 select_query = g_strdup(SELECT_TAG_LIST);
780
781         ret = __media_db_make_query(filter, &condition_query, &option_query);
782         if (ret != MEDIA_CONTENT_ERROR_NONE) {
783                 g_free(select_query);
784                 return ret;
785         }
786
787         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
788         g_free(select_query);
789         g_free(condition_query);
790         g_free(option_query);
791         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
792
793         while (sqlite3_step(stmt) == SQLITE_ROW) {
794                 media_tag_s *_tag = g_new0(media_tag_s, 1);
795
796                 _tag->tag_id = sqlite3_column_int(stmt, 0);
797                 _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
798
799                 if (callback((media_tag_h)_tag, user_data) == false) {
800                         media_tag_destroy((media_tag_h)_tag);
801                         break;
802                 }
803                 media_tag_destroy((media_tag_h)_tag);
804         }
805
806         SQLITE3_FINALIZE(stmt);
807
808         return ret;
809 }
810
811 int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
812 {
813         int ret = MEDIA_CONTENT_ERROR_NONE;
814         char select_query[MAX_QUERY_SIZE] = {0, };
815         char *condition_query = NULL;
816         char *option_query = NULL;
817         sqlite3_stmt *stmt = NULL;
818         filter_s *_filter = (filter_s *)filter;
819
820 #ifdef _USE_TVPD_MODE
821         if (STRING_VALID(media_id)) {   //get bookmark by media_id
822                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
823                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
824                 else
825                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
826         } else {
827                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
828                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, _filter->storage_id);
829                 else
830                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST, DB_VIEW_MEDIA);
831         }
832 #else
833         if (STRING_VALID(media_id)) {   //get bookmark by media_id
834                 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, media_id);
835         } else {
836                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
837                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_STORAGE_ID, _filter->storage_id);
838                 else
839                         snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST);
840         }
841 #endif
842
843         ret = __media_db_make_query(filter, &condition_query, &option_query);
844         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
845
846         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
847         g_free(condition_query);
848         g_free(option_query);
849         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
850
851         while (sqlite3_step(stmt) == SQLITE_ROW) {
852                 media_bookmark_s *bookmark = g_new0(media_bookmark_s, 1);
853
854                 bookmark->bookmark_id = sqlite3_column_int(stmt, 0);
855                 bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
856                 bookmark->marked_time = sqlite3_column_int(stmt, 2);
857                 bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
858                 bookmark->name = g_strdup((const char *)sqlite3_column_text(stmt, 4));
859
860                 if (callback((media_bookmark_h)bookmark, user_data) == false) {
861                         media_bookmark_destroy((media_bookmark_h)bookmark);
862                         break;
863                 }
864
865                 media_bookmark_destroy((media_bookmark_h)bookmark);
866         }
867
868         SQLITE3_FINALIZE(stmt);
869
870         return ret;
871
872 }
873
874 int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
875 {
876         int ret = MEDIA_CONTENT_ERROR_NONE;
877         char select_query[MAX_QUERY_SIZE] = {0, };
878         char *condition_query = NULL;
879         char *option_query = NULL;
880         sqlite3_stmt *stmt = NULL;
881         filter_s *_filter = (filter_s *)filter;
882
883 #ifdef _USE_TVPD_MODE
884         if (STRING_VALID(media_id)) {   //get face by media_id
885                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
886                         snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
887                 else
888                         snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, DB_VIEW_MEDIA, media_id);
889         } else {
890                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
891                         snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, _filter->storage_id);
892                 else
893                         snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST, DB_VIEW_MEDIA);
894         }
895 #else
896         if (STRING_VALID(media_id)) {   //get face by media_id
897                 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, media_id);
898         } else {
899                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
900                         snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_STORAGE_ID, _filter->storage_id);
901                 else
902                         snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST);
903         }
904 #endif
905         ret = __media_db_make_query(filter, &condition_query, &option_query);
906         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
907
908         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
909         g_free(condition_query);
910         g_free(option_query);
911         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
912
913         while (sqlite3_step(stmt) == SQLITE_ROW) {
914                 media_face_s *face = g_new0(media_face_s, 1);
915
916                 face->face_id = sqlite3_column_int(stmt, 0);
917                 face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
918                 face->face_rect_x = sqlite3_column_int(stmt, 2);
919                 face->face_rect_y = sqlite3_column_int(stmt, 3);
920                 face->face_rect_w = sqlite3_column_int(stmt, 4);
921                 face->face_rect_h = sqlite3_column_int(stmt, 5);
922                 face->orientation = sqlite3_column_int(stmt, 6);
923                 face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7));
924
925                 if (callback((media_face_h)face, user_data) == false) {
926                         media_face_destroy((media_face_h)face);
927                         break;
928                 }
929
930                 media_face_destroy((media_face_h)face);
931         }
932
933         SQLITE3_FINALIZE(stmt);
934
935         return ret;
936
937 }
938
939 int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_list_e group_type, int *item_count)
940 {
941         int ret = MEDIA_CONTENT_ERROR_NONE;
942         sqlite3_stmt *stmt = NULL;
943         char select_query[MAX_QUERY_SIZE] = {0, };
944         char *condition_query = NULL;
945         char *option_query = NULL;
946         filter_s *_filter = (filter_s *)filter;
947
948         switch (group_type) {
949         case MEDIA_GROUP_ALBUM:
950 #ifdef _USE_TVPD_MODE
951                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
952                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id);
953                 else
954                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
955 #else
956                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
957                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM_BY_STORAGE_ID, group_id, _filter->storage_id);
958                 else
959                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, group_id);
960 #endif
961                 break;
962
963         case MEDIA_GROUP_PLAYLIST:
964                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id);
965                 break;
966
967         case MEDIA_GROUP_TAG:
968                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_TAG, group_id);
969                 break;
970
971         default:
972                 content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
973                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
974         }
975
976         ret = __media_db_make_query(filter, &condition_query, &option_query);
977         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
978
979         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
980         g_free(condition_query);
981         g_free(option_query);
982         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
983
984         if (sqlite3_step(stmt) == SQLITE_ROW)
985                 *item_count = sqlite3_column_int(stmt, 0);
986
987         SQLITE3_FINALIZE(stmt);
988
989         return ret;
990 }
991
992 int _media_db_get_group_item_count(const char *group_name, filter_h filter, group_list_e group_type, int *item_count)
993 {
994         int ret = MEDIA_CONTENT_ERROR_NONE;
995         sqlite3_stmt *stmt = NULL;
996         char select_query[MAX_QUERY_SIZE] = {0, };
997         char *condition_query = NULL;
998         char *option_query = NULL;
999         char *tmp_option = NULL;
1000         bool need_bracket = false;
1001         filter_s *_filter = (filter_s *)filter;
1002
1003         switch (group_type) {
1004         case MEDIA_GROUP_NONE:
1005                 if (!_filter) {
1006 #ifdef _USE_TVPD_MODE
1007                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
1008 #else
1009                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE);
1010 #endif
1011                         break;
1012                 }
1013
1014                 if (_filter->offset < 0 && _filter->count < 0) {
1015 #ifdef _USE_TVPD_MODE
1016                         if (STRING_VALID(_filter->storage_id))
1017                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
1018                         else
1019                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_VIEW_MEDIA);
1020 #else
1021                         if (STRING_VALID(_filter->storage_id))
1022                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE_BY_STORAGE_ID, _filter->storage_id);
1023                         else
1024                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE);
1025 #endif
1026                 } else {
1027 #ifdef _USE_TVPD_MODE
1028                         if (STRING_VALID(_filter->storage_id))
1029                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, _filter->storage_id);
1030                         else
1031                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_VIEW_MEDIA);
1032 #else
1033                         if (STRING_VALID(_filter->storage_id))
1034                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_BY_STORAGE_ID, _filter->storage_id);
1035                         else
1036                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA);
1037
1038 #endif
1039                         need_bracket = true;
1040                 }
1041                 break;
1042
1043         case MEDIA_GROUP_FOLDER:
1044 #ifdef _USE_TVPD_MODE
1045                 if (_filter && STRING_VALID(_filter->storage_id))
1046                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
1047                 else
1048                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1049 #else
1050                 if (_filter && STRING_VALID(_filter->storage_id))
1051                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_FOLDER_BY_STORAGE_ID, group_name, _filter->storage_id);
1052                 else
1053                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_FOLDER, group_name);
1054 #endif
1055                 break;
1056
1057         case MEDIA_GROUP_TAG_BY_MEDIA_ID:
1058                 snprintf(select_query, sizeof(select_query), SELECT_TAG_COUNT_BY_MEDIA_ID, group_name);
1059                 break;
1060
1061         case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
1062 #ifdef _USE_TVPD_MODE
1063                 if (_filter && STRING_VALID(_filter->storage_id))
1064                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1065                 else
1066                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
1067 #else
1068                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, group_name);
1069 #endif
1070                 break;
1071
1072         case MEDIA_GROUP_STORAGE:
1073 #ifdef _USE_TVPD_MODE
1074                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_STORAGE, group_name, group_name);
1075 #else
1076                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_STORAGE, group_name);
1077 #endif
1078                 break;
1079
1080         case MEDIA_GROUP_FACE_BY_MEDIA_ID:
1081 #ifdef _USE_TVPD_MODE
1082                 if (_filter && STRING_VALID(_filter->storage_id))
1083                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1084                 else
1085                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_FACE_COUNT_BY_MEDIA_ID, DB_VIEW_MEDIA, group_name);
1086 #else
1087                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_FACE_COUNT_BY_MEDIA_ID, group_name);
1088 #endif
1089                 break;
1090
1091 #ifdef _USE_TVPD_MODE
1092         case MEDIA_GROUP_PVR:
1093                 if (_filter && STRING_VALID(_filter->storage_id))
1094                         snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id);
1095                 else
1096                         SAFE_STRLCPY(select_query, SELECT_PVR_COUNT, sizeof(select_query));
1097                 break;
1098
1099         case MEDIA_GROUP_UHD:
1100                 if (_filter && STRING_VALID(_filter->storage_id))
1101                         snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id);
1102                 else
1103                         SAFE_STRLCPY(select_query, SELECT_UHD_COUNT, sizeof(select_query));
1104                 break;
1105 #endif
1106         default:
1107                 content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1108                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1109         }
1110
1111         ret = __media_db_make_query(filter, &condition_query, &option_query);
1112         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1113
1114         if (need_bracket) {
1115                 tmp_option = g_strconcat(option_query, ")", NULL);
1116                 g_free(option_query);
1117                 option_query = tmp_option;
1118         }
1119
1120         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1121         g_free(condition_query);
1122         g_free(option_query);
1123         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1124
1125         if (sqlite3_step(stmt) == SQLITE_ROW)
1126                 *item_count = sqlite3_column_int(stmt, 0);
1127
1128         SQLITE3_FINALIZE(stmt);
1129
1130         return ret;
1131 }
1132
1133 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)
1134 {
1135         int ret = MEDIA_CONTENT_ERROR_NONE;
1136         char select_query[MAX_QUERY_SIZE] = {0, };
1137         char *condition_query = NULL;
1138         char *option_query = NULL;
1139         sqlite3_stmt *stmt = NULL;
1140         filter_s *_filter = (filter_s *)filter;
1141
1142         switch (group_type) {
1143         case MEDIA_GROUP_ALBUM:
1144 #ifdef _USE_TVPD_MODE
1145                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1146                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id);
1147                 else
1148                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, DB_VIEW_MEDIA, group_id);
1149 #else
1150                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1151                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM_BY_STORAGE_ID, group_id, _filter->storage_id);
1152                 else
1153                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, group_id);
1154 #endif
1155                 break;
1156
1157         case MEDIA_GROUP_PLAYLIST:
1158 #ifdef _USE_TVPD_MODE
1159                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1160                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id);
1161                 else
1162                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, DB_VIEW_MEDIA, group_id);
1163 #else
1164                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1165                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST_BY_STORAGE_ID, group_id, _filter->storage_id);
1166                 else
1167                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, group_id);
1168 #endif
1169                 break;
1170
1171         case MEDIA_GROUP_TAG:
1172 #ifdef _USE_TVPD_MODE
1173                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1174                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id);
1175                 else
1176                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_VIEW_MEDIA, group_id);
1177 #else
1178                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1179                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG_BY_STORAGE_ID, group_id, _filter->storage_id);
1180                 else
1181                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, group_id);
1182 #endif
1183                 break;
1184
1185         default:
1186                 content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1187                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1188         }
1189
1190         ret = __media_db_make_query(filter, &condition_query, &option_query);
1191         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1192
1193         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1194         g_free(condition_query);
1195         g_free(option_query);
1196         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1197
1198         while (sqlite3_step(stmt) == SQLITE_ROW) {
1199                 media_info_s *item = g_new0(media_info_s, 1);
1200
1201                 _media_info_item_get_detail(stmt, (media_info_h)item);
1202
1203                 if (callback((media_info_h)item, user_data) == false) {
1204                         media_info_destroy((media_info_h)item);
1205                         break;
1206                 }
1207
1208                 media_info_destroy((media_info_h)item);
1209         }
1210
1211         SQLITE3_FINALIZE(stmt);
1212
1213         return ret;
1214 }
1215
1216 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)
1217 {
1218         int ret = MEDIA_CONTENT_ERROR_NONE;
1219         char select_query[MAX_QUERY_SIZE] = {0, };
1220         char *condition_query = NULL;
1221         char *option_query = NULL;
1222         sqlite3_stmt *stmt = NULL;
1223         filter_s *_filter = (filter_s *)filter;
1224
1225         switch (group_type) {
1226         case MEDIA_GROUP_NONE:
1227 #ifdef _USE_TVPD_MODE
1228                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1229                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, _filter->storage_id);
1230                 else
1231                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, DB_VIEW_MEDIA);
1232 #else
1233                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1234                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM_BY_STORAGE_ID, _filter->storage_id);
1235                 else
1236                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM);
1237 #endif
1238                 break;
1239
1240         case MEDIA_GROUP_FOLDER:
1241 #ifdef _USE_TVPD_MODE
1242                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1243                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name);
1244                 else
1245                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1246 #else
1247                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, group_name);
1248 #endif
1249                 break;
1250
1251         case MEDIA_GROUP_STORAGE:
1252 #ifdef _USE_TVPD_MODE
1253                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name, group_name);
1254 #else
1255                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name);
1256 #endif
1257                 break;
1258
1259         default:
1260                 content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1261                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1262         }
1263
1264         ret = __media_db_make_query(filter, &condition_query, &option_query);
1265         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1266
1267         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1268         g_free(condition_query);
1269         g_free(option_query);
1270         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1271
1272         while (sqlite3_step(stmt) == SQLITE_ROW) {
1273                 media_info_s *item = g_new0(media_info_s, 1);
1274
1275                 _media_info_item_get_detail(stmt, (media_info_h)item);
1276
1277                 if (callback((media_info_h)item, user_data) == false) {
1278                         media_info_destroy((media_info_h)item);
1279                         break;
1280                 }
1281
1282                 media_info_destroy((media_info_h)item);
1283         }
1284
1285         SQLITE3_FINALIZE(stmt);
1286
1287         return ret;
1288 }
1289
1290 #ifdef _USE_SENIOR_MODE
1291 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)
1292 {
1293         int ret = MEDIA_CONTENT_ERROR_NONE;
1294         char select_query1[MAX_QUERY_SIZE] = {0, };
1295         char *condition_query1 = NULL;
1296         char *option_query1 = NULL;
1297         char select_query2[MAX_QUERY_SIZE] = {0, };
1298         char *condition_query2 = NULL;
1299         char *option_query2 = NULL;
1300         sqlite3_stmt *stmt = NULL;
1301         filter_s *_filter1 = (filter_s *)filter1;
1302         filter_s *_filter2 = (filter_s *)filter2;
1303
1304         if ((_filter1 != NULL) && STRING_VALID(_filter1->storage_id))
1305                 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, _filter1->storage_id, group_name);
1306         else
1307                 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1308
1309         ret = __media_db_make_query(filter, &condition_query1, &option_query1);
1310         if (ret != MEDIA_CONTENT_ERROR_NONE) {
1311                 SAFE_FREE(condition_query1);
1312                 SAFE_FREE(option_query1);
1313                 content_error("create select_query1 failed");
1314                 return ret;
1315         }
1316
1317         if ((_filter2 != NULL) && STRING_VALID(_filter2->storage_id))
1318                 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, _filter2->storage_id, group_name);
1319         else
1320                 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, DB_VIEW_MEDIA, group_name);
1321
1322         ret = __media_db_make_query(filter, &condition_query2, &option_query2);
1323         if (ret != MEDIA_CONTENT_ERROR_NONE) {
1324                 SAFE_FREE(condition_query1);
1325                 SAFE_FREE(option_query1);
1326                 SAFE_FREE(condition_query2);
1327                 SAFE_FREE(option_query2);
1328                 content_error("create select_query2 failed");
1329                 return ret;
1330         }
1331
1332         ret = _content_query_prepare_by_union_select(&stmt, select_query1, condition_query1, option_query1, select_query2, condition_query2, option_query2);
1333         SAFE_FREE(condition_query1);
1334         SAFE_FREE(option_query1);
1335         SAFE_FREE(condition_query2);
1336         SAFE_FREE(option_query2);
1337         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1338
1339         while (sqlite3_step(stmt) == SQLITE_ROW) {
1340                 media_info_s *item = g_new0(media_info_s, 1);
1341
1342                 _media_info_item_get_detail(stmt, (media_info_h)item);
1343
1344                 if (callback((media_info_h)item, user_data) == false) {
1345                         media_info_destroy((media_info_h)item);
1346                         break;
1347                 }
1348
1349                 media_info_destroy((media_info_h)item);
1350         }
1351
1352         SQLITE3_FINALIZE(stmt);
1353
1354         return ret;
1355 }
1356 #endif
1357
1358 int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count)
1359 {
1360         int ret = MEDIA_CONTENT_ERROR_NONE;
1361         sqlite3_stmt *stmt = NULL;
1362         char select_query[MAX_QUERY_SIZE] = {0, };
1363         char *tmp_option = NULL;
1364         char *condition_query = NULL;
1365         char *option_query = NULL;
1366         filter_s *_filter = (filter_s *)filter;
1367
1368 #ifdef _USE_TVPD_MODE
1369         if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
1370                 if (group_name != NULL) {
1371                         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1372                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1373                         else
1374                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1375                 } else {
1376                         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1377                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1378                         else
1379                                 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1380                 }
1381         } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
1382                 if (group_name != NULL) {
1383                         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1384                                 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);
1385                         else
1386                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1387                 } else {
1388                         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1389                                 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1390                         else
1391                                 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1392                 }
1393         } else {/*uhd content*/
1394                 if (group_name != NULL) {
1395                         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1396                                 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);
1397                         else
1398                                 sqlite3_snprintf(sizeof(select_query), select_query, SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1399                 } else {
1400                         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1401                                 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1402                         else
1403                                 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1404                 }
1405         }
1406 #else
1407         if (group_name != NULL) {
1408                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1409                         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);
1410                 else
1411                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1412         } else {
1413                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1414                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
1415                 else
1416                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1417         }
1418 #endif
1419         ret = __media_db_make_query(filter, &condition_query, &option_query);
1420         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1421
1422         /* If 'filter' is not NULL, 'option_query' must be created. */
1423         if (option_query) {
1424                 tmp_option = g_strconcat(option_query, ")", NULL);
1425                 g_free(option_query);
1426                 option_query = tmp_option;
1427         } else {
1428                 SAFE_STRLCAT(select_query, ")", sizeof(select_query));
1429         }
1430
1431         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1432         g_free(condition_query);
1433         g_free(option_query);
1434         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1435
1436         if (sqlite3_step(stmt) == SQLITE_ROW)
1437                 *item_count = sqlite3_column_int(stmt, 0);
1438
1439         SQLITE3_FINALIZE(stmt);
1440
1441         return ret;
1442 }
1443
1444 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)
1445 {
1446         int ret = MEDIA_CONTENT_ERROR_NONE;
1447         char select_query[MAX_QUERY_SIZE] = {0, };
1448         char *condition_query = NULL;
1449         char *option_query = NULL;
1450         sqlite3_stmt *stmt = NULL;
1451         filter_s *_filter = (filter_s *)filter;
1452
1453 #ifdef _USE_TVPD_MODE
1454         if (group_name != NULL) {
1455                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1456                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1457                 else
1458                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP, DB_VIEW_MEDIA, __media_db_get_group_name(group), group_name);
1459         } else {
1460                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1461                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1462                 else
1463                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_VIEW_MEDIA, __media_db_get_group_name(group));
1464         }
1465 #else
1466         if (group_name != NULL) {
1467                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1468                         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);
1469                 else
1470                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_MEDIA_FROM_GROUP, __media_db_get_group_name(group), group_name);
1471         } else {
1472                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1473                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
1474                 else
1475                         snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, __media_db_get_group_name(group));
1476         }
1477 #endif
1478         ret = __media_db_make_query(filter, &condition_query, &option_query);
1479         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1480
1481         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1482         g_free(condition_query);
1483         g_free(option_query);
1484         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1485
1486         while (sqlite3_step(stmt) == SQLITE_ROW) {
1487                 media_info_s *item = g_new0(media_info_s, 1);
1488
1489                 _media_info_item_get_detail(stmt, (media_info_h)item);
1490
1491                 if (callback((media_info_h)item, user_data) == false) {
1492                         media_info_destroy((media_info_h)item);
1493                         break;
1494                 }
1495
1496                 media_info_destroy((media_info_h)item);
1497         }
1498
1499         SQLITE3_FINALIZE(stmt);
1500
1501         return ret;
1502 }
1503
1504 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
1505 {
1506         int ret = MEDIA_CONTENT_ERROR_NONE;
1507         char *condition_query = NULL;
1508         char *option_query = NULL;
1509         sqlite3_stmt *stmt = NULL;
1510
1511         ret = __media_db_make_query(filter, &condition_query, &option_query);
1512         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1513
1514         ret = _content_query_prepare(SELECT_STORAGE_LIST, condition_query, option_query, &stmt);
1515         g_free(condition_query);
1516         g_free(option_query);
1517         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1518
1519         while (sqlite3_step(stmt) == SQLITE_ROW) {
1520                 media_storage_s *_storage = g_new0(media_storage_s, 1);
1521
1522                 _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1523                 _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
1524                 _storage->storage_type = sqlite3_column_int(stmt, 2);
1525
1526                 if (callback((media_storage_h)_storage, user_data) == false) {
1527                         media_storage_destroy((media_storage_h) _storage);
1528                         break;
1529                 }
1530
1531                 media_storage_destroy((media_storage_h) _storage);
1532         }
1533
1534         SQLITE3_FINALIZE(stmt);
1535
1536         return ret;
1537 }
1538
1539 int _media_db_get_storage_id_by_media_id(const char *media_id, char **storage_id)
1540 {
1541         int ret = MEDIA_CONTENT_ERROR_NONE;
1542         sqlite3_stmt *stmt = NULL;
1543         char *select_query = NULL;
1544
1545         select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
1546
1547         ret = _content_get_result(select_query, &stmt);
1548         SQLITE3_SAFE_FREE(select_query);
1549         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1550
1551         if (sqlite3_step(stmt) == SQLITE_ROW) {
1552                 *storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1553         } else {
1554                 content_error("Invalid media_id[%s]", media_id);
1555                 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1556         }
1557
1558         SQLITE3_FINALIZE(stmt);
1559
1560         return ret;
1561 }
1562
1563 #ifdef _USE_TVPD_MODE
1564 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)
1565 {
1566         int ret = MEDIA_CONTENT_ERROR_NONE;
1567         char select_query[DEFAULT_QUERY_SIZE] = {0, };
1568         char *condition_query = NULL;
1569         char *option_query = NULL;
1570         sqlite3_stmt *stmt = NULL;
1571         filter_s *_filter = (filter_s *)filter;
1572
1573         if (group_name != NULL) {
1574                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1575                         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);
1576                 else
1577                         sqlite3_snprintf(sizeof(select_query), select_query, SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
1578         } else {
1579                 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1580                         snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1581                 else
1582                         snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
1583         }
1584
1585         ret = __media_db_make_query(filter, &condition_query, &option_query);
1586         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1587
1588         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1589         g_free(condition_query);
1590         g_free(option_query);
1591         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1592
1593         while (sqlite3_step(stmt) == SQLITE_ROW) {
1594                 media_pvr_s *item = g_new0(media_pvr_s, 1);
1595
1596                 _media_pvr_item_get_detail(stmt, (media_pvr_h)item);
1597
1598                 if (callback((media_pvr_h)item, user_data) == false) {
1599                         media_info_destroy((media_pvr_h)item);
1600                         break;
1601                 }
1602
1603                 media_pvr_destroy((media_pvr_h)item);
1604         }
1605
1606         SQLITE3_FINALIZE(stmt);
1607
1608         return ret;
1609 }
1610
1611 typedef enum {
1612         MEDIA_PVR_MEDIA_ID = 0,
1613         MEDIA_PVR_STORAGE_ID,
1614         MEDIA_PVR_PATH,
1615         MEDIA_PVR_SIZE,
1616         MEDIA_PVR_DURATION,
1617         MEDIA_PVR_TIME_ZONE,
1618         MEDIA_PVR_PTC,
1619         MEDIA_PVR_MAJOR,
1620         MEDIA_PVR_MINOR,
1621         MEDIA_PVR_CHANNEL_TYPE,
1622         MEDIA_PVR_CHANNEL_NAME,
1623         MEDIA_PVR_CHANNEL_NUM,
1624         MEDIA_PVR_SERVICE_PROFILE,
1625         MEDIA_PVR_PROGRAM_TITLE,
1626         MEDIA_PVR_PROGRAM_NUM,
1627         MEDIA_PVR_PROGRAM_CRID,
1628         MEDIA_PVR_GUIDANCE,
1629         MEDIA_PVR_SYNOPSIS,
1630         MEDIA_PVR_GENRE,
1631         MEDIA_PVR_LANGUAGE,
1632         MEDIA_PVR_EMBARGO_TIME,
1633         MEDIA_PVR_EXPIRY_TIME,
1634         MEDIA_PVR_START_TIME,
1635         MEDIA_PVR_PROGRAM_START_TIME,
1636         MEDIA_PVR_PROGRAM_END_TIME,
1637         MEDIA_PVR_PROGRAM_DATE,
1638         MEDIA_PVR_PARENTAL_RATING,
1639         MEDIA_PVR_TIMER_RECORD,
1640         MEDIA_PVR_SERIES_RECORD,
1641         MEDIA_PVR_HD,
1642         MEDIA_PVR_SUBTITLE,
1643         MEDIA_PVR_TTX,
1644         MEDIA_PVR_AD,
1645         MEDIA_PVR_HARDOF_HEARINGRADIO,
1646         MEDIA_PVR_DATA_SERVICE,
1647         MEDIA_PVR_CONTENT_LOCK,
1648         MEDIA_PVR_CONTENT_WATCH,
1649         MEDIA_PVR_HAS_AUDIO_ONLY,
1650         MEDIA_PVR_IS_LOCAL_RECORDED,
1651         MEDIA_PVR_RESOLUTION,
1652         MEDIA_PVR_ASPECTRATIO,
1653         MEDIA_PVR_MODIFIED_MONTH,
1654         MEDIA_PVR_SPORTS_TYPE,
1655         MEDIA_PVR_GUIDANCE_LENGTH,
1656         MEDIA_PVR_TVMODE,
1657         MEDIA_PVR_PLAY_COUNT,
1658         MEDIA_PVR_PRIVATE_DATA,
1659         MEDIA_PVR_HIGHLIGHT,
1660 } media_pvr_field_e;
1661
1662 void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
1663 {
1664         media_pvr_s *_pvr = (media_pvr_s*)pvr;
1665
1666         _pvr->media_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID));
1667         _pvr->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID));
1668         _pvr->path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH));
1669         _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
1670         _pvr->duration = sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
1671         _pvr->timezone = sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
1672         _pvr->ptc = sqlite3_column_int(stmt, MEDIA_PVR_PTC);
1673         _pvr->major = sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
1674         _pvr->minor = sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
1675         _pvr->channel_type = sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
1676         _pvr->service_profile = (unsigned int)sqlite3_column_int(stmt, MEDIA_PVR_SERVICE_PROFILE);
1677         _pvr->channel_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME));
1678         _pvr->channel_num = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM));
1679         _pvr->program_title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE));
1680         _pvr->program_num = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
1681         _pvr->program_crid = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID));
1682         _pvr->guidance = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE));
1683         _pvr->synopsis = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS));
1684         _pvr->genre = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE));
1685         _pvr->language = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE));
1686         _pvr->modified_month = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH));
1687         _pvr->private_data = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA));
1688         _pvr->embargo_time = sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
1689         _pvr->expiry_time = sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
1690         _pvr->start_time = sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
1691         _pvr->program_start_time = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
1692         _pvr->program_end_time = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
1693         _pvr->program_date = sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
1694         _pvr->parental_rating = sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
1695         _pvr->timer_record = sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
1696         _pvr->series_record = sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
1697         _pvr->hd = sqlite3_column_int(stmt, MEDIA_PVR_HD);
1698         _pvr->subtitle = sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
1699         _pvr->ttx = sqlite3_column_int(stmt, MEDIA_PVR_TTX);
1700         _pvr->ad = sqlite3_column_int(stmt, MEDIA_PVR_AD);
1701         _pvr->hard_of_hearing_radio = sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
1702         _pvr->data_service = sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
1703         _pvr->content_lock = sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
1704         _pvr->content_watch = sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
1705         _pvr->has_audio_only = sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
1706         _pvr->is_local_record = sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
1707         _pvr->resolution = sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
1708         _pvr->aspectratio = sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
1709         _pvr->sports_type = sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
1710         _pvr->guidance_length = sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
1711         _pvr->tvmode = sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
1712         _pvr->play_count = sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
1713         _pvr->highlight = sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
1714
1715         return;
1716 }
1717
1718 int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
1719 {
1720         int ret = MEDIA_CONTENT_ERROR_NONE;
1721         char select_query[DEFAULT_QUERY_SIZE] = {0, };
1722         char *condition_query = NULL;
1723         char *option_query = NULL;
1724         sqlite3_stmt *stmt = NULL;
1725         filter_s *_filter = (filter_s *)filter;
1726
1727         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1728                 snprintf(select_query, sizeof(select_query), SELECT_PVR_LIST_BY_STORAGE_ID, _filter->storage_id);
1729         else
1730                 SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
1731
1732         ret = __media_db_make_query(filter, &condition_query, &option_query);
1733         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1734
1735         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1736         g_free(condition_query);
1737         g_free(option_query);
1738         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1739
1740         while (sqlite3_step(stmt) == SQLITE_ROW) {
1741                 media_pvr_s *_pvr = g_new0(media_pvr_s, 1);
1742
1743                 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
1744
1745                 if (callback((media_pvr_h)_pvr, user_data) == false) {
1746                         media_pvr_destroy((media_pvr_h) _pvr);
1747                         break;
1748                 }
1749
1750                 media_pvr_destroy((media_pvr_h) _pvr);
1751         }
1752
1753         SQLITE3_FINALIZE(stmt);
1754
1755         return ret;
1756 }
1757
1758 typedef enum {
1759         MEDIA_UHD_MEDIA_ID = 0,
1760         MEDIA_UHD_STORAGE_ID,
1761         MEDIA_UHD_PATH,
1762         MEDIA_UHD_SIZE,
1763         MEDIA_UHD_CONTENT_ID,
1764         MEDIA_UHD_CONTENT_TITLE,
1765         MEDIA_UHD_FILE_NAME,
1766         MEDIA_UHD_FOLDER_ID,
1767         MEDIA_UHD_RELEASE_DATE,
1768         MEDIA_UHD_MODIFIED_TIME,
1769         MEDIA_UHD_PLAYED_POSITION,
1770         MEDIA_UHD_SUB_TYPE,
1771         MEDIA_UHD_PLAYED_COUNT,
1772 } media_uhd_field_e;
1773
1774 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
1775 {
1776         media_uhd_s *_uhd = (media_uhd_s*)uhd;
1777
1778         _uhd->media_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID));
1779         _uhd->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID));
1780         _uhd->path = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH));
1781         _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE);
1782         _uhd->content_id = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID));
1783         _uhd->content_title = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE));
1784         _uhd->file_name = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME));
1785         _uhd->release_date = g_strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE));
1786         _uhd->modified_time = sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
1787         _uhd->played_position = sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
1788         _uhd->sub_type = sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
1789         _uhd->played_count = sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
1790
1791         return;
1792 }
1793
1794 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
1795 {
1796         int ret = MEDIA_CONTENT_ERROR_NONE;
1797         char select_query[DEFAULT_QUERY_SIZE] = {0, };
1798         char *condition_query = NULL;
1799         char *option_query = NULL;
1800         sqlite3_stmt *stmt = NULL;
1801         filter_s *_filter = (filter_s *)filter;
1802
1803         if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1804                 snprintf(select_query, sizeof(select_query), SELECT_UHD_LIST_BY_STORAGE_ID, _filter->storage_id);
1805         else
1806                 SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
1807
1808         ret = __media_db_make_query(filter, &condition_query, &option_query);
1809         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1810
1811         ret = _content_query_prepare(select_query, condition_query, option_query, &stmt);
1812         g_free(condition_query);
1813         g_free(option_query);
1814         content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1815
1816         while (sqlite3_step(stmt) == SQLITE_ROW) {
1817                 media_uhd_s *_uhd = g_new0(media_uhd_s, 1);
1818
1819                 _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd);
1820
1821                 if (callback((media_uhd_h)_uhd, user_data) == false) {
1822                         media_uhd_destroy((media_uhd_h) _uhd);
1823                         break;
1824                 }
1825                 media_uhd_destroy((media_uhd_h) _uhd);
1826         }
1827
1828         SQLITE3_FINALIZE(stmt);
1829
1830         return ret;
1831 }
1832 #endif