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_info_private.h>
20 #include <media-util.h>
23 static attribute_h g_attr_handle = NULL;
24 static attribute_h g_alias_attr_handle = NULL;
25 static MediaSvcHandle *db_handle = NULL;
26 static int ref_count = 0;
27 static GMutex *db_mutex = NULL;
29 static __thread media_noti_cb_s *g_noti_info = NULL;
31 static int __media_content_create_attr_handle(void);
32 static int __media_content_create_alias_attr_handle(void);
33 static int __media_content_create_attribute_handle(void);
34 static int __media_content_destroy_attribute_handle(void);
37 static int __media_content_create_attr_handle(void)
39 int ret = MEDIA_CONTENT_ERROR_NONE;
41 ret = _media_filter_attribute_create(&g_attr_handle);
42 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
45 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ID, DB_FIELD_MEDIA_ID);
46 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
48 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PATH, DB_FIELD_MEDIA_PATH);
49 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
51 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DISPLAY_NAME, DB_FIELD_MEDIA_DISPLAY_NAME);
52 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
54 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TYPE, DB_FIELD_MEDIA_TYPE);
55 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
57 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MIME_TYPE, DB_FIELD_MEDIA_MIME_TYPE);
58 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
60 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_SIZE, DB_FIELD_MEDIA_SIZE);
61 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
63 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ADDED_TIME, DB_FIELD_MEDIA_ADDED_TIME);
64 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
66 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MODIFIED_TIME, DB_FIELD_MEDIA_MODIFIED_TIME);
67 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
69 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_THUMBNAIL_PATH, DB_FIELD_MEDIA_THUMBNAIL_PATH);
70 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
72 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TITLE, DB_FIELD_MEDIA_TITLE);
73 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
75 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM, DB_FIELD_MEDIA_ALBUM);
76 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
78 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ARTIST, DB_FIELD_MEDIA_ARTIST);
79 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
81 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_GENRE, DB_FIELD_MEDIA_GENRE);
82 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
84 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COMPOSER, DB_FIELD_MEDIA_COMPOSER);
85 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
87 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_YEAR, DB_FIELD_MEDIA_YEAR);
88 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
90 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_RECORDED_DATE, DB_FIELD_MEDIA_RECORDED_DATE);
91 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
93 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COPYRIGHT, DB_FIELD_MEDIA_COPYRIGHT);
94 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
96 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TRACK_NUM, DB_FIELD_MEDIA_TRACK_NUM);
97 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
99 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DESCRIPTION, DB_FIELD_MEDIA_DESCRIPTION);
100 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
102 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BITRATE, DB_FIELD_MEDIA_BITRATE);
103 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
105 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_SAMPLERATE, DB_FIELD_MEDIA_SAMPLERATE);
106 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
108 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CHANNEL, DB_FIELD_MEDIA_CHANNEL);
109 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
111 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DURATION, DB_FIELD_MEDIA_DURATION);
112 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
114 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LONGITUDE, DB_FIELD_MEDIA_LONGITUDE);
115 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
117 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LATITUDE, DB_FIELD_MEDIA_LATITUDE);
118 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
120 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALTITUDE, DB_FIELD_MEDIA_ALTITUDE);
121 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
123 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_WIDTH, DB_FIELD_MEDIA_WIDTH);
124 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
126 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_HEIGHT, DB_FIELD_MEDIA_HEIGHT);
127 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
129 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DATETAKEN, DB_FIELD_MEDIA_DATETAKEN);
130 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
132 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ORIENTATION, DB_FIELD_MEDIA_ORIENTATION);
133 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
135 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BURST_ID, DB_FIELD_MEDIA_BURST_ID);
136 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
138 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PLAYED_COUNT, DB_FIELD_MEDIA_PLAYED_COUNT);
139 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
141 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LAST_PLAYED_TIME, DB_FIELD_MEDIA_LAST_PLAYED_TIME);
142 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
144 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LAST_PLAYED_POSITION, DB_FIELD_MEDIA_LAST_PLAYED_POSITION);
145 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
147 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_RATING, DB_FIELD_MEDIA_RATING);
148 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
150 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_FAVOURITE, DB_FIELD_MEDIA_FAVOURITE);
151 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
153 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AUTHOR, DB_FIELD_MEDIA_AUTHOR);
154 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
156 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PROVIDER, DB_FIELD_MEDIA_PROVIDER);
157 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
159 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CONTENT_NAME, DB_FIELD_MEDIA_CONTENT_NAME);
160 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
162 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CATEGORY, DB_FIELD_MEDIA_CATEGORY);
163 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
165 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LOCATION_TAG, DB_FIELD_MEDIA_LOCATION_TAG);
166 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
168 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AGE_RATING, DB_FIELD_MEDIA_AGE_RATING);
169 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
171 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_KEYWORD, DB_FIELD_MEDIA_KEYWORD);
172 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
174 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_IS_DRM, DB_FIELD_MEDIA_IS_DRM);
175 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
177 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_STORAGE_TYPE, DB_FIELD_MEDIA_STORAGE_TYPE);
178 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
181 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_NAME, DB_FIELD_PLAYLIST_NAME);
182 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
184 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_MEMBER_ORDER, DB_FIELD_PLAYLIST_MEMBER_ORDER);
185 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
188 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_MEDIA_COUNT, DB_FIELD_PLAYLIST_MEDIA_COUNT);
189 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
192 ret = _media_filter_attribute_add(g_attr_handle, TAG_NAME, DB_FIELD_TAG_NAME);
193 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
196 ret = _media_filter_attribute_add(g_attr_handle, TAG_MEDIA_COUNT, DB_FIELD_TAG_MEDIA_COUNT);
197 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
200 ret = _media_filter_attribute_add(g_attr_handle, BOOKMARK_MARKED_TIME, DB_FIELD_BOOKMARK_MARKED_TIME);
201 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
206 static int __media_content_create_alias_attr_handle(void)
208 int ret = MEDIA_CONTENT_ERROR_NONE;
210 ret = _media_filter_attribute_create(&g_alias_attr_handle);
211 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
214 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ID, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ID);
215 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
217 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PATH);
218 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
220 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DISPLAY_NAME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DISPLAY_NAME);
221 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
223 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TYPE);
224 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
226 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MIME_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MIME_TYPE);
227 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
229 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SIZE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SIZE);
230 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
232 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ADDED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ADDED_TIME);
233 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
235 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MODIFIED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MODIFIED_TIME);
236 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
238 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_THUMBNAIL_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_THUMBNAIL_PATH);
239 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
241 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TITLE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TITLE);
242 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
244 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM);
245 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
247 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ARTIST, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ARTIST);
248 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
250 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_GENRE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_GENRE);
251 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
253 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COMPOSER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COMPOSER);
254 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
256 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_YEAR, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_YEAR);
257 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
259 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_RECORDED_DATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_RECORDED_DATE);
260 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
262 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COPYRIGHT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COPYRIGHT);
263 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
265 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TRACK_NUM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TRACK_NUM);
266 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
268 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DESCRIPTION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DESCRIPTION);
269 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
271 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BITRATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BITRATE);
272 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
274 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SAMPLERATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SAMPLERATE);
275 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
277 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CHANNEL, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CHANNEL);
278 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
280 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DURATION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DURATION);
281 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
283 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LONGITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LONGITUDE);
284 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
286 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LATITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LATITUDE);
287 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
289 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALTITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALTITUDE);
290 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
292 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_WIDTH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_WIDTH);
293 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
295 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_HEIGHT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_HEIGHT);
296 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
298 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DATETAKEN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DATETAKEN);
299 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
301 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ORIENTATION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ORIENTATION);
302 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
304 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BURST_ID, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BURST_ID);
305 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
307 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PLAYED_COUNT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PLAYED_COUNT);
308 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
310 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LAST_PLAYED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LAST_PLAYED_TIME);
311 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
313 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LAST_PLAYED_POSITION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LAST_PLAYED_POSITION);
314 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
316 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_RATING);
317 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
319 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_FAVOURITE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_FAVOURITE);
320 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
322 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AUTHOR, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AUTHOR);
323 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
325 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PROVIDER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PROVIDER);
326 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
328 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CONTENT_NAME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CONTENT_NAME);
329 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
331 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CATEGORY, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CATEGORY);
332 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
334 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LOCATION_TAG, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LOCATION_TAG);
335 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
337 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AGE_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AGE_RATING);
338 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
340 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_KEYWORD, DB_TABLE_ALIAS_MEDIA"."MEDIA_KEYWORD);
341 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
343 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_IS_DRM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_IS_DRM);
344 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
346 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_STORAGE_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_STORAGE_TYPE);
347 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
350 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_ID, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_ID);
351 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
353 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_PATH, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_PATH);
354 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
356 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_NAME, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_NAME);
357 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
359 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_MODIFIED_TIME, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_MODIFIED_TIME);
360 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
362 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_STORAGE_TYPE, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_STORAGE_TYPE);
363 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
366 ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_NAME, DB_TABLE_ALIAS_PLAYLIST"."DB_FIELD_PLAYLIST_NAME);
367 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
369 ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_MEMBER_ORDER, DB_TABLE_ALIAS_PLAYLIST_MAP"."DB_FIELD_PLAYLIST_MEMBER_ORDER);
370 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
373 ret = _media_filter_attribute_add(g_alias_attr_handle, TAG_NAME, DB_TABLE_ALIAS_TAG"."DB_FIELD_TAG_NAME);
374 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
377 ret = _media_filter_attribute_add(g_alias_attr_handle, BOOKMARK_MARKED_TIME, DB_TABLE_ALIAS_BOOKMARK"."DB_FIELD_BOOKMARK_MARKED_TIME);
378 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
383 static int __media_content_create_attribute_handle(void)
385 int ret = MEDIA_CONTENT_ERROR_NONE;
387 ret = __media_content_create_attr_handle();
388 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
390 ret = __media_content_create_alias_attr_handle();
395 static int __media_content_destroy_attribute_handle(void)
397 int ret = MEDIA_CONTENT_ERROR_NONE;
399 ret = _media_filter_attribute_destory(g_attr_handle);
400 ret = _media_filter_attribute_destory(g_alias_attr_handle);
402 g_attr_handle = NULL;
403 g_alias_attr_handle = NULL;
408 attribute_h _content_get_attirbute_handle(void)
410 return g_attr_handle;
413 attribute_h _content_get_alias_attirbute_handle(void)
415 return g_alias_attr_handle;
418 MediaSvcHandle* _content_get_db_handle(void)
423 int _content_query_prepare(sqlite3_stmt **stmt, char *select_query, char *condition_query, char *option_query)
426 int err = MEDIA_CONTENT_ERROR_NONE;
427 char query[MAX_QUERY_SIZE];
428 memset(query, '\0', sizeof(query));
430 if(db_handle == NULL)
432 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
433 return MEDIA_CONTENT_ERROR_DB_FAILED;
436 if(STRING_VALID(select_query))
438 if(!STRING_VALID(condition_query))
440 condition_query = " ";
443 if(!STRING_VALID(option_query))
448 //query = sqlite3_mprintf("%s %s %s", select_query, condition_query, option_query);
449 len = snprintf(query, sizeof(query), "%s %s %s", select_query, condition_query, option_query);
453 media_content_error("snprintf failed");
454 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
457 media_content_info("Query : [%s]", query);
459 err = sqlite3_prepare_v2((sqlite3*)db_handle, query, strlen(query), stmt, NULL);
462 media_content_error("DB_FAILED(0x%08x) fail to sqlite3_prepare(), %s", MEDIA_CONTENT_ERROR_DB_FAILED, sqlite3_errmsg((sqlite3*)db_handle));
464 if (err == SQLITE_BUSY)
465 return MEDIA_CONTENT_ERROR_DB_BUSY;
467 return MEDIA_CONTENT_ERROR_DB_FAILED;
472 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
473 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
476 return MEDIA_CONTENT_ERROR_NONE;
479 int _content_error_capi(int type, int content_error)
481 media_content_debug("[type : %d] content_error : %d ", type, content_error);
483 if(type == MEDIA_CONTENT_TYPE)
485 if(content_error == MEDIA_INFO_ERROR_NONE)
486 return MEDIA_CONTENT_ERROR_NONE;
487 else if(content_error == MEDIA_INFO_ERROR_INVALID_PARAMETER)
488 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
489 else if((content_error == MEDIA_INFO_ERROR_DATABASE_CONNECT) || (content_error == MEDIA_INFO_ERROR_DATABASE_DISCONNECT) ||
490 (content_error == MEDIA_INFO_ERROR_DATABASE_NO_RECORD) ||(content_error == MEDIA_INFO_ERROR_DATABASE_INTERNAL))
491 return MEDIA_CONTENT_ERROR_DB_FAILED;
492 else if((content_error == MS_MEDIA_ERR_SOCKET_CONN) ||(content_error == MS_MEDIA_ERR_SOCKET_INTERNAL) ||
493 (content_error == MS_MEDIA_ERR_SOCKET_SEND) ||(content_error == MS_MEDIA_ERR_SOCKET_RECEIVE) || (content_error == MS_MEDIA_ERR_SOCKET_RECEIVE_TIMEOUT))
494 return MEDIA_CONTENT_ERROR_NETWORK;
495 } else if(type == MEDIA_THUMBNAIL_TYPE) {
496 if(content_error == MEDIA_THUMB_ERROR_NONE)
497 return MEDIA_CONTENT_ERROR_NONE;
498 else if(content_error == MEDIA_THUMB_ERROR_INVALID_PARAMETER || content_error == MEDIA_THUMB_ERROR_DUPLICATED_REQUEST)
499 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
500 else if(content_error == MEDIA_THUMB_ERROR_DB)
501 return MEDIA_CONTENT_ERROR_DB_FAILED;
502 else if(content_error == MEDIA_THUMB_ERROR_NETWORK)
503 return MEDIA_CONTENT_ERROR_NETWORK;
504 else if(content_error == MEDIA_THUMB_ERROR_TIMEOUT)
505 return MEDIA_CONTENT_ERROR_NETWORK;
506 else if(content_error == MEDIA_THUMB_ERROR_MM_UTIL) /* Error in mm-util lib */
507 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
508 else if(content_error == MEDIA_THUMB_ERROR_HASHCODE) /* Failed to generate hash code */
509 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
510 else if(content_error == MEDIA_THUMB_ERROR_TOO_BIG) /* Original is too big to make thumb */
511 return MEDIA_CONTENT_ERROR_UNSUPPORTED_CONTENT;
512 else if(content_error == MEDIA_THUMB_ERROR_UNSUPPORTED) /* Unsupported type */
513 return MEDIA_CONTENT_ERROR_UNSUPPORTED_CONTENT;
515 } else if(type == MEDIA_REGISTER_TYPE) {
516 if(content_error == MS_MEDIA_ERR_NONE)
517 return MEDIA_CONTENT_ERROR_NONE;
518 else if(content_error == MS_MEDIA_ERR_INVALID_PARAMETER || content_error == MS_MEDIA_ERR_INVALID_PATH)
519 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
520 else if(content_error == MS_MEDIA_ERR_DB_INSERT_FAIL || content_error == MS_MEDIA_ERR_DRM_REGISTER_FAIL)
521 return MEDIA_CONTENT_ERROR_DB_FAILED;
522 else if(content_error == MS_MEDIA_ERR_SCANNING_BUSY)
523 return MEDIA_CONTENT_ERROR_DB_BUSY;
524 else if(content_error == MS_MEDIA_ERR_ALLOCATE_MEMORY_FAIL)
525 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
526 else if(content_error == MS_MEDIA_ERR_DBUS_GET || content_error == MS_MEDIA_ERR_DBUS_ADD_FILTER)
527 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
528 else if(content_error == MS_MEDIA_ERR_VCONF_GET_FAIL)
529 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
532 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
535 int _content_query_sql(char *query_str)
537 int ret = MEDIA_CONTENT_ERROR_NONE;
539 //DB will be updated by Media Server.
540 ret = media_svc_request_update_db(query_str,tzplatform_getuid(TZ_USER_NAME));
542 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
545 int media_content_connect(void)
547 int ret = MEDIA_CONTENT_ERROR_NONE;
550 db_mutex = g_mutex_new();
552 if (db_mutex != NULL) {
553 g_mutex_lock(db_mutex);
555 media_content_debug("ref count : %d", ref_count);
559 if(db_handle == NULL)
561 ret = media_svc_connect(&db_handle,tzplatform_getuid(TZ_USER_NAME));
564 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
566 if(ret == MEDIA_CONTENT_ERROR_NONE) {
567 ret = __media_content_create_attribute_handle();
572 g_mutex_unlock(db_mutex);
574 media_content_error("mutex is NULL");
580 int media_content_disconnect(void)
582 int ret = MEDIA_CONTENT_ERROR_NONE;
584 if (db_mutex != NULL) {
585 g_mutex_lock(db_mutex);
587 media_content_debug("ref count : %d", ref_count);
594 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
595 g_mutex_unlock(db_mutex);
596 return MEDIA_CONTENT_ERROR_DB_FAILED;
601 if(db_handle != NULL)
603 ret = media_svc_disconnect(db_handle);
604 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
605 if(ret == MEDIA_CONTENT_ERROR_NONE) {
606 ret = __media_content_destroy_attribute_handle();
611 g_mutex_unlock(db_mutex);
612 g_mutex_free(db_mutex);
618 g_mutex_unlock(db_mutex);
620 media_content_error("mutex is NULL");
626 int media_content_scan_file(const char *path)
628 int ret = MEDIA_CONTENT_ERROR_NONE;
630 if (!STRING_VALID(path)) {
631 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
632 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
635 media_content_debug("Path : %s", path);
637 if (g_file_test(path, G_FILE_TEST_EXISTS)) {
638 if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) {
639 /* This means this path has to be inserted or refreshed */
640 media_content_debug("This path exists in file system.");
642 media_svc_storage_type_e storage_type;
644 ret = media_svc_get_storage_type(path, &storage_type);
646 media_content_error("media_svc_get_storage_type failed : %d (%s)", ret, path);
647 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
650 ret = media_svc_check_item_exist_by_path(_content_get_db_handle(), path);
651 if (ret == MEDIA_INFO_ERROR_NONE) {
653 ret = media_svc_refresh_item(_content_get_db_handle(), storage_type, path, tzplatform_getuid(TZ_USER_NAME));
655 media_content_error("media_svc_refresh_item failed : %d", ret);
656 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
659 } else if (ret == MEDIA_INFO_ERROR_DATABASE_NO_RECORD) {
661 ret = media_svc_insert_item_immediately(_content_get_db_handle(), storage_type, path, tzplatform_getuid(TZ_USER_NAME));
663 media_content_error("media_svc_insert_item_immediately failed : %d", ret);
664 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
667 media_content_error("media_svc_check_item_exist_by_path failed : %d", ret);
668 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
670 } else if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
671 /* Dierectory is not accpted in this function */
672 media_content_error("This path is directory");
673 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
676 /* This means this path has to be deleted */
677 media_content_debug("This path doesn't exists in file system... So now start to delete it from DB");
678 ret = media_svc_delete_item_by_path(_content_get_db_handle(), path, tzplatform_getuid(TZ_USER_NAME));
680 media_content_error("media_svc_delete_item_by_path failed : %d", ret);
681 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
685 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
688 void _media_content_scan_cb(media_request_result_s* result, void *user_data)
691 media_content_scan_cb_data *cb_data = user_data;
693 err = result->result;
695 if (cb_data && cb_data->callback) {
696 media_content_debug("User callback is being called now");
697 cb_data->callback(err, cb_data->user_data);
705 int media_content_scan_folder(const char *path, bool is_recursive, media_scan_completed_cb callback, void *user_data)
707 int ret = MEDIA_CONTENT_ERROR_NONE;
709 if (!STRING_VALID(path)) {
710 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
711 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
714 media_content_scan_cb_data *cb_data = NULL;
715 cb_data = (media_content_scan_cb_data *)malloc(sizeof(media_content_scan_cb_data));
716 if (cb_data == NULL) {
717 media_content_error("malloc failed");
718 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
721 cb_data->callback = callback;
722 cb_data->user_data = user_data;
724 ret = media_directory_scanning_async(path, is_recursive, _media_content_scan_cb, cb_data, tzplatform_getuid(TZ_USER_NAME));
726 media_content_error("media_directory_scanning_async failed : %d", ret);
729 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
732 void _media_content_db_update_noti_cb(
734 media_item_type_e item,
735 media_item_update_type_e update_type,
738 media_type_e content_type,
742 int error_value = MEDIA_CONTENT_ERROR_NONE;
744 media_noti_cb_s *_noti_info = (media_noti_cb_s *)user_data;
746 if(_noti_info != NULL)
748 if (_noti_info->update_noti_cb)
749 _noti_info->update_noti_cb(error_value, pid, item, update_type, content_type, uuid, path, mime_type, _noti_info->user_data);
755 int media_content_set_db_updated_cb(media_content_db_update_cb callback, void *user_data)
757 int ret = MEDIA_CONTENT_ERROR_NONE;
759 g_noti_info = (media_noti_cb_s*)calloc(1, sizeof(media_noti_cb_s));
760 if (g_noti_info == NULL) {
761 media_content_error("Failed to create noti info");
762 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
765 g_noti_info->update_noti_cb = callback;
766 g_noti_info->user_data = user_data;
768 ret = media_db_update_subscribe(_media_content_db_update_noti_cb, (void *)g_noti_info);
770 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
773 int media_content_unset_db_updated_cb()
775 int ret = MEDIA_CONTENT_ERROR_NONE;
777 SAFE_FREE(g_noti_info);
778 ret = media_db_update_unsubscribe();
780 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);