4935015900e4ba4e647c81765054ced5be4e7f78
[framework/api/media-content.git] / src / media_content.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
19 #include <media_content.h>
20 #include <media_info_private.h>
21 #include <media-util-err.h>
22
23
24 static attribute_h g_attr_handle = NULL;
25 static attribute_h g_alias_attr_handle = NULL;
26 static MediaSvcHandle *db_handle = NULL;
27 static int ref_count = 0;
28
29
30 static int __media_content_create_attr_handle(void);
31 static int __media_content_create_alias_attr_handle(void);
32 static int __media_content_create_attribute_handle(void);
33 static int __media_content_destroy_attribute_handle(void);
34
35
36 static int __media_content_create_attr_handle(void)
37 {
38         int ret = MEDIA_CONTENT_ERROR_NONE;
39
40         ret = _media_filter_attribute_create(&g_attr_handle);
41         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
42
43         /* Media Info */
44         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ID, DB_FIELD_MEDIA_ID);
45         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
46
47         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PATH, DB_FIELD_MEDIA_PATH);
48         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
49
50         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DISPLAY_NAME, DB_FIELD_MEDIA_DISPLAY_NAME);
51         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
52
53         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TYPE, DB_FIELD_MEDIA_TYPE);
54         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
55
56         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MIME_TYPE, DB_FIELD_MEDIA_MIME_TYPE);
57         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
58
59         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_SIZE, DB_FIELD_MEDIA_SIZE);
60         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
61
62         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ADDED_TIME, DB_FIELD_MEDIA_ADDED_TIME);
63         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
64
65         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MODIFIED_TIME, DB_FIELD_MEDIA_MODIFIED_TIME);
66         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
67
68         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_THUMBNAIL_PATH, DB_FIELD_MEDIA_THUMBNAIL_PATH);
69         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
70
71         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TITLE, DB_FIELD_MEDIA_TITLE);
72         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
73
74         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM, DB_FIELD_MEDIA_ALBUM);
75         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
76
77         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ARTIST, DB_FIELD_MEDIA_ARTIST);
78         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
79
80         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_GENRE, DB_FIELD_MEDIA_GENRE);
81         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
82
83         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COMPOSER, DB_FIELD_MEDIA_COMPOSER);
84         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
85
86         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_YEAR, DB_FIELD_MEDIA_YEAR);
87         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
88
89         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_RECORDED_DATE, DB_FIELD_MEDIA_RECORDED_DATE);
90         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
91
92         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COPYRIGHT, DB_FIELD_MEDIA_COPYRIGHT);
93         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
94
95         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TRACK_NUM, DB_FIELD_MEDIA_TRACK_NUM);
96         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
97
98         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DESCRIPTION, DB_FIELD_MEDIA_DESCRIPTION);
99         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
100
101         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BITRATE, DB_FIELD_MEDIA_BITRATE);
102         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
103
104         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_SAMPLERATE, DB_FIELD_MEDIA_SAMPLERATE);
105         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
106
107         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CHANNEL, DB_FIELD_MEDIA_CHANNEL);
108         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
109
110         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DURATION, DB_FIELD_MEDIA_DURATION);
111         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
112
113         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LONGITUDE, DB_FIELD_MEDIA_LONGITUDE);
114         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
115
116         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LATITUDE, DB_FIELD_MEDIA_LATITUDE);
117         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
118
119         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALTITUDE, DB_FIELD_MEDIA_ALTITUDE);
120         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
121
122         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_WIDTH, DB_FIELD_MEDIA_WIDTH);
123         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
124
125         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_HEIGHT, DB_FIELD_MEDIA_HEIGHT);
126         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
127
128         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DATETAKEN, DB_FIELD_MEDIA_DATETAKEN);
129         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
130
131         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ORIENTATION, DB_FIELD_MEDIA_ORIENTATION);
132         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
133
134         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PLAYED_COUNT, DB_FIELD_MEDIA_PLAYED_COUNT);
135         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
136
137         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LAST_PLAYED_TIME, DB_FIELD_MEDIA_LAST_PLAYED_TIME);
138         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
139
140         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LAST_PLAYED_POSITION, DB_FIELD_MEDIA_LAST_PLAYED_POSITION);
141         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
142
143         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_RATING, DB_FIELD_MEDIA_RATING);
144         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
145
146         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_FAVOURITE, DB_FIELD_MEDIA_FAVOURITE);
147         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
148
149         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AUTHOR, DB_FIELD_MEDIA_AUTHOR);
150         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
151
152         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PROVIDER, DB_FIELD_MEDIA_PROVIDER);
153         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
154
155         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CONTENT_NAME, DB_FIELD_MEDIA_CONTENT_NAME);
156         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
157
158         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CATEGORY, DB_FIELD_MEDIA_CATEGORY);
159         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
160
161         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LOCATION_TAG, DB_FIELD_MEDIA_LOCATION_TAG);
162         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
163
164         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AGE_RATING, DB_FIELD_MEDIA_AGE_RATING);
165         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
166
167         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_KEYWORD, DB_FIELD_MEDIA_KEYWORD);
168         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
169
170         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_IS_DRM, DB_FIELD_MEDIA_IS_DRM);
171         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
172
173         ret = _media_filter_attribute_add(g_attr_handle, MEDIA_STORAGE_TYPE, DB_FIELD_MEDIA_STORAGE_TYPE);
174         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
175
176         /* Playlist*/
177         ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_NAME, DB_FIELD_PLAYLIST_NAME);
178         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
179
180         ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_MEMBER_ORDER, DB_FIELD_PLAYLIST_MEMBER_ORDER);
181         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
182
183         /* Playlist View */
184         ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_MEDIA_COUNT, DB_FIELD_PLAYLIST_MEDIA_COUNT);
185         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
186
187         /* Tag*/
188         ret = _media_filter_attribute_add(g_attr_handle, TAG_NAME, DB_FIELD_TAG_NAME);
189         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
190
191         /* Tag View */
192         ret = _media_filter_attribute_add(g_attr_handle, TAG_MEDIA_COUNT, DB_FIELD_TAG_MEDIA_COUNT);
193         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
194
195         /* Bookmark*/
196         ret = _media_filter_attribute_add(g_attr_handle, BOOKMARK_MARKED_TIME, DB_FIELD_BOOKMARK_MARKED_TIME);
197         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
198
199         return ret;
200 }
201
202 static int __media_content_create_alias_attr_handle(void)
203 {
204         int ret = MEDIA_CONTENT_ERROR_NONE;
205
206         ret = _media_filter_attribute_create(&g_alias_attr_handle);
207         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
208
209         /* Media Info */
210         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ID, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ID);
211         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
212
213         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PATH);
214         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
215
216         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DISPLAY_NAME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DISPLAY_NAME);
217         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
218
219         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TYPE);
220         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
221
222         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MIME_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MIME_TYPE);
223         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
224
225         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SIZE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SIZE);
226         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
227
228         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ADDED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ADDED_TIME);
229         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
230
231         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MODIFIED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MODIFIED_TIME);
232         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
233
234         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_THUMBNAIL_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_THUMBNAIL_PATH);
235         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
236
237         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TITLE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TITLE);
238         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
239
240         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM);
241         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
242
243         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ARTIST, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ARTIST);
244         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
245
246         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_GENRE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_GENRE);
247         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
248
249         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COMPOSER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COMPOSER);
250         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
251
252         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_YEAR, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_YEAR);
253         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
254
255         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_RECORDED_DATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_RECORDED_DATE);
256         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
257
258         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COPYRIGHT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COPYRIGHT);
259         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
260
261         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TRACK_NUM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TRACK_NUM);
262         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
263
264         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DESCRIPTION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DESCRIPTION);
265         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
266
267         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BITRATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BITRATE);
268         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
269
270         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SAMPLERATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SAMPLERATE);
271         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
272
273         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CHANNEL, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CHANNEL);
274         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
275
276         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DURATION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DURATION);
277         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
278
279         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LONGITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LONGITUDE);
280         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
281
282         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LATITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LATITUDE);
283         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
284
285         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALTITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALTITUDE);
286         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
287
288         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_WIDTH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_WIDTH);
289         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
290
291         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_HEIGHT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_HEIGHT);
292         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
293
294         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DATETAKEN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DATETAKEN);
295         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
296
297         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ORIENTATION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ORIENTATION);
298         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
299
300         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PLAYED_COUNT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PLAYED_COUNT);
301         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
302
303         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LAST_PLAYED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LAST_PLAYED_TIME);
304         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
305
306         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LAST_PLAYED_POSITION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LAST_PLAYED_POSITION);
307         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
308
309         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_RATING);
310         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
311
312         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_FAVOURITE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_FAVOURITE);
313         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
314
315         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AUTHOR, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AUTHOR);
316         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
317
318         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PROVIDER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PROVIDER);
319         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
320
321         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CONTENT_NAME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CONTENT_NAME);
322         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
323
324         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CATEGORY, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CATEGORY);
325         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
326
327         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LOCATION_TAG, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LOCATION_TAG);
328         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
329
330         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AGE_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AGE_RATING);
331         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
332
333         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_KEYWORD, DB_TABLE_ALIAS_MEDIA"."MEDIA_KEYWORD);
334         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
335
336         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_IS_DRM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_IS_DRM);
337         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
338
339         ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_STORAGE_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_STORAGE_TYPE);
340         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
341
342         /* Folder */
343         ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_ID, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_ID);
344         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
345
346         ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_PATH, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_PATH);
347         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
348
349         ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_NAME, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_NAME);
350         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
351
352         ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_MODIFIED_TIME, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_MODIFIED_TIME);
353         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
354
355         ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_STORAGE_TYPE, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_STORAGE_TYPE);
356         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
357
358         /* Playlist*/
359         ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_NAME, DB_TABLE_ALIAS_PLAYLIST"."DB_FIELD_PLAYLIST_NAME);
360         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
361
362         ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_MEMBER_ORDER, DB_TABLE_ALIAS_PLAYLIST_MAP"."DB_FIELD_PLAYLIST_MEMBER_ORDER);
363         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
364
365         /* Tag*/
366         ret = _media_filter_attribute_add(g_alias_attr_handle, TAG_NAME, DB_TABLE_ALIAS_TAG"."DB_FIELD_TAG_NAME);
367         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
368
369         /* Bookmark*/
370         ret = _media_filter_attribute_add(g_alias_attr_handle, BOOKMARK_MARKED_TIME, DB_TABLE_ALIAS_BOOKMARK"."DB_FIELD_BOOKMARK_MARKED_TIME);
371         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
372
373         /* Album */
374
375         return ret;
376 }
377
378 static int __media_content_create_attribute_handle(void)
379 {
380         int ret = MEDIA_CONTENT_ERROR_NONE;
381
382         ret = __media_content_create_attr_handle();
383         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
384
385         ret = __media_content_create_alias_attr_handle();
386
387         return ret;
388 }
389
390 static int __media_content_destroy_attribute_handle(void)
391 {
392         int ret = MEDIA_CONTENT_ERROR_NONE;
393
394         ret = _media_filter_attribute_destory(g_attr_handle);
395         media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
396
397         ret = _media_filter_attribute_destory(g_alias_attr_handle);
398
399         return ret;
400 }
401
402 attribute_h _content_get_attirbute_handle(void)
403 {
404         return g_attr_handle;
405 }
406
407 attribute_h _content_get_alias_attirbute_handle(void)
408 {
409         return g_alias_attr_handle;
410 }
411
412 MediaSvcHandle* _content_get_db_handle(void)
413 {
414         return db_handle;
415 }
416
417 int _content_query_prepare(sqlite3_stmt **stmt, char *select_query, char *condition_query, char *option_query)
418 {
419         int len = 0;
420         int err = MEDIA_CONTENT_ERROR_NONE;
421         char query[MAX_QUERY_SIZE];
422         memset(query, '\0', sizeof(query));
423
424         if(db_handle == NULL)
425         {
426                 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
427                 return MEDIA_CONTENT_ERROR_DB_FAILED;
428         }
429
430         if(STRING_VALID(select_query)) {
431                 if(!STRING_VALID(condition_query)) {
432                         condition_query = " ";
433                 }
434
435                 if(!STRING_VALID(option_query)) {
436                         option_query = " ";
437
438                 }
439
440                 //query = sqlite3_mprintf("%s %s %s", select_query, condition_query, option_query);
441                 len = snprintf(query, sizeof(query), "%s %s %s", select_query, condition_query, option_query);
442                 if (len > 0) {
443                         query[len] = '\0';
444                 } else {
445                         media_content_error("snprintf failed");
446                         return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
447                 }
448
449                 media_content_debug("Query : [%s]", query);
450
451                 err = sqlite3_prepare_v2((sqlite3*)db_handle, query, strlen(query), stmt, NULL);
452                 if(err != SQLITE_OK)
453                 {
454                         media_content_error("DB_FAILED(0x%08x) fail to sqlite3_prepare(), %s", MEDIA_CONTENT_ERROR_DB_FAILED, sqlite3_errmsg((sqlite3*)db_handle));
455
456                         if (err == SQLITE_BUSY)
457                                 return MEDIA_CONTENT_ERROR_DB_BUSY;
458                         else
459                                 return MEDIA_CONTENT_ERROR_DB_FAILED;
460                 }
461         }
462         else
463         {
464                 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
465                 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
466         }
467
468         return MEDIA_CONTENT_ERROR_NONE;
469 }
470
471 int _content_error_capi(int type, int content_error)
472 {
473         if(type == MEDIA_CONTENT_TYPE)
474         {
475                 if(content_error == MEDIA_INFO_ERROR_NONE)
476                         return MEDIA_CONTENT_ERROR_NONE;
477                 else if(content_error == MEDIA_INFO_ERROR_INVALID_PARAMETER)
478                         return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
479                 else if(content_error == MEDIA_INFO_ERROR_DATABASE_INTERNAL)
480                         return MEDIA_CONTENT_ERROR_DB_FAILED;
481                 else if(content_error == MEDIA_INFO_ERROR_DATABASE_CONNECT)
482                         return MEDIA_CONTENT_ERROR_DB_FAILED;
483                 else if(content_error == MEDIA_INFO_ERROR_DATABASE_DISCONNECT)
484                         return MEDIA_CONTENT_ERROR_DB_FAILED;
485                 else if(content_error == MEDIA_INFO_ERROR_DATABASE_NO_RECORD)
486                         return MEDIA_CONTENT_ERROR_DB_FAILED;
487         } else if(type == MEDIA_REGISTER_TYPE) {
488                 if(content_error == MS_MEDIA_ERR_NONE)
489                         return MEDIA_CONTENT_ERROR_NONE;
490                 else if(content_error == MS_MEDIA_ERR_INVALID_PARAMETER || content_error == MS_MEDIA_ERR_INVALID_PATH)
491                         return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
492                 else if(content_error == MS_MEDIA_ERR_INSERT_FAIL || content_error == MS_MEDIA_ERR_DRM_INSERT_FAIL)
493                         return MEDIA_CONTENT_ERROR_DB_FAILED;
494         }
495
496         media_content_error("content_error : %d [ type :%d ]", content_error, type);
497         return MEDIA_CONTENT_ERROR_DB_FAILED;
498 }
499
500 int _content_query_sql(char *query_str)
501 {
502         int err = MEDIA_CONTENT_ERROR_NONE;
503         char *err_msg;
504
505         if(db_handle == NULL)
506         {
507                 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
508                 return MEDIA_CONTENT_ERROR_DB_FAILED;
509         }
510
511         err = sqlite3_exec(db_handle, query_str, NULL, NULL, &err_msg);
512         if(SQLITE_OK != err)
513         {
514                 if(err_msg)
515                 {
516                         media_content_error("DB_FAILED : %s", err_msg);
517                         media_content_error("DB_FAILED SQL: %s", query_str);
518                         sqlite3_free(err_msg);
519                 }
520
521                 media_content_error("DB_FAILED(0x%08x) database operation is failed", MEDIA_CONTENT_ERROR_DB_FAILED);
522
523                 if (err == SQLITE_BUSY)
524                         return MEDIA_CONTENT_ERROR_DB_BUSY;
525                 else
526                         return MEDIA_CONTENT_ERROR_DB_FAILED;
527         }
528         else
529         {
530                 media_content_debug("DB_SUCCESS: %s", query_str);
531         }
532
533         if(err_msg)
534                 sqlite3_free(err_msg);
535
536         return MEDIA_CONTENT_ERROR_NONE;
537 }
538
539 int media_content_connect(void)
540 {
541         int ret = MEDIA_CONTENT_ERROR_NONE;
542
543         if(ref_count == 0)
544         {
545                 if(db_handle == NULL)
546                 {
547                         ret = media_svc_connect(&db_handle);
548                 }
549
550                 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
551
552                 if(ret == MEDIA_CONTENT_ERROR_NONE) {
553                         ret = __media_content_create_attribute_handle();
554                 }
555         }
556
557         ref_count++;
558
559         return ret;
560 }
561
562 int media_content_disconnect(void)
563 {
564         int ret = MEDIA_CONTENT_ERROR_NONE;
565
566         if(ref_count > 0)
567         {
568                 ref_count--;
569         }
570         else
571         {
572                 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
573                 return MEDIA_CONTENT_ERROR_DB_FAILED;
574         }
575
576         if(ref_count == 0)
577         {
578                 if(db_handle != NULL)
579                 {
580                         ret = media_svc_disconnect(db_handle);
581                         ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
582                         if(ret == MEDIA_CONTENT_ERROR_NONE)
583                         {
584                                 ret = __media_content_destroy_attribute_handle();
585                                 db_handle = NULL;
586                         }
587                 }
588         }
589
590         return ret;
591 }