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