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_content.h>
19 #include <media_info_private.h>
20 #include <media_util_private.h>
22 #include <unicode/uscript.h>
23 #include <unicode/uloc.h>
24 #include <unicode/ucol.h>
25 #include <sys/types.h>
31 static attribute_h g_attr_handle = NULL;
32 static attribute_h g_alias_attr_handle = NULL;
33 static MediaSvcHandle *db_handle = NULL;
34 static int ref_count = 0;
35 static GMutex db_mutex;
37 static __thread media_noti_cb_s *g_noti_info = NULL;
39 static int __media_content_create_attr_handle(void);
40 static int __media_content_create_alias_attr_handle(void);
41 static int __media_content_create_attribute_handle(void);
42 static int __media_content_destroy_attribute_handle(void);
45 static int __media_content_create_attr_handle(void)
47 int ret = MEDIA_CONTENT_ERROR_NONE;
49 ret = _media_filter_attribute_create(&g_attr_handle);
50 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
53 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ID, DB_FIELD_MEDIA_ID);
54 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
56 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PATH, DB_FIELD_MEDIA_PATH);
57 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
59 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DISPLAY_NAME, DB_FIELD_MEDIA_DISPLAY_NAME);
60 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
62 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TYPE, DB_FIELD_MEDIA_TYPE);
63 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
65 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MIME_TYPE, DB_FIELD_MEDIA_MIME_TYPE);
66 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
68 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_SIZE, DB_FIELD_MEDIA_SIZE);
69 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
71 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ADDED_TIME, DB_FIELD_MEDIA_ADDED_TIME);
72 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
74 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MODIFIED_TIME, DB_FIELD_MEDIA_MODIFIED_TIME);
75 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
77 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TIMELINE, DB_FIELD_MEDIA_TIMELINE);
78 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
80 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_THUMBNAIL_PATH, DB_FIELD_MEDIA_THUMBNAIL_PATH);
81 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
83 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TITLE, DB_FIELD_MEDIA_TITLE);
84 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
86 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM, DB_FIELD_MEDIA_ALBUM);
87 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
89 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ARTIST, DB_FIELD_MEDIA_ARTIST);
90 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
92 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM_ARTIST, DB_FIELD_MEDIA_ALBUM_ARTIST);
93 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
95 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_GENRE, DB_FIELD_MEDIA_GENRE);
96 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
98 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COMPOSER, DB_FIELD_MEDIA_COMPOSER);
99 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
101 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_YEAR, DB_FIELD_MEDIA_YEAR);
102 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
104 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_RECORDED_DATE, DB_FIELD_MEDIA_RECORDED_DATE);
105 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
107 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COPYRIGHT, DB_FIELD_MEDIA_COPYRIGHT);
108 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
110 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TRACK_NUM, DB_FIELD_MEDIA_TRACK_NUM);
111 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
113 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DESCRIPTION, DB_FIELD_MEDIA_DESCRIPTION);
114 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
116 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BITRATE, DB_FIELD_MEDIA_BITRATE);
117 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
119 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BITPERSAMPLE, DB_FIELD_MEDIA_BITPERSAMPLE);
120 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
122 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_SAMPLERATE, DB_FIELD_MEDIA_SAMPLERATE);
123 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
125 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CHANNEL, DB_FIELD_MEDIA_CHANNEL);
126 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
128 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DURATION, DB_FIELD_MEDIA_DURATION);
129 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
131 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LONGITUDE, DB_FIELD_MEDIA_LONGITUDE);
132 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
134 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LATITUDE, DB_FIELD_MEDIA_LATITUDE);
135 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
137 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALTITUDE, DB_FIELD_MEDIA_ALTITUDE);
138 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
140 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_WIDTH, DB_FIELD_MEDIA_WIDTH);
141 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
143 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_HEIGHT, DB_FIELD_MEDIA_HEIGHT);
144 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
146 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DATETAKEN, DB_FIELD_MEDIA_DATETAKEN);
147 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
149 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ORIENTATION, DB_FIELD_MEDIA_ORIENTATION);
150 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
152 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BURST_ID, DB_FIELD_MEDIA_BURST_ID);
153 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
155 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PLAYED_COUNT, DB_FIELD_MEDIA_PLAYED_COUNT);
156 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
158 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LAST_PLAYED_TIME, DB_FIELD_MEDIA_LAST_PLAYED_TIME);
159 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
161 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LAST_PLAYED_POSITION, DB_FIELD_MEDIA_LAST_PLAYED_POSITION);
162 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
164 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_RATING, DB_FIELD_MEDIA_RATING);
165 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
167 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_FAVOURITE, DB_FIELD_MEDIA_FAVOURITE);
168 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
170 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AUTHOR, DB_FIELD_MEDIA_AUTHOR);
171 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
173 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PROVIDER, DB_FIELD_MEDIA_PROVIDER);
174 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
176 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CONTENT_NAME, DB_FIELD_MEDIA_CONTENT_NAME);
177 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
179 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CATEGORY, DB_FIELD_MEDIA_CATEGORY);
180 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
182 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LOCATION_TAG, DB_FIELD_MEDIA_LOCATION_TAG);
183 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
185 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AGE_RATING, DB_FIELD_MEDIA_AGE_RATING);
186 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
188 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_KEYWORD, DB_FIELD_MEDIA_KEYWORD);
189 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
191 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_WEATHER, DB_FIELD_MEDIA_WEATHER);
192 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
194 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_IS_DRM, DB_FIELD_MEDIA_IS_DRM);
195 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
197 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_STORAGE_TYPE, DB_FIELD_MEDIA_STORAGE_TYPE);
198 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
201 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_FILE_NAME_PINYIN, DB_FIELD_MEDIA_FILE_NAME_PINYIN);
202 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
204 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TITLE_PINYIN, DB_FIELD_MEDIA_TITLE_PINYIN);
205 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
207 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM_PINYIN, DB_FIELD_MEDIA_ALBUM_PINYIN);
208 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
210 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ARTIST_PINYIN, DB_FIELD_MEDIA_ARTIST_PINYIN);
211 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
213 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM_ARTIST_PINYIN, DB_FIELD_MEDIA_ALBUM_ARTIST_PINYIN);
214 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
216 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_GENRE_PINYIN, DB_FIELD_MEDIA_GENRE_PINYIN);
217 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
219 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COMPOSER_PINYIN, DB_FIELD_MEDIA_COMPOSER_PINYIN);
220 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
222 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COPYRIGHT_PINYIN, DB_FIELD_MEDIA_COPYRIGHT_PINYIN);
223 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
225 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DESCRIPTION_PINYIN, DB_FIELD_MEDIA_DESCRIPTION_PINYIN);
226 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
228 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AUTHOR_PINYIN, DB_FIELD_MEDIA_AUTHOR_PINYIN);
229 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
231 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PROVIDER_PINYIN, DB_FIELD_MEDIA_PROVIDER_PINYIN);
232 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
234 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CONTENT_NAME_PINYIN, DB_FIELD_MEDIA_CONTENT_NAME_PINYIN);
235 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
237 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CATEGORY_PINYIN, DB_FIELD_MEDIA_CATEGORY_PINYIN);
238 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
240 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LOCATION_TAG_PINYIN, DB_FIELD_MEDIA_LOCATION_TAG_PINYIN);
241 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
243 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AGE_RATING_PINYIN, DB_FIELD_MEDIA_AGE_RATING_PINYIN);
244 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
246 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_KEYWORD_PINYIN, DB_FIELD_MEDIA_KEYWORD_PINYIN);
247 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
250 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_NAME, DB_FIELD_PLAYLIST_NAME);
251 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
253 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_MEMBER_ORDER, DB_FIELD_PLAYLIST_MEMBER_ORDER);
254 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
257 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_MEDIA_COUNT, DB_FIELD_PLAYLIST_MEDIA_COUNT);
258 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
261 ret = _media_filter_attribute_add(g_attr_handle, TAG_NAME, DB_FIELD_TAG_NAME);
262 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
265 ret = _media_filter_attribute_add(g_attr_handle, TAG_MEDIA_COUNT, DB_FIELD_TAG_MEDIA_COUNT);
266 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
269 ret = _media_filter_attribute_add(g_attr_handle, BOOKMARK_MARKED_TIME, DB_FIELD_BOOKMARK_MARKED_TIME);
270 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
275 static int __media_content_create_alias_attr_handle(void)
277 int ret = MEDIA_CONTENT_ERROR_NONE;
279 ret = _media_filter_attribute_create(&g_alias_attr_handle);
280 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
283 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ID, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ID);
284 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
286 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PATH);
287 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
289 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DISPLAY_NAME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DISPLAY_NAME);
290 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
292 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TYPE);
293 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
295 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MIME_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MIME_TYPE);
296 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
298 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SIZE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SIZE);
299 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
301 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ADDED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ADDED_TIME);
302 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
304 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MODIFIED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MODIFIED_TIME);
305 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
307 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TIMELINE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TIMELINE);
308 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
310 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_THUMBNAIL_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_THUMBNAIL_PATH);
311 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
313 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TITLE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TITLE);
314 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
316 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM);
317 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
319 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ARTIST, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ARTIST);
320 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
322 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM_ARTIST, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM_ARTIST);
323 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
325 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_GENRE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_GENRE);
326 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
328 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COMPOSER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COMPOSER);
329 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
331 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_YEAR, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_YEAR);
332 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
334 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_RECORDED_DATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_RECORDED_DATE);
335 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
337 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COPYRIGHT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COPYRIGHT);
338 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
340 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TRACK_NUM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TRACK_NUM);
341 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
343 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DESCRIPTION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DESCRIPTION);
344 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
346 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BITRATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BITRATE);
347 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
349 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BITPERSAMPLE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BITPERSAMPLE);
350 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
352 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SAMPLERATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SAMPLERATE);
353 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
355 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CHANNEL, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CHANNEL);
356 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
358 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DURATION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DURATION);
359 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
361 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LONGITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LONGITUDE);
362 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
364 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LATITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LATITUDE);
365 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
367 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALTITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALTITUDE);
368 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
370 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_WIDTH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_WIDTH);
371 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
373 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_HEIGHT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_HEIGHT);
374 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
376 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DATETAKEN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DATETAKEN);
377 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
379 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ORIENTATION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ORIENTATION);
380 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
382 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BURST_ID, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BURST_ID);
383 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
385 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PLAYED_COUNT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PLAYED_COUNT);
386 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
388 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LAST_PLAYED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LAST_PLAYED_TIME);
389 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
391 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LAST_PLAYED_POSITION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LAST_PLAYED_POSITION);
392 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
394 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_RATING);
395 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
397 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_FAVOURITE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_FAVOURITE);
398 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
400 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AUTHOR, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AUTHOR);
401 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
403 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PROVIDER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PROVIDER);
404 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
406 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CONTENT_NAME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CONTENT_NAME);
407 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
409 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CATEGORY, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CATEGORY);
410 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
412 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LOCATION_TAG, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LOCATION_TAG);
413 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
415 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AGE_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AGE_RATING);
416 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
418 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_KEYWORD, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_KEYWORD);
419 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
421 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_WEATHER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_WEATHER);
422 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
424 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_IS_DRM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_IS_DRM);
425 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
427 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_STORAGE_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_STORAGE_TYPE);
428 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
431 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_FILE_NAME_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_FILE_NAME_PINYIN);
432 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
434 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TITLE_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TITLE_PINYIN);
435 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
437 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM_PINYIN);
438 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
440 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ARTIST_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ARTIST_PINYIN);
441 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
443 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM_ARTIST_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM_ARTIST_PINYIN);
444 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
446 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_GENRE_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_GENRE_PINYIN);
447 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
449 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COMPOSER_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COMPOSER_PINYIN);
450 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
452 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COPYRIGHT_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COPYRIGHT_PINYIN);
453 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
455 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DESCRIPTION_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DESCRIPTION_PINYIN);
456 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
458 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AUTHOR_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AUTHOR_PINYIN);
459 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
461 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PROVIDER_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PROVIDER_PINYIN);
462 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
464 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CONTENT_NAME_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CONTENT_NAME_PINYIN);
465 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
467 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CATEGORY_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CATEGORY_PINYIN);
468 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
470 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LOCATION_TAG_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LOCATION_TAG_PINYIN);
471 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
473 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AGE_RATING_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AGE_RATING_PINYIN);
474 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
476 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_KEYWORD_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_KEYWORD_PINYIN);
477 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
480 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_ID, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_ID);
481 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
483 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_PATH, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_PATH);
484 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
486 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_NAME, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_NAME);
487 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
489 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_MODIFIED_TIME, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_MODIFIED_TIME);
490 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
492 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_STORAGE_TYPE, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_STORAGE_TYPE);
493 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
495 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_NAME_PINYIN, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_NAME_PINYIN);
496 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
498 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_ORDER, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_ORDER);
499 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
502 ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_NAME, DB_TABLE_ALIAS_PLAYLIST"."DB_FIELD_PLAYLIST_NAME);
503 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
505 ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_MEMBER_ORDER, DB_TABLE_ALIAS_PLAYLIST_MAP"."DB_FIELD_PLAYLIST_MEMBER_ORDER);
506 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
509 ret = _media_filter_attribute_add(g_alias_attr_handle, TAG_NAME, DB_TABLE_ALIAS_TAG"."DB_FIELD_TAG_NAME);
510 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
513 ret = _media_filter_attribute_add(g_alias_attr_handle, BOOKMARK_MARKED_TIME, DB_TABLE_ALIAS_BOOKMARK"."DB_FIELD_BOOKMARK_MARKED_TIME);
514 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
519 static int __media_content_create_attribute_handle(void)
521 int ret = MEDIA_CONTENT_ERROR_NONE;
523 ret = __media_content_create_attr_handle();
524 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
526 ret = __media_content_create_alias_attr_handle();
527 if(ret != MEDIA_CONTENT_ERROR_NONE)
528 _media_filter_attribute_destory(g_attr_handle);
533 static int __media_content_destroy_attribute_handle(void)
535 int ret = MEDIA_CONTENT_ERROR_NONE;
537 ret = _media_filter_attribute_destory(g_attr_handle);
538 ret = _media_filter_attribute_destory(g_alias_attr_handle);
540 g_attr_handle = NULL;
541 g_alias_attr_handle = NULL;
546 attribute_h _content_get_attirbute_handle(void)
548 return g_attr_handle;
551 attribute_h _content_get_alias_attirbute_handle(void)
553 return g_alias_attr_handle;
556 MediaSvcHandle* _content_get_db_handle(void)
561 int _content_query_prepare(sqlite3_stmt **stmt, char *select_query, char *condition_query, char *option_query)
564 int err = MEDIA_CONTENT_ERROR_NONE;
565 char query[MAX_QUERY_SIZE];
566 memset(query, '\0', sizeof(query));
568 if(db_handle == NULL)
570 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
571 return MEDIA_CONTENT_ERROR_DB_FAILED;
574 if(STRING_VALID(select_query))
576 if(!STRING_VALID(condition_query))
578 condition_query = " ";
581 if(!STRING_VALID(option_query))
586 //query = sqlite3_mprintf("%s %s %s", select_query, condition_query, option_query);
587 len = snprintf(query, sizeof(query), "%s %s %s", select_query, condition_query, option_query);
588 if (len > 0 && len < MAX_QUERY_SIZE) {
590 } else if (len >= MAX_QUERY_SIZE) {
591 query[MAX_QUERY_SIZE -1] = '\0';
593 media_content_error("snprintf failed");
594 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
597 media_content_sec_debug("Query : [%s]", query);
599 err = sqlite3_prepare_v2((sqlite3*)db_handle, query, strlen(query), stmt, NULL);
602 media_content_error("DB_FAILED(0x%08x) fail to sqlite3_prepare(), %s", MEDIA_CONTENT_ERROR_DB_FAILED, sqlite3_errmsg((sqlite3*)db_handle));
604 if (err == SQLITE_BUSY) {
605 media_content_error(" BUSY ERROR");
606 return MEDIA_CONTENT_ERROR_DB_BUSY;
607 } else if (err == SQLITE_PERM) {
608 media_content_error("PERMISSION EROR");
609 return MEDIA_CONTENT_ERROR_PERMISSION_DENIED;
611 media_content_error("OTHER ERROR");
612 return MEDIA_CONTENT_ERROR_DB_FAILED;
618 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
619 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
622 return MEDIA_CONTENT_ERROR_NONE;
625 int _content_error_capi(int type, int content_error)
627 if(content_error != MEDIA_CONTENT_ERROR_NONE)
629 media_content_error("[type : %d] content_error : %d ", type, content_error);
633 if(content_error == MS_MEDIA_ERR_NONE)
634 return MEDIA_CONTENT_ERROR_NONE;
636 /* Internal operation error*/
637 else if((content_error == MS_MEDIA_ERR_INVALID_PARAMETER) ||
638 (content_error == MS_MEDIA_ERR_INVALID_PATH) ||
639 (content_error == MS_MEDIA_ERR_THUMB_DUPLICATED_REQUEST))
640 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
642 else if(content_error == MS_MEDIA_ERR_OUT_OF_MEMORY)
643 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
645 /* DB operation error*/
646 else if(content_error == MS_MEDIA_ERR_DB_BUSY_FAIL)
647 return MEDIA_CONTENT_ERROR_DB_BUSY;
649 else if((content_error <= MS_MEDIA_ERR_DB_CONNECT_FAIL) && (content_error >= MS_MEDIA_ERR_DB_INTERNAL))
650 return MEDIA_CONTENT_ERROR_DB_FAILED;
652 /* IPC operation error*/
653 else if((content_error <= MS_MEDIA_ERR_SOCKET_CONN) && (content_error >= MS_MEDIA_ERR_SOCKET_INTERNAL))
654 return MEDIA_CONTENT_ERROR_NETWORK;
656 /* MEDIA SERVER error*/
657 else if(content_error == MS_MEDIA_ERR_PERMISSION_DENIED)
658 return MEDIA_CONTENT_ERROR_PERMISSION_DENIED;
661 else if(content_error == MS_MEDIA_ERR_THUMB_TOO_BIG)
662 return MEDIA_CONTENT_ERROR_UNSUPPORTED_CONTENT;
665 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
668 int _content_query_sql(char *query_str)
670 int ret = MEDIA_CONTENT_ERROR_NONE;
672 //DB will be updated by Media Server.
673 ret = media_svc_request_update_db(query_str,tzplatform_getuid(TZ_USER_NAME));
675 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
678 int media_content_connect(void)
680 int ret = MEDIA_CONTENT_ERROR_NONE;
682 if (g_mutex_trylock(&db_mutex)) {
683 media_content_info("ref count : %d", ref_count);
687 if(db_handle == NULL)
689 ret = __media_content_create_attribute_handle();
690 if(ret == MEDIA_CONTENT_ERROR_NONE) {
691 ret = media_svc_connect(&db_handle,tzplatform_getuid(TZ_USER_NAME));
692 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
693 if(ret == MEDIA_CONTENT_ERROR_NONE) {
695 //__media_content_create_collate();
697 __media_content_destroy_attribute_handle();
700 media_content_error("Internal DB Connection Error");
703 media_content_error("Wrong DB Connection status");
704 ret = MEDIA_CONTENT_ERROR_DB_FAILED;
707 if(db_handle != NULL) {
710 media_content_error("Wrong DB Handle status");
711 ret = MEDIA_CONTENT_ERROR_DB_FAILED;
715 media_content_info("ref count changed to: %d", ref_count);
716 g_mutex_unlock(&db_mutex);
718 media_content_error("mutex is NULL");
719 ret = MEDIA_CONTENT_ERROR_DB_FAILED;
725 int media_content_disconnect(void)
727 int ret = MEDIA_CONTENT_ERROR_NONE;
729 if (g_mutex_trylock(&db_mutex)) {
730 media_content_debug("ref count : %d", ref_count);
733 if(db_handle != NULL) {
736 media_content_error("Wrong DB Handle status");
737 ret = MEDIA_CONTENT_ERROR_DB_FAILED;
742 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
743 g_mutex_unlock(&db_mutex);
744 return MEDIA_CONTENT_ERROR_DB_FAILED;
749 if(db_handle != NULL)
751 ret = media_svc_disconnect(db_handle);
752 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
753 if(ret == MEDIA_CONTENT_ERROR_NONE) {
754 ret = __media_content_destroy_attribute_handle();
757 media_content_error("database disconnect fail");
761 media_content_error("Wrong DB Handle status");
762 ret = MEDIA_CONTENT_ERROR_DB_FAILED;
765 g_mutex_unlock(&db_mutex);
767 media_content_info("ref count changed to: %d", ref_count);
772 g_mutex_unlock(&db_mutex);
774 media_content_error("mutex is NULL");
775 ret = MEDIA_CONTENT_ERROR_INVALID_OPERATION;
778 media_content_info("ref count changed to: %d", ref_count);
783 int media_content_scan_file(const char *path)
785 int ret = MEDIA_CONTENT_ERROR_NONE;
786 bool ignore_dir = FALSE;
787 char *folder_path = NULL;
788 int check_file = MEDIA_CONTENT_ERROR_NONE;
790 if (!STRING_VALID(path)) {
791 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
792 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
795 media_content_sec_debug("Path : %s", path);
797 check_file = _media_util_check_file(path);
798 if (check_file == MEDIA_CONTENT_ERROR_NONE) {
799 /* This means this path has to be inserted or refreshed */
800 folder_path = g_path_get_dirname(path);
801 ret = _media_util_check_ignore_dir(folder_path, &ignore_dir);
802 SAFE_FREE(folder_path);
805 media_content_error("Invalid folder path");
806 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
809 media_svc_storage_type_e storage_type;
811 ret = media_svc_get_storage_type(path, &storage_type, tzplatform_getuid(TZ_USER_NAME));
812 if(ret != MS_MEDIA_ERR_NONE) {
813 media_content_sec_error("media_svc_get_storage_type failed : %d (%s)", ret, path);
814 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
817 ret = media_svc_check_item_exist_by_path(_content_get_db_handle(), path);
818 if (ret == MS_MEDIA_ERR_NONE) {
820 ret = media_svc_refresh_item(_content_get_db_handle(), storage_type, "media", path,tzplatform_getuid(TZ_USER_NAME));
821 if(ret != MS_MEDIA_ERR_NONE) {
822 media_content_error("media_svc_refresh_item failed : %d", ret);
823 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
826 } else if (ret == MS_MEDIA_ERR_DB_NO_RECORD) {
828 ret = media_svc_insert_item_immediately(_content_get_db_handle(), storage_type, path,tzplatform_getuid(TZ_USER_NAME));
829 if(ret != MS_MEDIA_ERR_NONE) {
830 if (ret == MS_MEDIA_ERR_DB_CONSTRAINT_FAIL) {
831 media_content_sec_error("This item is already inserted. This may be normal operation because other process already did this (%s)", path);
832 ret = MEDIA_CONTENT_ERROR_NONE;
834 media_content_sec_error("media_svc_insert_item_immediately failed : %d (%s)", ret, path);
837 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
840 media_content_error("media_svc_check_item_exist_by_path failed : %d", ret);
841 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
843 } else if (check_file == MEDIA_CONTENT_ERROR_PERMISSION_DENIED) {
844 media_content_error("You have no permission for this file %d", ret);
845 return MEDIA_CONTENT_ERROR_PERMISSION_DENIED;
847 /* This means this path has to be deleted */
848 media_content_debug("This path doesn't exists in file system... So now start to delete it from DB");
849 ret = media_svc_delete_item_by_path(_content_get_db_handle(), "media", path, tzplatform_getuid(TZ_USER_NAME));
850 if(ret != MS_MEDIA_ERR_NONE) {
851 media_content_error("media_svc_delete_item_by_path failed : %d", ret);
852 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
856 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
859 void _media_content_scan_cb(media_request_result_s* result, void *user_data)
862 media_content_scan_cb_data *cb_data = user_data;
864 err = result->result;
866 if (cb_data && cb_data->callback) {
867 media_content_debug("User callback is being called now");
868 cb_data->callback(err, cb_data->user_data);
876 static int __media_content_check_dir(const char *path)
882 media_content_sec_error("path [%s]", path);
883 media_content_stderror("open dir fail");
884 if (errno == EACCES || errno == EPERM) {
885 return MEDIA_CONTENT_ERROR_PERMISSION_DENIED;
887 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
893 return MEDIA_CONTENT_ERROR_NONE;
897 int media_content_scan_folder(const char *path, bool is_recursive, media_scan_completed_cb callback, void *user_data)
899 int ret = MEDIA_CONTENT_ERROR_NONE;
900 bool ignore_dir = FALSE;
902 if (!STRING_VALID(path)) {
903 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
904 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
907 ret = _media_util_check_ignore_dir(path, &ignore_dir);
909 media_content_error("Invalid folder path");
910 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
913 ret = __media_content_check_dir(path);
914 if (ret == MEDIA_CONTENT_ERROR_PERMISSION_DENIED) {
918 media_content_scan_cb_data *cb_data = NULL;
919 cb_data = (media_content_scan_cb_data *)malloc(sizeof(media_content_scan_cb_data));
920 if (cb_data == NULL) {
921 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
922 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
925 cb_data->callback = callback;
926 cb_data->user_data = user_data;
928 ret = media_directory_scanning_async(path, is_recursive, _media_content_scan_cb, cb_data, tzplatform_getuid(TZ_USER_NAME));
929 if(ret != MS_MEDIA_ERR_NONE) {
930 media_content_error("media_directory_scanning_async failed : %d", ret);
933 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
936 int media_content_cancel_scan_folder(const char *path)
938 int ret = MEDIA_CONTENT_ERROR_NONE;
940 //ret = media_directory_scanning_cancel(path);
941 if(ret != MS_MEDIA_ERR_NONE) {
942 media_content_error("media_directory_scanning_async failed : %d", ret);
945 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
948 void _media_content_db_update_noti_cb(
950 media_item_type_e item,
951 media_item_update_type_e update_type,
954 media_type_e content_type,
958 int error_value = MEDIA_CONTENT_ERROR_NONE;
960 media_noti_cb_s *_noti_info = (media_noti_cb_s *)user_data;
962 if(_noti_info != NULL)
964 if (_noti_info->update_noti_cb)
965 _noti_info->update_noti_cb(error_value, pid, item, update_type, content_type, uuid, path, mime_type, _noti_info->user_data);
971 int media_content_set_db_updated_cb(media_content_db_update_cb callback, void *user_data)
973 int ret = MEDIA_CONTENT_ERROR_NONE;
975 if (callback == NULL) {
976 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
977 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
980 if (g_noti_info != NULL) {
981 media_content_error("Noti callback is alreay set");
982 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
985 g_noti_info = (media_noti_cb_s*)calloc(1, sizeof(media_noti_cb_s));
986 if (g_noti_info == NULL) {
987 media_content_error("Failed to create noti info");
988 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
991 g_noti_info->update_noti_cb = callback;
992 g_noti_info->user_data = user_data;
994 ret = media_db_update_subscribe(_media_content_db_update_noti_cb, (void *)g_noti_info);
996 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
999 int media_content_unset_db_updated_cb(void)
1001 int ret = MEDIA_CONTENT_ERROR_NONE;
1003 SAFE_FREE(g_noti_info);
1004 ret = media_db_update_unsubscribe();
1006 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);