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