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