2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include <media-thumb-error.h>
19 #include <media_content.h>
20 #include <media_info_private.h>
21 #include <media-util.h>
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 static GMutex *db_mutex = NULL;
30 static __thread media_noti_cb_s *g_noti_info = NULL;
32 static int __media_content_create_attr_handle(void);
33 static int __media_content_create_alias_attr_handle(void);
34 static int __media_content_create_attribute_handle(void);
35 static int __media_content_destroy_attribute_handle(void);
38 static int __media_content_create_attr_handle(void)
40 int ret = MEDIA_CONTENT_ERROR_NONE;
42 ret = _media_filter_attribute_create(&g_attr_handle);
43 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
46 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ID, DB_FIELD_MEDIA_ID);
47 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
49 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PATH, DB_FIELD_MEDIA_PATH);
50 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
52 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DISPLAY_NAME, DB_FIELD_MEDIA_DISPLAY_NAME);
53 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
55 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TYPE, DB_FIELD_MEDIA_TYPE);
56 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
58 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MIME_TYPE, DB_FIELD_MEDIA_MIME_TYPE);
59 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
61 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_SIZE, DB_FIELD_MEDIA_SIZE);
62 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
64 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ADDED_TIME, DB_FIELD_MEDIA_ADDED_TIME);
65 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
67 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MODIFIED_TIME, DB_FIELD_MEDIA_MODIFIED_TIME);
68 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
70 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_THUMBNAIL_PATH, DB_FIELD_MEDIA_THUMBNAIL_PATH);
71 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
73 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TITLE, DB_FIELD_MEDIA_TITLE);
74 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
76 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM, DB_FIELD_MEDIA_ALBUM);
77 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
79 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ARTIST, DB_FIELD_MEDIA_ARTIST);
80 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
82 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_GENRE, DB_FIELD_MEDIA_GENRE);
83 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
85 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COMPOSER, DB_FIELD_MEDIA_COMPOSER);
86 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
88 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_YEAR, DB_FIELD_MEDIA_YEAR);
89 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
91 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_RECORDED_DATE, DB_FIELD_MEDIA_RECORDED_DATE);
92 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
94 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COPYRIGHT, DB_FIELD_MEDIA_COPYRIGHT);
95 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
97 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TRACK_NUM, DB_FIELD_MEDIA_TRACK_NUM);
98 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
100 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DESCRIPTION, DB_FIELD_MEDIA_DESCRIPTION);
101 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
103 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BITRATE, DB_FIELD_MEDIA_BITRATE);
104 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
106 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_SAMPLERATE, DB_FIELD_MEDIA_SAMPLERATE);
107 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
109 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CHANNEL, DB_FIELD_MEDIA_CHANNEL);
110 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
112 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DURATION, DB_FIELD_MEDIA_DURATION);
113 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
115 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LONGITUDE, DB_FIELD_MEDIA_LONGITUDE);
116 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
118 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LATITUDE, DB_FIELD_MEDIA_LATITUDE);
119 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
121 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALTITUDE, DB_FIELD_MEDIA_ALTITUDE);
122 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
124 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_WIDTH, DB_FIELD_MEDIA_WIDTH);
125 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
127 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_HEIGHT, DB_FIELD_MEDIA_HEIGHT);
128 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
130 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DATETAKEN, DB_FIELD_MEDIA_DATETAKEN);
131 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
133 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ORIENTATION, DB_FIELD_MEDIA_ORIENTATION);
134 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
136 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BURST_ID, DB_FIELD_MEDIA_BURST_ID);
137 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
139 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PLAYED_COUNT, DB_FIELD_MEDIA_PLAYED_COUNT);
140 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
142 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LAST_PLAYED_TIME, DB_FIELD_MEDIA_LAST_PLAYED_TIME);
143 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
145 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LAST_PLAYED_POSITION, DB_FIELD_MEDIA_LAST_PLAYED_POSITION);
146 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
148 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_RATING, DB_FIELD_MEDIA_RATING);
149 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
151 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_FAVOURITE, DB_FIELD_MEDIA_FAVOURITE);
152 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
154 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AUTHOR, DB_FIELD_MEDIA_AUTHOR);
155 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
157 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PROVIDER, DB_FIELD_MEDIA_PROVIDER);
158 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
160 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CONTENT_NAME, DB_FIELD_MEDIA_CONTENT_NAME);
161 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
163 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CATEGORY, DB_FIELD_MEDIA_CATEGORY);
164 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
166 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LOCATION_TAG, DB_FIELD_MEDIA_LOCATION_TAG);
167 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
169 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AGE_RATING, DB_FIELD_MEDIA_AGE_RATING);
170 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
172 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_KEYWORD, DB_FIELD_MEDIA_KEYWORD);
173 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
175 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_IS_DRM, DB_FIELD_MEDIA_IS_DRM);
176 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
178 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_STORAGE_TYPE, DB_FIELD_MEDIA_STORAGE_TYPE);
179 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
182 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_NAME, DB_FIELD_PLAYLIST_NAME);
183 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
185 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_MEMBER_ORDER, DB_FIELD_PLAYLIST_MEMBER_ORDER);
186 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
189 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_MEDIA_COUNT, DB_FIELD_PLAYLIST_MEDIA_COUNT);
190 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
193 ret = _media_filter_attribute_add(g_attr_handle, TAG_NAME, DB_FIELD_TAG_NAME);
194 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
197 ret = _media_filter_attribute_add(g_attr_handle, TAG_MEDIA_COUNT, DB_FIELD_TAG_MEDIA_COUNT);
198 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
201 ret = _media_filter_attribute_add(g_attr_handle, BOOKMARK_MARKED_TIME, DB_FIELD_BOOKMARK_MARKED_TIME);
202 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
207 static int __media_content_create_alias_attr_handle(void)
209 int ret = MEDIA_CONTENT_ERROR_NONE;
211 ret = _media_filter_attribute_create(&g_alias_attr_handle);
212 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
215 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ID, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ID);
216 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
218 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PATH);
219 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
221 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DISPLAY_NAME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DISPLAY_NAME);
222 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
224 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TYPE);
225 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
227 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MIME_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MIME_TYPE);
228 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
230 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SIZE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SIZE);
231 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
233 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ADDED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ADDED_TIME);
234 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
236 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MODIFIED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MODIFIED_TIME);
237 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
239 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_THUMBNAIL_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_THUMBNAIL_PATH);
240 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
242 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TITLE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TITLE);
243 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
245 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM);
246 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
248 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ARTIST, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ARTIST);
249 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
251 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_GENRE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_GENRE);
252 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
254 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COMPOSER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COMPOSER);
255 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
257 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_YEAR, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_YEAR);
258 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
260 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_RECORDED_DATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_RECORDED_DATE);
261 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
263 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COPYRIGHT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COPYRIGHT);
264 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
266 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TRACK_NUM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TRACK_NUM);
267 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
269 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DESCRIPTION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DESCRIPTION);
270 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
272 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BITRATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BITRATE);
273 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
275 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SAMPLERATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SAMPLERATE);
276 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
278 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CHANNEL, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CHANNEL);
279 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
281 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DURATION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DURATION);
282 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
284 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LONGITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LONGITUDE);
285 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
287 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LATITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LATITUDE);
288 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
290 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALTITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALTITUDE);
291 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
293 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_WIDTH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_WIDTH);
294 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
296 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_HEIGHT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_HEIGHT);
297 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
299 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DATETAKEN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DATETAKEN);
300 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
302 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ORIENTATION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ORIENTATION);
303 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
305 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BURST_ID, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BURST_ID);
306 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
308 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PLAYED_COUNT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PLAYED_COUNT);
309 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
311 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LAST_PLAYED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LAST_PLAYED_TIME);
312 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
314 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LAST_PLAYED_POSITION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LAST_PLAYED_POSITION);
315 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
317 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_RATING);
318 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
320 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_FAVOURITE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_FAVOURITE);
321 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
323 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AUTHOR, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AUTHOR);
324 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
326 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PROVIDER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PROVIDER);
327 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
329 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CONTENT_NAME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CONTENT_NAME);
330 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
332 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CATEGORY, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CATEGORY);
333 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
335 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LOCATION_TAG, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LOCATION_TAG);
336 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
338 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AGE_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AGE_RATING);
339 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
341 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_KEYWORD, DB_TABLE_ALIAS_MEDIA"."MEDIA_KEYWORD);
342 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
344 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_IS_DRM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_IS_DRM);
345 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
347 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_STORAGE_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_STORAGE_TYPE);
348 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
351 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_ID, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_ID);
352 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
354 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_PATH, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_PATH);
355 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
357 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_NAME, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_NAME);
358 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
360 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_MODIFIED_TIME, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_MODIFIED_TIME);
361 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
363 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_STORAGE_TYPE, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_STORAGE_TYPE);
364 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
367 ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_NAME, DB_TABLE_ALIAS_PLAYLIST"."DB_FIELD_PLAYLIST_NAME);
368 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
370 ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_MEMBER_ORDER, DB_TABLE_ALIAS_PLAYLIST_MAP"."DB_FIELD_PLAYLIST_MEMBER_ORDER);
371 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
374 ret = _media_filter_attribute_add(g_alias_attr_handle, TAG_NAME, DB_TABLE_ALIAS_TAG"."DB_FIELD_TAG_NAME);
375 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
378 ret = _media_filter_attribute_add(g_alias_attr_handle, BOOKMARK_MARKED_TIME, DB_TABLE_ALIAS_BOOKMARK"."DB_FIELD_BOOKMARK_MARKED_TIME);
379 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
386 static int __media_content_create_attribute_handle(void)
388 int ret = MEDIA_CONTENT_ERROR_NONE;
390 ret = __media_content_create_attr_handle();
391 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
393 ret = __media_content_create_alias_attr_handle();
398 static int __media_content_destroy_attribute_handle(void)
400 int ret = MEDIA_CONTENT_ERROR_NONE;
402 ret = _media_filter_attribute_destory(g_attr_handle);
403 ret = _media_filter_attribute_destory(g_alias_attr_handle);
405 g_attr_handle = NULL;
406 g_alias_attr_handle = NULL;
411 attribute_h _content_get_attirbute_handle(void)
413 return g_attr_handle;
416 attribute_h _content_get_alias_attirbute_handle(void)
418 return g_alias_attr_handle;
421 MediaSvcHandle* _content_get_db_handle(void)
426 int _content_query_prepare(sqlite3_stmt **stmt, char *select_query, char *condition_query, char *option_query)
429 int err = MEDIA_CONTENT_ERROR_NONE;
430 char query[MAX_QUERY_SIZE];
431 memset(query, '\0', sizeof(query));
433 if(db_handle == NULL)
435 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
436 return MEDIA_CONTENT_ERROR_DB_FAILED;
439 if(STRING_VALID(select_query)) {
440 if(!STRING_VALID(condition_query)) {
441 condition_query = " ";
444 if(!STRING_VALID(option_query)) {
449 //query = sqlite3_mprintf("%s %s %s", select_query, condition_query, option_query);
450 len = snprintf(query, sizeof(query), "%s %s %s", select_query, condition_query, option_query);
454 media_content_error("snprintf failed");
455 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
458 media_content_info("Query : [%s]", query);
460 err = sqlite3_prepare_v2((sqlite3*)db_handle, query, strlen(query), stmt, NULL);
463 media_content_error("DB_FAILED(0x%08x) fail to sqlite3_prepare(), %s", MEDIA_CONTENT_ERROR_DB_FAILED, sqlite3_errmsg((sqlite3*)db_handle));
465 if (err == SQLITE_BUSY)
466 return MEDIA_CONTENT_ERROR_DB_BUSY;
468 return MEDIA_CONTENT_ERROR_DB_FAILED;
473 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
474 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
477 return MEDIA_CONTENT_ERROR_NONE;
480 int _content_error_capi(int type, int content_error)
482 media_content_debug("[type : %d] content_error : %d ", type, content_error);
484 if(type == MEDIA_CONTENT_TYPE)
486 if(content_error == MEDIA_INFO_ERROR_NONE)
487 return MEDIA_CONTENT_ERROR_NONE;
488 else if(content_error == MEDIA_INFO_ERROR_INVALID_PARAMETER)
489 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
490 else if((content_error == MEDIA_INFO_ERROR_DATABASE_CONNECT) || (content_error == MEDIA_INFO_ERROR_DATABASE_DISCONNECT) ||
491 (content_error == MEDIA_INFO_ERROR_DATABASE_NO_RECORD) ||(content_error == MEDIA_INFO_ERROR_DATABASE_INTERNAL))
492 return MEDIA_CONTENT_ERROR_DB_FAILED;
493 else if((content_error == MS_MEDIA_ERR_SOCKET_CONN) ||(content_error == MS_MEDIA_ERR_SOCKET_INTERNAL) ||
494 (content_error == MS_MEDIA_ERR_SOCKET_SEND) ||(content_error == MS_MEDIA_ERR_SOCKET_RECEIVE) || (content_error == MS_MEDIA_ERR_SOCKET_RECEIVE_TIMEOUT))
495 return MEDIA_CONTENT_ERROR_NETWORK;
496 } else if(type == MEDIA_THUMBNAIL_TYPE) {
497 if(content_error == MEDIA_THUMB_ERROR_NONE)
498 return MEDIA_CONTENT_ERROR_NONE;
499 else if(content_error == MEDIA_THUMB_ERROR_INVALID_PARAMETER || content_error == MEDIA_THUMB_ERROR_DUPLICATED_REQUEST)
500 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
501 else if(content_error == MEDIA_THUMB_ERROR_DB)
502 return MEDIA_CONTENT_ERROR_DB_FAILED;
503 else if(content_error == MEDIA_THUMB_ERROR_NETWORK)
504 return MEDIA_CONTENT_ERROR_NETWORK;
505 else if(content_error == MEDIA_THUMB_ERROR_TIMEOUT)
506 return MEDIA_CONTENT_ERROR_NETWORK;
507 else if(content_error == MEDIA_THUMB_ERROR_MM_UTIL) /* Error in mm-util lib */
508 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
509 else if(content_error == MEDIA_THUMB_ERROR_HASHCODE) /* Failed to generate hash code */
510 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
511 else if(content_error == MEDIA_THUMB_ERROR_TOO_BIG) /* Original is too big to make thumb */
512 return MEDIA_CONTENT_ERROR_UNSUPPORTED_CONTENT;
513 else if(content_error == MEDIA_THUMB_ERROR_UNSUPPORTED) /* Unsupported type */
514 return MEDIA_CONTENT_ERROR_UNSUPPORTED_CONTENT;
516 } else if(type == MEDIA_REGISTER_TYPE) {
517 if(content_error == MS_MEDIA_ERR_NONE)
518 return MEDIA_CONTENT_ERROR_NONE;
519 else if(content_error == MS_MEDIA_ERR_INVALID_PARAMETER || content_error == MS_MEDIA_ERR_INVALID_PATH)
520 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
521 else if(content_error == MS_MEDIA_ERR_DB_INSERT_FAIL || content_error == MS_MEDIA_ERR_DRM_REGISTER_FAIL)
522 return MEDIA_CONTENT_ERROR_DB_FAILED;
523 else if(content_error == MS_MEDIA_ERR_SCANNING_BUSY)
524 return MEDIA_CONTENT_ERROR_DB_BUSY;
525 else if(content_error == MS_MEDIA_ERR_ALLOCATE_MEMORY_FAIL)
526 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
527 else if(content_error == MS_MEDIA_ERR_DBUS_GET || content_error == MS_MEDIA_ERR_DBUS_ADD_FILTER)
528 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
529 else if(content_error == MS_MEDIA_ERR_VCONF_GET_FAIL)
530 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
533 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
536 int _content_query_sql(char *query_str)
538 int ret = MEDIA_CONTENT_ERROR_NONE;
540 //DB will be updated by Media Server.
541 ret = media_svc_request_update_db(query_str,tzplatform_getuid(TZ_USER_NAME));
543 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
546 int err = MEDIA_CONTENT_ERROR_NONE;
549 if(db_handle == NULL)
551 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
552 return MEDIA_CONTENT_ERROR_DB_FAILED;
555 err = sqlite3_exec(db_handle, query_str, NULL, NULL, &err_msg);
560 media_content_error("DB_FAILED : %s", err_msg);
561 media_content_error("DB_FAILED SQL: %s", query_str);
562 sqlite3_free(err_msg);
565 media_content_error("DB_FAILED(0x%08x) database operation is failed", MEDIA_CONTENT_ERROR_DB_FAILED);
567 if (err == SQLITE_BUSY)
568 return MEDIA_CONTENT_ERROR_DB_BUSY;
570 return MEDIA_CONTENT_ERROR_DB_FAILED;
574 media_content_info("DB_SUCCESS: %s", query_str);
578 sqlite3_free(err_msg);
580 return MEDIA_CONTENT_ERROR_NONE;
584 int media_content_connect(void)
586 int ret = MEDIA_CONTENT_ERROR_NONE;
589 db_mutex = g_mutex_new();
591 if (db_mutex != NULL) {
592 g_mutex_lock(db_mutex);
594 media_content_debug("ref count : %d", ref_count);
598 if(db_handle == NULL)
600 ret = media_svc_connect(&db_handle,tzplatform_getuid(TZ_USER_NAME));
603 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
605 if(ret == MEDIA_CONTENT_ERROR_NONE) {
606 ret = __media_content_create_attribute_handle();
611 g_mutex_unlock(db_mutex);
613 media_content_error("mutex is NULL");
619 int media_content_disconnect(void)
621 int ret = MEDIA_CONTENT_ERROR_NONE;
623 if (db_mutex != NULL) {
624 g_mutex_lock(db_mutex);
626 media_content_debug("ref count : %d", ref_count);
633 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
634 g_mutex_unlock(db_mutex);
635 return MEDIA_CONTENT_ERROR_DB_FAILED;
640 if(db_handle != NULL)
642 ret = media_svc_disconnect(db_handle);
643 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
644 if(ret == MEDIA_CONTENT_ERROR_NONE)
646 ret = __media_content_destroy_attribute_handle();
651 g_mutex_unlock(db_mutex);
652 g_mutex_free(db_mutex);
658 g_mutex_unlock(db_mutex);
660 media_content_error("mutex is NULL");
666 int media_content_scan_file(const char *path)
668 int ret = MEDIA_CONTENT_ERROR_NONE;
670 if (!STRING_VALID(path)) {
671 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
672 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
675 media_content_debug("Path : %s", path);
677 if (g_file_test(path, G_FILE_TEST_EXISTS)) {
678 if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) {
679 /* This means this path has to be inserted or refreshed */
680 media_content_debug("This path exists in file system.");
682 media_svc_storage_type_e storage_type;
684 ret = media_svc_get_storage_type(path, &storage_type);
686 media_content_error("media_svc_get_storage_type failed : %d (%s)", ret, path);
687 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
690 ret = media_svc_check_item_exist_by_path(_content_get_db_handle(), path);
691 if (ret == MEDIA_INFO_ERROR_NONE) {
693 ret = media_svc_refresh_item(_content_get_db_handle(), storage_type, path, tzplatform_getuid(TZ_USER_NAME));
695 media_content_error("media_svc_refresh_item failed : %d", ret);
696 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
699 } else if (ret == MEDIA_INFO_ERROR_DATABASE_NO_RECORD) {
701 ret = media_svc_insert_item_immediately(_content_get_db_handle(), storage_type, path, tzplatform_getuid(TZ_USER_NAME));
703 media_content_error("media_svc_insert_item_immediately failed : %d", ret);
704 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
707 media_content_error("media_svc_check_item_exist_by_path failed : %d", ret);
708 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
710 } else if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
711 /* Dierectory is not accpted in this function */
712 media_content_error("This path is directory");
713 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
716 /* This means this path has to be deleted */
717 media_content_debug("This path doesn't exists in file system... So now start to delete it from DB");
718 ret = media_svc_delete_item_by_path(_content_get_db_handle(), path, tzplatform_getuid(TZ_USER_NAME));
720 media_content_error("media_svc_delete_item_by_path failed : %d", ret);
721 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
725 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
728 void _media_content_scan_cb(media_request_result_s* result, void *user_data)
731 media_content_scan_cb_data *cb_data = user_data;
733 err = result->result;
735 if (cb_data && cb_data->callback) {
736 media_content_debug("User callback is being called now");
737 cb_data->callback(err, cb_data->user_data);
745 int media_content_scan_folder(const char *path, bool is_recursive, media_scan_completed_cb callback, void *user_data)
747 int ret = MEDIA_CONTENT_ERROR_NONE;
749 if (!STRING_VALID(path)) {
750 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
751 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
754 media_content_scan_cb_data *cb_data = NULL;
755 cb_data = (media_content_scan_cb_data *)malloc(sizeof(media_content_scan_cb_data));
756 if (cb_data == NULL) {
757 media_content_error("malloc failed");
758 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
761 cb_data->callback = callback;
762 cb_data->user_data = user_data;
764 ret = media_directory_scanning_async(path, is_recursive, _media_content_scan_cb, cb_data, tzplatform_getuid(TZ_USER_NAME));
766 media_content_error("media_directory_scanning_async failed : %d", ret);
769 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
772 void _media_content_db_update_noti_cb(
774 media_item_type_e item,
775 media_item_update_type_e update_type,
778 media_type_e content_type,
782 int error_value = MEDIA_CONTENT_ERROR_NONE;
784 media_noti_cb_s *_noti_info = (media_noti_cb_s *)user_data;
786 if(_noti_info != NULL)
788 if (_noti_info->update_noti_cb)
789 _noti_info->update_noti_cb(error_value, pid, item, update_type, content_type, uuid, path, mime_type, _noti_info->user_data);
795 int media_content_set_db_updated_cb(media_content_db_update_cb callback, void *user_data)
797 int ret = MEDIA_CONTENT_ERROR_NONE;
799 g_noti_info = (media_noti_cb_s*)calloc(1, sizeof(media_noti_cb_s));
800 if (g_noti_info == NULL) {
801 media_content_error("Failed to create noti info");
802 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
805 g_noti_info->update_noti_cb = callback;
806 g_noti_info->user_data = user_data;
808 ret = media_db_update_subscribe(_media_content_db_update_noti_cb, (void *)g_noti_info);
810 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
813 int media_content_unset_db_updated_cb()
815 int ret = MEDIA_CONTENT_ERROR_NONE;
817 SAFE_FREE(g_noti_info);
818 ret = media_db_update_unsubscribe();
820 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);