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_info_private.h>
19 #include <media-util.h>
22 static attribute_h g_attr_handle = NULL;
23 static attribute_h g_alias_attr_handle = NULL;
24 static MediaSvcHandle *db_handle = NULL;
25 static int ref_count = 0;
26 static GMutex *db_mutex = NULL;
28 static __thread media_noti_cb_s *g_noti_info = NULL;
30 static int __media_content_create_attr_handle(void);
31 static int __media_content_create_alias_attr_handle(void);
32 static int __media_content_create_attribute_handle(void);
33 static int __media_content_destroy_attribute_handle(void);
36 static int __media_content_create_attr_handle(void)
38 int ret = MEDIA_CONTENT_ERROR_NONE;
40 ret = _media_filter_attribute_create(&g_attr_handle);
41 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
44 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ID, DB_FIELD_MEDIA_ID);
45 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
47 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PATH, DB_FIELD_MEDIA_PATH);
48 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
50 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DISPLAY_NAME, DB_FIELD_MEDIA_DISPLAY_NAME);
51 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
53 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TYPE, DB_FIELD_MEDIA_TYPE);
54 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
56 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MIME_TYPE, DB_FIELD_MEDIA_MIME_TYPE);
57 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
59 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_SIZE, DB_FIELD_MEDIA_SIZE);
60 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
62 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ADDED_TIME, DB_FIELD_MEDIA_ADDED_TIME);
63 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
65 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_MODIFIED_TIME, DB_FIELD_MEDIA_MODIFIED_TIME);
66 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
68 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TIMELINE, DB_FIELD_MEDIA_TIMELINE);
69 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
71 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_THUMBNAIL_PATH, DB_FIELD_MEDIA_THUMBNAIL_PATH);
72 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
74 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TITLE, DB_FIELD_MEDIA_TITLE);
75 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
77 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM, DB_FIELD_MEDIA_ALBUM);
78 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
80 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ARTIST, DB_FIELD_MEDIA_ARTIST);
81 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
83 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM_ARTIST, DB_FIELD_MEDIA_ALBUM_ARTIST);
84 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
86 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_GENRE, DB_FIELD_MEDIA_GENRE);
87 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
89 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COMPOSER, DB_FIELD_MEDIA_COMPOSER);
90 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
92 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_YEAR, DB_FIELD_MEDIA_YEAR);
93 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
95 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_RECORDED_DATE, DB_FIELD_MEDIA_RECORDED_DATE);
96 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
98 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COPYRIGHT, DB_FIELD_MEDIA_COPYRIGHT);
99 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
101 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TRACK_NUM, DB_FIELD_MEDIA_TRACK_NUM);
102 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
104 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DESCRIPTION, DB_FIELD_MEDIA_DESCRIPTION);
105 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
107 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BITRATE, DB_FIELD_MEDIA_BITRATE);
108 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
110 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BITPERSAMPLE, DB_FIELD_MEDIA_BITPERSAMPLE);
111 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
113 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_SAMPLERATE, DB_FIELD_MEDIA_SAMPLERATE);
114 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
116 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CHANNEL, DB_FIELD_MEDIA_CHANNEL);
117 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
119 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DURATION, DB_FIELD_MEDIA_DURATION);
120 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
122 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LONGITUDE, DB_FIELD_MEDIA_LONGITUDE);
123 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
125 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LATITUDE, DB_FIELD_MEDIA_LATITUDE);
126 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
128 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALTITUDE, DB_FIELD_MEDIA_ALTITUDE);
129 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
131 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_WIDTH, DB_FIELD_MEDIA_WIDTH);
132 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
134 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_HEIGHT, DB_FIELD_MEDIA_HEIGHT);
135 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
137 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DATETAKEN, DB_FIELD_MEDIA_DATETAKEN);
138 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
140 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ORIENTATION, DB_FIELD_MEDIA_ORIENTATION);
141 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
143 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_BURST_ID, DB_FIELD_MEDIA_BURST_ID);
144 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
146 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PLAYED_COUNT, DB_FIELD_MEDIA_PLAYED_COUNT);
147 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
149 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LAST_PLAYED_TIME, DB_FIELD_MEDIA_LAST_PLAYED_TIME);
150 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
152 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LAST_PLAYED_POSITION, DB_FIELD_MEDIA_LAST_PLAYED_POSITION);
153 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
155 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_RATING, DB_FIELD_MEDIA_RATING);
156 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
158 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_FAVOURITE, DB_FIELD_MEDIA_FAVOURITE);
159 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
161 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AUTHOR, DB_FIELD_MEDIA_AUTHOR);
162 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
164 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PROVIDER, DB_FIELD_MEDIA_PROVIDER);
165 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
167 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CONTENT_NAME, DB_FIELD_MEDIA_CONTENT_NAME);
168 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
170 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CATEGORY, DB_FIELD_MEDIA_CATEGORY);
171 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
173 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LOCATION_TAG, DB_FIELD_MEDIA_LOCATION_TAG);
174 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
176 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AGE_RATING, DB_FIELD_MEDIA_AGE_RATING);
177 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
179 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_KEYWORD, DB_FIELD_MEDIA_KEYWORD);
180 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
182 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_WEATHER, DB_FIELD_MEDIA_WEATHER);
183 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
185 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_IS_DRM, DB_FIELD_MEDIA_IS_DRM);
186 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
188 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_STORAGE_TYPE, DB_FIELD_MEDIA_STORAGE_TYPE);
189 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
192 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_FILE_NAME_PINYIN, DB_FIELD_MEDIA_FILE_NAME_PINYIN);
193 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
195 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_TITLE_PINYIN, DB_FIELD_MEDIA_TITLE_PINYIN);
196 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
198 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM_PINYIN, DB_FIELD_MEDIA_ALBUM_PINYIN);
199 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
201 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ARTIST_PINYIN, DB_FIELD_MEDIA_ARTIST_PINYIN);
202 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
204 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_ALBUM_ARTIST_PINYIN, DB_FIELD_MEDIA_ALBUM_ARTIST_PINYIN);
205 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
207 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_GENRE_PINYIN, DB_FIELD_MEDIA_GENRE_PINYIN);
208 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
210 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COMPOSER_PINYIN, DB_FIELD_MEDIA_COMPOSER_PINYIN);
211 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
213 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_COPYRIGHT_PINYIN, DB_FIELD_MEDIA_COPYRIGHT_PINYIN);
214 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
216 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_DESCRIPTION_PINYIN, DB_FIELD_MEDIA_DESCRIPTION_PINYIN);
217 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
219 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AUTHOR_PINYIN, DB_FIELD_MEDIA_AUTHOR_PINYIN);
220 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
222 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_PROVIDER_PINYIN, DB_FIELD_MEDIA_PROVIDER_PINYIN);
223 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
225 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CONTENT_NAME_PINYIN, DB_FIELD_MEDIA_CONTENT_NAME_PINYIN);
226 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
228 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_CATEGORY_PINYIN, DB_FIELD_MEDIA_CATEGORY_PINYIN);
229 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
231 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_LOCATION_TAG_PINYIN, DB_FIELD_MEDIA_LOCATION_TAG_PINYIN);
232 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
234 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_AGE_RATING_PINYIN, DB_FIELD_MEDIA_AGE_RATING_PINYIN);
235 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
237 ret = _media_filter_attribute_add(g_attr_handle, MEDIA_KEYWORD_PINYIN, DB_FIELD_MEDIA_KEYWORD_PINYIN);
238 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
241 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_NAME, DB_FIELD_PLAYLIST_NAME);
242 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
244 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_MEMBER_ORDER, DB_FIELD_PLAYLIST_MEMBER_ORDER);
245 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
248 ret = _media_filter_attribute_add(g_attr_handle, PLAYLIST_MEDIA_COUNT, DB_FIELD_PLAYLIST_MEDIA_COUNT);
249 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
252 ret = _media_filter_attribute_add(g_attr_handle, TAG_NAME, DB_FIELD_TAG_NAME);
253 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
256 ret = _media_filter_attribute_add(g_attr_handle, TAG_MEDIA_COUNT, DB_FIELD_TAG_MEDIA_COUNT);
257 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
260 ret = _media_filter_attribute_add(g_attr_handle, BOOKMARK_MARKED_TIME, DB_FIELD_BOOKMARK_MARKED_TIME);
261 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
266 static int __media_content_create_alias_attr_handle(void)
268 int ret = MEDIA_CONTENT_ERROR_NONE;
270 ret = _media_filter_attribute_create(&g_alias_attr_handle);
271 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
274 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ID, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ID);
275 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
277 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PATH);
278 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
280 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DISPLAY_NAME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DISPLAY_NAME);
281 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
283 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TYPE);
284 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
286 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MIME_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MIME_TYPE);
287 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
289 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SIZE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SIZE);
290 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
292 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ADDED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ADDED_TIME);
293 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
295 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_MODIFIED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_MODIFIED_TIME);
296 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
298 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TIMELINE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TIMELINE);
299 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
301 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_THUMBNAIL_PATH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_THUMBNAIL_PATH);
302 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
304 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TITLE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TITLE);
305 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
307 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM);
308 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
310 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ARTIST, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ARTIST);
311 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
313 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM_ARTIST, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM_ARTIST);
314 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
316 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_GENRE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_GENRE);
317 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
319 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COMPOSER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COMPOSER);
320 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
322 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_YEAR, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_YEAR);
323 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
325 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_RECORDED_DATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_RECORDED_DATE);
326 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
328 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COPYRIGHT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COPYRIGHT);
329 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
331 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TRACK_NUM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TRACK_NUM);
332 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
334 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DESCRIPTION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DESCRIPTION);
335 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
337 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BITRATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BITRATE);
338 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
340 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BITPERSAMPLE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BITPERSAMPLE);
341 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
343 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_SAMPLERATE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_SAMPLERATE);
344 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
346 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CHANNEL, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CHANNEL);
347 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
349 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DURATION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DURATION);
350 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
352 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LONGITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LONGITUDE);
353 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
355 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LATITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LATITUDE);
356 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
358 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALTITUDE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALTITUDE);
359 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
361 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_WIDTH, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_WIDTH);
362 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
364 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_HEIGHT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_HEIGHT);
365 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
367 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DATETAKEN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DATETAKEN);
368 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
370 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ORIENTATION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ORIENTATION);
371 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
373 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_BURST_ID, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_BURST_ID);
374 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
376 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PLAYED_COUNT, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PLAYED_COUNT);
377 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
379 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LAST_PLAYED_TIME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LAST_PLAYED_TIME);
380 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
382 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LAST_PLAYED_POSITION, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LAST_PLAYED_POSITION);
383 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
385 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_RATING);
386 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
388 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_FAVOURITE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_FAVOURITE);
389 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
391 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AUTHOR, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AUTHOR);
392 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
394 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PROVIDER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PROVIDER);
395 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
397 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CONTENT_NAME, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CONTENT_NAME);
398 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
400 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CATEGORY, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CATEGORY);
401 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
403 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LOCATION_TAG, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LOCATION_TAG);
404 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
406 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AGE_RATING, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AGE_RATING);
407 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
409 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_KEYWORD, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_KEYWORD);
410 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
412 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_WEATHER, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_WEATHER);
413 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
415 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_IS_DRM, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_IS_DRM);
416 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
418 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_STORAGE_TYPE, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_STORAGE_TYPE);
419 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
422 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_FILE_NAME_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_FILE_NAME_PINYIN);
423 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
425 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_TITLE_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_TITLE_PINYIN);
426 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
428 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM_PINYIN);
429 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
431 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ARTIST_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ARTIST_PINYIN);
432 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
434 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_ALBUM_ARTIST_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_ALBUM_ARTIST_PINYIN);
435 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
437 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_GENRE_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_GENRE_PINYIN);
438 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
440 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COMPOSER_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COMPOSER_PINYIN);
441 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
443 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_COPYRIGHT_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_COPYRIGHT_PINYIN);
444 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
446 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_DESCRIPTION_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_DESCRIPTION_PINYIN);
447 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
449 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AUTHOR_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AUTHOR_PINYIN);
450 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
452 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_PROVIDER_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_PROVIDER_PINYIN);
453 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
455 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CONTENT_NAME_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CONTENT_NAME_PINYIN);
456 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
458 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_CATEGORY_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_CATEGORY_PINYIN);
459 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
461 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_LOCATION_TAG_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_LOCATION_TAG_PINYIN);
462 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
464 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_AGE_RATING_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_AGE_RATING_PINYIN);
465 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
467 ret = _media_filter_attribute_add(g_alias_attr_handle, MEDIA_KEYWORD_PINYIN, DB_TABLE_ALIAS_MEDIA"."DB_FIELD_MEDIA_KEYWORD_PINYIN);
468 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
471 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_ID, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_ID);
472 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
474 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_PATH, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_PATH);
475 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
477 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_NAME, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_NAME);
478 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
480 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_MODIFIED_TIME, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_MODIFIED_TIME);
481 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
483 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_STORAGE_TYPE, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_STORAGE_TYPE);
484 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
486 ret = _media_filter_attribute_add(g_alias_attr_handle, FOLDER_NAME_PINYIN, DB_TABLE_ALIAS_FOLDER"."DB_FIELD_FOLDER_NAME_PINYIN);
487 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
490 ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_NAME, DB_TABLE_ALIAS_PLAYLIST"."DB_FIELD_PLAYLIST_NAME);
491 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
493 ret = _media_filter_attribute_add(g_alias_attr_handle, PLAYLIST_MEMBER_ORDER, DB_TABLE_ALIAS_PLAYLIST_MAP"."DB_FIELD_PLAYLIST_MEMBER_ORDER);
494 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
497 ret = _media_filter_attribute_add(g_alias_attr_handle, TAG_NAME, DB_TABLE_ALIAS_TAG"."DB_FIELD_TAG_NAME);
498 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
501 ret = _media_filter_attribute_add(g_alias_attr_handle, BOOKMARK_MARKED_TIME, DB_TABLE_ALIAS_BOOKMARK"."DB_FIELD_BOOKMARK_MARKED_TIME);
502 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
507 static int __media_content_create_attribute_handle(void)
509 int ret = MEDIA_CONTENT_ERROR_NONE;
511 ret = __media_content_create_attr_handle();
512 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
514 ret = __media_content_create_alias_attr_handle();
519 static int __media_content_destroy_attribute_handle(void)
521 int ret = MEDIA_CONTENT_ERROR_NONE;
523 ret = _media_filter_attribute_destory(g_attr_handle);
524 ret = _media_filter_attribute_destory(g_alias_attr_handle);
526 g_attr_handle = NULL;
527 g_alias_attr_handle = NULL;
532 attribute_h _content_get_attirbute_handle(void)
534 return g_attr_handle;
537 attribute_h _content_get_alias_attirbute_handle(void)
539 return g_alias_attr_handle;
542 MediaSvcHandle* _content_get_db_handle(void)
547 int _content_query_prepare(sqlite3_stmt **stmt, char *select_query, char *condition_query, char *option_query)
550 int err = MEDIA_CONTENT_ERROR_NONE;
551 char query[MAX_QUERY_SIZE];
552 memset(query, '\0', sizeof(query));
554 if(db_handle == NULL)
556 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
557 return MEDIA_CONTENT_ERROR_DB_FAILED;
560 if(STRING_VALID(select_query))
562 if(!STRING_VALID(condition_query))
564 condition_query = " ";
567 if(!STRING_VALID(option_query))
572 //query = sqlite3_mprintf("%s %s %s", select_query, condition_query, option_query);
573 len = snprintf(query, sizeof(query), "%s %s %s", select_query, condition_query, option_query);
577 media_content_error("snprintf failed");
578 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
581 media_content_info("Query : [%s]", query);
583 err = sqlite3_prepare_v2((sqlite3*)db_handle, query, strlen(query), stmt, NULL);
586 media_content_error("DB_FAILED(0x%08x) fail to sqlite3_prepare(), %s", MEDIA_CONTENT_ERROR_DB_FAILED, sqlite3_errmsg((sqlite3*)db_handle));
588 if (err == SQLITE_BUSY)
589 return MEDIA_CONTENT_ERROR_DB_BUSY;
591 return MEDIA_CONTENT_ERROR_DB_FAILED;
596 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
597 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
600 return MEDIA_CONTENT_ERROR_NONE;
603 int _content_error_capi(int type, int content_error)
605 if(content_error != MEDIA_CONTENT_ERROR_NONE)
607 media_content_error("[type : %d] content_error : %d ", type, content_error);
611 if(content_error == MS_MEDIA_ERR_NONE)
612 return MEDIA_CONTENT_ERROR_NONE;
614 /* Internal operation error*/
615 else if((content_error == MS_MEDIA_ERR_INVALID_PARAMETER) ||
616 (content_error == MS_MEDIA_ERR_INVALID_PATH) ||
617 (content_error == MS_MEDIA_ERR_THUMB_DUPLICATED_REQUEST))
618 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
620 else if(content_error == MS_MEDIA_ERR_OUT_OF_MEMORY)
621 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
623 /* DB operation error*/
624 else if(content_error == MS_MEDIA_ERR_DB_BUSY_FAIL)
625 return MEDIA_CONTENT_ERROR_DB_BUSY;
627 else if((content_error <= MS_MEDIA_ERR_DB_CONNECT_FAIL) && (content_error >= MS_MEDIA_ERR_DB_INTERNAL))
628 return MEDIA_CONTENT_ERROR_DB_FAILED;
630 /* IPC operation error*/
631 else if((content_error <= MS_MEDIA_ERR_SOCKET_CONN) && (content_error >= MS_MEDIA_ERR_SOCKET_INTERNAL))
632 return MEDIA_CONTENT_ERROR_NETWORK;
634 /* MEDIA SERVER error*/
635 else if(content_error == MS_MEDIA_ERR_PERMISSION_DENIED)
636 return MEDIA_CONTENT_ERROR_PERMISSION_DENIED;
639 else if(content_error == MS_MEDIA_ERR_THUMB_TOO_BIG)
640 return MEDIA_CONTENT_ERROR_UNSUPPORTED_CONTENT;
643 return MEDIA_CONTENT_ERROR_INVALID_OPERATION;
646 int _content_query_sql(char *query_str)
648 int ret = MEDIA_CONTENT_ERROR_NONE;
650 //DB will be updated by Media Server.
651 ret = media_svc_request_update_db(query_str,tzplatform_getuid(TZ_USER_NAME));
653 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
656 int media_content_connect(void)
658 int ret = MEDIA_CONTENT_ERROR_NONE;
661 db_mutex = g_mutex_new();
663 if (db_mutex != NULL) {
664 g_mutex_lock(db_mutex);
666 media_content_debug("ref count : %d", ref_count);
670 if(db_handle == NULL)
672 ret = media_svc_connect(&db_handle,tzplatform_getuid(TZ_USER_NAME));
675 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
677 if(ret == MEDIA_CONTENT_ERROR_NONE) {
678 ret = __media_content_create_attribute_handle();
683 g_mutex_unlock(db_mutex);
685 media_content_error("mutex is NULL");
691 int media_content_disconnect(void)
693 int ret = MEDIA_CONTENT_ERROR_NONE;
695 if (db_mutex != NULL) {
696 g_mutex_lock(db_mutex);
698 media_content_debug("ref count : %d", ref_count);
705 media_content_error("DB_FAILED(0x%08x) database is not connected", MEDIA_CONTENT_ERROR_DB_FAILED);
706 g_mutex_unlock(db_mutex);
707 return MEDIA_CONTENT_ERROR_DB_FAILED;
712 if(db_handle != NULL)
714 ret = media_svc_disconnect(db_handle);
715 ret = _content_error_capi(MEDIA_CONTENT_TYPE, ret);
716 if(ret == MEDIA_CONTENT_ERROR_NONE) {
717 ret = __media_content_destroy_attribute_handle();
722 g_mutex_unlock(db_mutex);
723 g_mutex_free(db_mutex);
729 g_mutex_unlock(db_mutex);
731 media_content_error("mutex is NULL");
737 int media_content_scan_file(const char *path)
739 int ret = MEDIA_CONTENT_ERROR_NONE;
741 if (!STRING_VALID(path)) {
742 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
743 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
746 media_content_debug("Path : %s", path);
748 if (g_file_test(path, G_FILE_TEST_EXISTS)) {
749 if (g_file_test(path, G_FILE_TEST_IS_REGULAR)) {
750 /* This means this path has to be inserted or refreshed */
751 media_content_debug("This path exists in file system.");
753 media_svc_storage_type_e storage_type;
755 ret = media_svc_get_storage_type(path, &storage_type);
757 media_content_error("media_svc_get_storage_type failed : %d (%s)", ret, path);
758 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
761 ret = media_svc_check_item_exist_by_path(_content_get_db_handle(), path);
762 if (ret == MS_MEDIA_ERR_NONE) {
764 ret = media_svc_refresh_item(_content_get_db_handle(), storage_type, path, tzplatform_getuid(TZ_USER_NAME));
766 media_content_error("media_svc_refresh_item failed : %d", ret);
767 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
770 } else if (ret == MS_MEDIA_ERR_DB_NO_RECORD) {
772 ret = media_svc_insert_item_immediately(_content_get_db_handle(), storage_type, path, tzplatform_getuid(TZ_USER_NAME));
774 media_content_error("media_svc_insert_item_immediately failed : %d", ret);
775 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
778 media_content_error("media_svc_check_item_exist_by_path failed : %d", ret);
779 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
781 } else if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
782 /* Dierectory is not accpted in this function */
783 media_content_error("This path is directory");
784 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
787 /* This means this path has to be deleted */
788 media_content_debug("This path doesn't exists in file system... So now start to delete it from DB");
789 ret = media_svc_delete_item_by_path(_content_get_db_handle(), path, tzplatform_getuid(TZ_USER_NAME));
791 media_content_error("media_svc_delete_item_by_path failed : %d", ret);
792 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
796 return _content_error_capi(MEDIA_CONTENT_TYPE, ret);
799 void _media_content_scan_cb(media_request_result_s* result, void *user_data)
802 media_content_scan_cb_data *cb_data = user_data;
804 err = result->result;
806 if (cb_data && cb_data->callback) {
807 media_content_debug("User callback is being called now");
808 cb_data->callback(err, cb_data->user_data);
816 static int __media_content_check_dir(const char *path)
822 media_content_error("error [%s, %s]", path, strerror(errno));
823 if (errno == EACCES || errno == EPERM) {
824 return MEDIA_CONTENT_ERROR_PERMISSION_DENIED;
826 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
832 return MEDIA_CONTENT_ERROR_NONE;
835 int media_content_scan_folder(const char *path, bool is_recursive, media_scan_completed_cb callback, void *user_data)
837 int ret = MEDIA_CONTENT_ERROR_NONE;
838 bool ignore_dir = FALSE;
840 if (!STRING_VALID(path)) {
841 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
842 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
845 ret = _media_util_check_ignore_dir(path, &ignore_dir);
847 media_content_error("Invalid folder path");
848 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
851 ret = __media_content_check_dir(path);
852 if (ret == MEDIA_CONTENT_ERROR_PERMISSION_DENIED) {
855 media_content_scan_cb_data *cb_data = NULL;
856 cb_data = (media_content_scan_cb_data *)malloc(sizeof(media_content_scan_cb_data));
857 if (cb_data == NULL) {
858 media_content_error("malloc failed");
859 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
862 cb_data->callback = callback;
863 cb_data->user_data = user_data;
865 ret = media_directory_scanning_async(path, is_recursive, _media_content_scan_cb, cb_data, tzplatform_getuid(TZ_USER_NAME));
867 media_content_error("media_directory_scanning_async failed : %d", ret);
870 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
873 void _media_content_db_update_noti_cb(
875 media_item_type_e item,
876 media_item_update_type_e update_type,
879 media_type_e content_type,
883 int error_value = MEDIA_CONTENT_ERROR_NONE;
885 media_noti_cb_s *_noti_info = (media_noti_cb_s *)user_data;
887 if(_noti_info != NULL)
889 if (_noti_info->update_noti_cb)
890 _noti_info->update_noti_cb(error_value, pid, item, update_type, content_type, uuid, path, mime_type, _noti_info->user_data);
896 int media_content_set_db_updated_cb(media_content_db_update_cb callback, void *user_data)
898 int ret = MEDIA_CONTENT_ERROR_NONE;
900 g_noti_info = (media_noti_cb_s*)calloc(1, sizeof(media_noti_cb_s));
901 if (g_noti_info == NULL) {
902 media_content_error("Failed to create noti info");
903 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
906 g_noti_info->update_noti_cb = callback;
907 g_noti_info->user_data = user_data;
909 ret = media_db_update_subscribe(_media_content_db_update_noti_cb, (void *)g_noti_info);
911 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);
914 int media_content_unset_db_updated_cb()
916 int ret = MEDIA_CONTENT_ERROR_NONE;
918 SAFE_FREE(g_noti_info);
919 ret = media_db_update_unsubscribe();
921 return _content_error_capi(MEDIA_REGISTER_TYPE, ret);