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