4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Hyunjun Ko <zzoon.ko@samsung.com>, Haejeong Kim <backto.kim@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
25 #include <media-thumbnail.h>
26 #include "media-svc.h"
27 #include "media-svc-util.h"
29 #define MEDIA_SVC_PLUGIN_ERROR_NONE 0
30 #define MEDIA_SVC_PLUGIN_ERROR -1
32 #define STRING_VALID(str) \
33 ((str != NULL && strlen(str) > 0) ? TRUE : FALSE)
34 #define STORAGE_VALID(storage)\
35 (((storage == MEDIA_SVC_STORAGE_INTERNAL) || (storage == MEDIA_SVC_STORAGE_EXTERNAL) || (storage == MEDIA_SVC_STORAGE_EXTERNAL_USB)) ? TRUE : FALSE)
47 } media_svc_error_type_e;
49 static void __set_error_message(int err_type, char **err_msg);
51 static void __set_error_message(int err_type, char **err_msg)
58 if (err_type == ERR_HANDLE)
59 *err_msg = strdup("invalid handle");
60 else if (err_type == ERR_FILE_PATH)
61 *err_msg = strdup("invalid file path");
62 else if (err_type == ERR_FOLDER_PATH)
63 *err_msg = strdup("invalid folder path");
64 else if (err_type == ERR_MIME_TYPE)
65 *err_msg = strdup("invalid mime type");
66 else if (err_type == ERR_NOT_MEDIAFILE)
67 *err_msg = strdup("not media content");
68 else if (err_type == ERR_STORAGE_TYPE)
69 *err_msg = strdup("invalid storage type");
70 else if (err_type == ERR_CHECK_ITEM)
71 *err_msg = strdup("item does not exist");
72 else if (err_type == MS_MEDIA_ERR_DB_CONNECT_FAIL)
73 *err_msg = strdup("DB connect error");
74 else if (err_type == MS_MEDIA_ERR_DB_DISCONNECT_FAIL)
75 *err_msg = strdup("DB disconnect error");
76 else if (err_type == MS_MEDIA_ERR_INVALID_PARAMETER)
77 *err_msg = strdup("invalid parameter");
78 else if (err_type == MS_MEDIA_ERR_DB_INTERNAL)
79 *err_msg = strdup("DB internal error");
80 else if (err_type == MS_MEDIA_ERR_DB_NO_RECORD)
81 *err_msg = strdup("not found in DB");
82 else if (err_type == MS_MEDIA_ERR_INTERNAL)
83 *err_msg = strdup("media service internal error");
84 else if (err_type == MS_MEDIA_ERR_DB_CORRUPT)
85 *err_msg = strdup("DB corrupt error");
87 *err_msg = strdup("error unknown");
92 int connect_db(void **handle, uid_t uid, char **err_msg)
94 int ret = media_svc_connect(handle, uid, true);
97 __set_error_message(ret, err_msg);
98 return MEDIA_SVC_PLUGIN_ERROR;
101 return MEDIA_SVC_PLUGIN_ERROR_NONE;
104 int disconnect_db(void *handle, char **err_msg)
106 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
108 if (handle == NULL) {
109 __set_error_message(ERR_HANDLE, err_msg);
110 return MEDIA_SVC_PLUGIN_ERROR;
113 ret = media_svc_disconnect(handle);
115 __set_error_message(ret, err_msg);
116 return MEDIA_SVC_PLUGIN_ERROR;
119 return MEDIA_SVC_PLUGIN_ERROR_NONE;
122 int check_item_exist(void *handle, const char *storage_id, const char *file_path, bool *modified, char **err_msg)
124 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
127 if (handle == NULL) {
128 __set_error_message(ERR_HANDLE, err_msg);
129 return MEDIA_SVC_PLUGIN_ERROR;
132 if (!STRING_VALID(file_path)) {
133 __set_error_message(ERR_FILE_PATH, err_msg);
134 return MEDIA_SVC_PLUGIN_ERROR;
137 time_t modified_time = 0;
138 unsigned long long file_size = 0;
141 ret = media_svc_get_file_info(handle, storage_id, file_path, &modified_time, &file_size);
142 if (ret == MS_MEDIA_ERR_NONE) {
143 memset(&st, 0, sizeof(struct stat));
144 if (stat(file_path, &st) == 0) {
145 if ((st.st_mtime != modified_time) || (st.st_size != file_size))
151 return MEDIA_SVC_PLUGIN_ERROR_NONE; /*exist */
154 __set_error_message(ERR_CHECK_ITEM, err_msg);
156 return MEDIA_SVC_PLUGIN_ERROR; /*not exist */
159 int insert_item_begin(void *handle, int item_cnt, int with_noti, int from_pid, char **err_msg)
161 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
163 if (handle == NULL) {
164 __set_error_message(ERR_HANDLE, err_msg);
165 return MEDIA_SVC_PLUGIN_ERROR;
168 ret = media_svc_insert_item_begin(handle, item_cnt, with_noti, from_pid);
170 __set_error_message(ret, err_msg);
171 return MEDIA_SVC_PLUGIN_ERROR;
174 return MEDIA_SVC_PLUGIN_ERROR_NONE;
177 int insert_item_end(void *handle, uid_t uid, char **err_msg)
179 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
181 if (handle == NULL) {
182 __set_error_message(ERR_HANDLE, err_msg);
183 return MEDIA_SVC_PLUGIN_ERROR;
186 ret = media_svc_insert_item_end(handle, uid);
188 __set_error_message(ret, err_msg);
189 return MEDIA_SVC_PLUGIN_ERROR;
192 return MEDIA_SVC_PLUGIN_ERROR_NONE;
195 int insert_item(void *handle, const char *storage_id, const char *file_path, int storage_type, uid_t uid, char **err_msg)
197 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
199 if (handle == NULL) {
200 __set_error_message(ERR_HANDLE, err_msg);
201 return MEDIA_SVC_PLUGIN_ERROR;
204 if (!STRING_VALID(file_path)) {
205 __set_error_message(ERR_FILE_PATH, err_msg);
206 return MEDIA_SVC_PLUGIN_ERROR;
209 if (!STORAGE_VALID(storage_type)) {
210 __set_error_message(ERR_STORAGE_TYPE, err_msg);
211 return MEDIA_SVC_PLUGIN_ERROR;
214 ret = media_svc_insert_item_bulk(handle, storage_id, storage_type, file_path, FALSE, uid);
216 __set_error_message(ret, err_msg);
217 return MEDIA_SVC_PLUGIN_ERROR;
220 return MEDIA_SVC_PLUGIN_ERROR_NONE;
223 int insert_item_immediately(void *handle, const char *storage_id, const char *file_path, int storage_type, uid_t uid, char **err_msg)
225 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
227 if (handle == NULL) {
228 __set_error_message(ERR_HANDLE, err_msg);
229 return MEDIA_SVC_PLUGIN_ERROR;
232 if (!STRING_VALID(file_path)) {
233 __set_error_message(ERR_FILE_PATH, err_msg);
234 return MEDIA_SVC_PLUGIN_ERROR;
237 if (!STORAGE_VALID(storage_type)) {
238 __set_error_message(ERR_STORAGE_TYPE, err_msg);
239 return MEDIA_SVC_PLUGIN_ERROR;
242 ret = media_svc_insert_item_immediately(handle, storage_id, storage_type, file_path, uid);
244 __set_error_message(ret, err_msg);
245 return MEDIA_SVC_PLUGIN_ERROR;
248 return MEDIA_SVC_PLUGIN_ERROR_NONE;
251 int insert_burst_item(void *handle, const char *storage_id, const char *file_path, int storage_type, uid_t uid, char **err_msg)
253 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
255 if (handle == NULL) {
256 __set_error_message(ERR_HANDLE, err_msg);
257 return MEDIA_SVC_PLUGIN_ERROR;
260 if (!STRING_VALID(file_path)) {
261 __set_error_message(ERR_FILE_PATH, err_msg);
262 return MEDIA_SVC_PLUGIN_ERROR;
265 if (!STORAGE_VALID(storage_type)) {
266 __set_error_message(ERR_STORAGE_TYPE, err_msg);
267 return MEDIA_SVC_PLUGIN_ERROR;
270 ret = media_svc_insert_item_bulk(handle, storage_id, storage_type, file_path, TRUE, uid);
272 __set_error_message(ret, err_msg);
273 return MEDIA_SVC_PLUGIN_ERROR;
276 return MEDIA_SVC_PLUGIN_ERROR_NONE;
279 int set_all_storage_items_validity(void *handle, const char *storage_id, int storage_type, int validity, uid_t uid, char **err_msg)
281 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
283 if (handle == NULL) {
284 __set_error_message(ERR_HANDLE, err_msg);
285 return MEDIA_SVC_PLUGIN_ERROR;
288 if (!STORAGE_VALID(storage_type)) {
289 __set_error_message(ERR_STORAGE_TYPE, err_msg);
290 return MEDIA_SVC_PLUGIN_ERROR;
293 ret = media_svc_set_all_storage_items_validity(handle, storage_id, storage_type, validity, uid);
295 __set_error_message(ret, err_msg);
296 return MEDIA_SVC_PLUGIN_ERROR;
299 return MEDIA_SVC_PLUGIN_ERROR_NONE;
302 int set_folder_item_validity(void *handle, const char *storage_id, const char *folder_path, int validity, int recursive, uid_t uid, char **err_msg)
304 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
306 if (handle == NULL) {
307 __set_error_message(ERR_HANDLE, err_msg);
308 return MEDIA_SVC_PLUGIN_ERROR;
311 if (!STRING_VALID(folder_path)) {
312 __set_error_message(ERR_FOLDER_PATH, err_msg);
313 return MEDIA_SVC_PLUGIN_ERROR;
316 ret = media_svc_set_folder_items_validity(handle, storage_id, folder_path, validity, recursive, uid);
318 __set_error_message(ret, err_msg);
319 return MEDIA_SVC_PLUGIN_ERROR;
322 return MEDIA_SVC_PLUGIN_ERROR_NONE;
325 int set_item_validity_begin(void *handle, int item_cnt, char **err_msg)
327 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
329 if (handle == NULL) {
330 __set_error_message(ERR_HANDLE, err_msg);
331 return MEDIA_SVC_PLUGIN_ERROR;
334 ret = media_svc_set_item_validity_begin(handle, item_cnt);
336 __set_error_message(ret, err_msg);
337 return MEDIA_SVC_PLUGIN_ERROR;
340 return MEDIA_SVC_PLUGIN_ERROR_NONE;
343 int set_item_validity_end(void *handle, uid_t uid, char **err_msg)
345 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
347 if (handle == NULL) {
348 __set_error_message(ERR_HANDLE, err_msg);
349 return MEDIA_SVC_PLUGIN_ERROR;
352 ret = media_svc_set_item_validity_end(handle, uid);
354 __set_error_message(ret, err_msg);
355 return MEDIA_SVC_PLUGIN_ERROR;
358 return MEDIA_SVC_PLUGIN_ERROR_NONE;
361 int set_item_validity(void *handle, const char *storage_id, const char *file_path, int storage_type, int validity, uid_t uid, char **err_msg)
363 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
365 if (handle == NULL) {
366 __set_error_message(ERR_HANDLE, err_msg);
367 return MEDIA_SVC_PLUGIN_ERROR;
370 if (!STRING_VALID(file_path)) {
371 __set_error_message(ERR_FILE_PATH, err_msg);
372 return MEDIA_SVC_PLUGIN_ERROR;
375 ret = media_svc_set_item_validity(handle, storage_id, file_path, validity, uid);
378 __set_error_message(ret, err_msg);
379 return MEDIA_SVC_PLUGIN_ERROR;
382 return MEDIA_SVC_PLUGIN_ERROR_NONE;
385 int delete_item(void *handle, const char *storage_id, const char *file_path, uid_t uid, char **err_msg)
387 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
389 if (handle == NULL) {
390 __set_error_message(ERR_HANDLE, err_msg);
391 return MEDIA_SVC_PLUGIN_ERROR;
394 if (!STRING_VALID(file_path)) {
395 __set_error_message(ERR_FILE_PATH, err_msg);
396 return MEDIA_SVC_PLUGIN_ERROR;
399 ret = media_svc_check_item_exist_by_path(handle, storage_id, file_path);
401 ret = media_svc_delete_item_by_path(handle, storage_id, file_path, uid);
404 __set_error_message(ret, err_msg);
405 return MEDIA_SVC_PLUGIN_ERROR;
407 return MEDIA_SVC_PLUGIN_ERROR_NONE;
410 __set_error_message(ERR_CHECK_ITEM, err_msg); /*not exist in DB so can't delete item. */
411 return MEDIA_SVC_PLUGIN_ERROR;
414 int delete_all_items_in_storage(void *handle, const char *storage_id, int storage_type, uid_t uid, char **err_msg)
416 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
418 if (handle == NULL) {
419 __set_error_message(ERR_HANDLE, err_msg);
420 return MEDIA_SVC_PLUGIN_ERROR;
423 if (!STORAGE_VALID(storage_type)) {
424 __set_error_message(ERR_STORAGE_TYPE, err_msg);
425 return MEDIA_SVC_PLUGIN_ERROR;
428 ret = media_svc_delete_all_items_in_storage(handle, storage_id, storage_type, uid);
430 __set_error_message(ret, err_msg);
431 return MEDIA_SVC_PLUGIN_ERROR;
434 return MEDIA_SVC_PLUGIN_ERROR_NONE;
437 int delete_all_invalid_items_in_storage(void *handle, const char *storage_id, int storage_type, uid_t uid, char **err_msg)
439 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
441 if (handle == NULL) {
442 __set_error_message(ERR_HANDLE, err_msg);
443 return MEDIA_SVC_PLUGIN_ERROR;
446 if (!STORAGE_VALID(storage_type)) {
447 __set_error_message(ERR_STORAGE_TYPE, err_msg);
448 return MEDIA_SVC_PLUGIN_ERROR;
451 ret = media_svc_delete_invalid_items_in_storage(handle, storage_id, storage_type, uid);
453 __set_error_message(ret, err_msg);
454 return MEDIA_SVC_PLUGIN_ERROR;
457 return MEDIA_SVC_PLUGIN_ERROR_NONE;
460 int delete_all_invalid_items_in_folder(void *handle, const char *storage_id, const char *folder_path, bool is_recursve, uid_t uid, char **err_msg)
462 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
464 if (handle == NULL) {
465 __set_error_message(ERR_HANDLE, err_msg);
466 return MEDIA_SVC_PLUGIN_ERROR;
469 if (!STRING_VALID(folder_path)) {
470 __set_error_message(ERR_FOLDER_PATH, err_msg);
471 return MEDIA_SVC_PLUGIN_ERROR;
474 ret = media_svc_delete_invalid_items_in_folder(handle, storage_id, folder_path, is_recursve, uid);
476 __set_error_message(ret, err_msg);
477 return MEDIA_SVC_PLUGIN_ERROR;
480 return MEDIA_SVC_PLUGIN_ERROR_NONE;
484 int update_begin(void)
486 return MEDIA_SVC_PLUGIN_ERROR_NONE;
489 int update_end(const char *start_path, uid_t uid)
492 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
494 ret = thumbnail_request_extract_all_thumbs(uid);
496 return MEDIA_SVC_PLUGIN_ERROR;
499 return MEDIA_SVC_PLUGIN_ERROR_NONE;
502 int send_dir_update_noti(void *handle, const char *storage_id, const char *dir_path, const char *folder_id, int update_type, int pid, char **err_msg)
504 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
506 if (!STRING_VALID(dir_path)) {
507 __set_error_message(ERR_FOLDER_PATH, err_msg);
508 return MEDIA_SVC_PLUGIN_ERROR;
511 ret = media_svc_send_dir_update_noti(handle, storage_id, dir_path, folder_id, (media_item_update_type_e)update_type, pid);
513 __set_error_message(ret, err_msg);
514 return MEDIA_SVC_PLUGIN_ERROR;
517 return MEDIA_SVC_PLUGIN_ERROR_NONE;
520 int count_delete_items_in_folder(void *handle, const char *storage_id, const char *folder_path, int *count, char **err_msg)
522 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
524 if (handle == NULL) {
525 __set_error_message(ERR_HANDLE, err_msg);
526 return MEDIA_SVC_PLUGIN_ERROR;
530 __set_error_message(ERR_HANDLE, err_msg);
531 return MEDIA_SVC_PLUGIN_ERROR;
534 if (!STRING_VALID(folder_path)) {
535 __set_error_message(ERR_FOLDER_PATH, err_msg);
536 return MEDIA_SVC_PLUGIN_ERROR;
539 ret = media_svc_count_invalid_items_in_folder(handle, storage_id, folder_path, count);
541 __set_error_message(ret, err_msg);
542 return MEDIA_SVC_PLUGIN_ERROR;
545 return MEDIA_SVC_PLUGIN_ERROR_NONE;
548 int check_db(void *handle, bool *need_full_scan, uid_t uid, char **err_msg)
550 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
551 int user_version = -1;
553 ret = media_svc_get_user_version(handle, &user_version);
555 __set_error_message(ret, err_msg);
556 return MEDIA_SVC_PLUGIN_ERROR;
559 if (user_version == 0) {
561 ret = media_svc_create_table(handle, uid);
563 __set_error_message(ret, err_msg);
564 return MEDIA_SVC_PLUGIN_ERROR;
568 ret = media_svc_check_db_upgrade(handle, need_full_scan, user_version, uid);
570 __set_error_message(ret, err_msg);
571 return MEDIA_SVC_PLUGIN_ERROR;
575 return MEDIA_SVC_PLUGIN_ERROR_NONE;
578 int check_db_corrupt(void *handle, char **err_msg)
580 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
583 ret = media_svc_check_db_corrupt(handle);
585 __set_error_message(ret, err_msg);
586 return MEDIA_SVC_PLUGIN_ERROR;
589 return MEDIA_SVC_PLUGIN_ERROR_NONE;
592 int get_folder_list(void *handle, const char *storage_id, char *start_path, char ***folder_list, int **modified_time_list, int **item_num_list, int *count, char **err_msg)
594 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
596 if (handle == NULL) {
597 __set_error_message(ERR_HANDLE, err_msg);
598 return MEDIA_SVC_PLUGIN_ERROR;
602 __set_error_message(ERR_HANDLE, err_msg);
603 return MEDIA_SVC_PLUGIN_ERROR;
606 ret = media_svc_get_folder_list(handle, start_path, folder_list, (time_t **)modified_time_list, item_num_list, count);
608 __set_error_message(ret, err_msg);
609 return MEDIA_SVC_PLUGIN_ERROR;
612 return MEDIA_SVC_PLUGIN_ERROR_NONE;
615 int update_folder_time(void *handle, const char *storage_id, char *folder_path, uid_t uid, char **err_msg)
617 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
619 if (handle == NULL) {
620 __set_error_message(ERR_HANDLE, err_msg);
621 return MEDIA_SVC_PLUGIN_ERROR;
624 if (folder_path == NULL) {
625 __set_error_message(ERR_HANDLE, err_msg);
626 return MEDIA_SVC_PLUGIN_ERROR;
629 ret = media_svc_update_folder_time(handle, storage_id, folder_path, uid);
631 __set_error_message(ret, err_msg);
632 return MEDIA_SVC_PLUGIN_ERROR;
635 return MEDIA_SVC_PLUGIN_ERROR_NONE;
638 int get_uuid(void * handle, char **uuid, char **err_msg)
640 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
642 if (handle == NULL) {
643 __set_error_message(ERR_HANDLE, err_msg);
644 return MEDIA_SVC_PLUGIN_ERROR;
647 ret = media_svc_generate_uuid(uuid);
649 __set_error_message(ret, err_msg);
650 return MEDIA_SVC_PLUGIN_ERROR;
653 return MEDIA_SVC_PLUGIN_ERROR_NONE;
656 int get_mmc_info(void * handle, char **storage_name, char **storage_path, int *validity, bool *info_exist, char **err_msg)
658 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
660 if (handle == NULL) {
661 __set_error_message(ERR_HANDLE, err_msg);
662 return MEDIA_SVC_PLUGIN_ERROR;
665 ret = media_svc_get_mmc_info(handle, storage_name, storage_path, validity, info_exist);
667 __set_error_message(MS_MEDIA_ERR_DB_NO_RECORD, err_msg);
668 return MEDIA_SVC_PLUGIN_ERROR;
671 return MEDIA_SVC_PLUGIN_ERROR_NONE;
674 int check_storage(void * handle, const char *storage_id, const char *storage_name, char **storage_path, int *validity, char **err_msg)
676 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
678 if (handle == NULL) {
679 __set_error_message(ERR_HANDLE, err_msg);
680 return MEDIA_SVC_PLUGIN_ERROR;
683 ret = media_svc_check_storage(handle, storage_id, storage_name, storage_path, validity);
685 __set_error_message(ret, err_msg);
686 return MEDIA_SVC_PLUGIN_ERROR;
689 return MEDIA_SVC_PLUGIN_ERROR_NONE;
692 int insert_storage(void *handle, const char *storage_id, int storage_type, const char *storage_name, const char *storage_path, uid_t uid, char **err_msg)
694 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
696 if (handle == NULL) {
697 __set_error_message(ERR_HANDLE, err_msg);
698 return MEDIA_SVC_PLUGIN_ERROR;
701 ret = media_svc_insert_storage(handle, storage_id, storage_name, storage_path, NULL, storage_type, uid);
703 __set_error_message(ret, err_msg);
704 return MEDIA_SVC_PLUGIN_ERROR;
707 return MEDIA_SVC_PLUGIN_ERROR_NONE;
710 int update_storage(void *handle, const char *storage_id, const char *storage_path, uid_t uid, char **err_msg)
712 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
714 if (handle == NULL) {
715 __set_error_message(ERR_HANDLE, err_msg);
716 return MEDIA_SVC_PLUGIN_ERROR;
719 ret = media_svc_update_storage(handle, storage_id, storage_path, uid);
721 __set_error_message(ret, err_msg);
722 return MEDIA_SVC_PLUGIN_ERROR;
725 return MEDIA_SVC_PLUGIN_ERROR_NONE;
728 int delete_storage(void * handle, const char *storage_id, const char *storage_name, uid_t uid, char **err_msg)
730 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
732 if (handle == NULL) {
733 __set_error_message(ERR_HANDLE, err_msg);
734 return MEDIA_SVC_PLUGIN_ERROR;
737 ret = media_svc_delete_storage(handle, storage_id, storage_name, uid);
739 __set_error_message(ret, err_msg);
740 return MEDIA_SVC_PLUGIN_ERROR;
743 return MEDIA_SVC_PLUGIN_ERROR_NONE;
746 int set_storage_validity(void * handle, const char *storage_id, int validity, uid_t uid, char **err_msg)
748 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
750 if (handle == NULL) {
751 __set_error_message(ERR_HANDLE, err_msg);
752 return MEDIA_SVC_PLUGIN_ERROR;
755 ret = media_svc_set_storage_validity(handle, storage_id, validity, uid);
757 __set_error_message(ret, err_msg);
758 return MEDIA_SVC_PLUGIN_ERROR;
761 return MEDIA_SVC_PLUGIN_ERROR_NONE;
764 int set_all_storage_validity(void * handle, int validity, char **err_msg, uid_t uid)
766 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
768 if (handle == NULL) {
769 __set_error_message(ERR_HANDLE, err_msg);
770 return MEDIA_SVC_PLUGIN_ERROR;
773 ret = media_svc_set_storage_validity(handle, NULL, validity, uid);
775 __set_error_message(ret, err_msg);
776 return MEDIA_SVC_PLUGIN_ERROR;
779 return MEDIA_SVC_PLUGIN_ERROR_NONE;
782 int get_storage_id(void * handle, const char *path, char *storage_id, char **err_msg)
784 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
786 if (handle == NULL) {
787 __set_error_message(ERR_HANDLE, err_msg);
788 return MEDIA_SVC_PLUGIN_ERROR;
791 ret = media_svc_get_storage_id(handle, path, storage_id);
793 __set_error_message(ret, err_msg);
794 return MEDIA_SVC_PLUGIN_ERROR;
797 return MEDIA_SVC_PLUGIN_ERROR_NONE;
800 int get_storage_scan_status(void * handle, const char *storage_id, int *status, char **err_msg)
802 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
803 media_svc_scan_status_type_e storage_status = 0;
805 if (handle == NULL) {
806 __set_error_message(ERR_HANDLE, err_msg);
807 return MEDIA_SVC_PLUGIN_ERROR;
810 ret = media_svc_get_storage_scan_status(handle, storage_id, &storage_status);
812 __set_error_message(ret, err_msg);
813 return MEDIA_SVC_PLUGIN_ERROR;
816 *status = storage_status;
818 return MEDIA_SVC_PLUGIN_ERROR_NONE;
821 int set_storage_scan_status(void *handle, const char *storage_id, int status, uid_t uid, char **err_msg)
823 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
824 media_svc_scan_status_type_e storage_status = status;
826 if (handle == NULL) {
827 __set_error_message(ERR_HANDLE, err_msg);
828 return MEDIA_SVC_PLUGIN_ERROR;
831 ret = media_svc_set_storage_scan_status(handle, storage_id, storage_status, uid);
833 __set_error_message(ret, err_msg);
834 return MEDIA_SVC_PLUGIN_ERROR;
837 return MEDIA_SVC_PLUGIN_ERROR_NONE;
840 int get_storage_list(void *handle, char ***storage_list, char ***storage_id_list, int **scan_status_list, int *count, char **err_msg)
842 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
844 if (handle == NULL) {
845 __set_error_message(ERR_HANDLE, err_msg);
846 return MEDIA_SVC_PLUGIN_ERROR;
850 __set_error_message(ERR_HANDLE, err_msg);
851 return MEDIA_SVC_PLUGIN_ERROR;
854 ret = media_svc_get_storage_list(handle, storage_list, storage_id_list, scan_status_list, count);
856 __set_error_message(ret, err_msg);
857 return MEDIA_SVC_PLUGIN_ERROR;
860 return MEDIA_SVC_PLUGIN_ERROR_NONE;
863 int update_item_begin(void *handle, int item_cnt, char **err_msg)
865 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
867 if (handle == NULL) {
868 __set_error_message(ERR_HANDLE, err_msg);
869 return MEDIA_SVC_PLUGIN_ERROR;
872 ret = media_svc_update_item_begin(handle, item_cnt);
874 __set_error_message(ret, err_msg);
875 return MEDIA_SVC_PLUGIN_ERROR;
878 return MEDIA_SVC_PLUGIN_ERROR_NONE;
881 int update_item_end(void *handle, uid_t uid, char **err_msg)
883 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
885 if (handle == NULL) {
886 __set_error_message(ERR_HANDLE, err_msg);
887 return MEDIA_SVC_PLUGIN_ERROR;
890 ret = media_svc_update_item_end(handle, uid);
892 __set_error_message(ret, err_msg);
893 return MEDIA_SVC_PLUGIN_ERROR;
896 return MEDIA_SVC_PLUGIN_ERROR_NONE;
899 int update_item_meta(void *handle, const char *file_path, int storage_type, uid_t uid, char **err_msg)
901 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
903 if (handle == NULL) {
904 __set_error_message(ERR_HANDLE, err_msg);
905 return MEDIA_SVC_PLUGIN_ERROR;
908 if (file_path == NULL) {
909 __set_error_message(ERR_HANDLE, err_msg);
910 return MEDIA_SVC_PLUGIN_ERROR;
913 ret = media_svc_update_item_meta(handle, file_path, storage_type, uid);
915 __set_error_message(ret, err_msg);
916 return MEDIA_SVC_PLUGIN_ERROR;
919 return MEDIA_SVC_PLUGIN_ERROR_NONE;
922 int insert_item_scan(void * handle, const char *storage_id, const char *file_path, int storage_type, uid_t uid, char **err_msg)
924 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
926 if (handle == NULL) {
927 __set_error_message(ERR_HANDLE, err_msg);
928 return MEDIA_SVC_PLUGIN_ERROR;
931 if (!STRING_VALID(file_path)) {
932 __set_error_message(ERR_FILE_PATH, err_msg);
933 return MEDIA_SVC_PLUGIN_ERROR;
936 if (!STORAGE_VALID(storage_type)) {
937 __set_error_message(ERR_STORAGE_TYPE, err_msg);
938 return MEDIA_SVC_PLUGIN_ERROR;
941 ret = media_svc_insert_item_pass1(handle, storage_id, storage_type, file_path, FALSE, uid);
943 __set_error_message(ret, err_msg);
944 return MEDIA_SVC_PLUGIN_ERROR;
947 return MEDIA_SVC_PLUGIN_ERROR_NONE;
950 int update_item_extract(void * handle, const char *storage_id, int storage_type, int scan_type, uid_t uid, const char *path, char **err_msg)
952 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
954 if (handle == NULL) {
955 __set_error_message(ERR_HANDLE, err_msg);
956 return MEDIA_SVC_PLUGIN_ERROR;
959 if (!STORAGE_VALID(storage_type)) {
960 __set_error_message(ERR_STORAGE_TYPE, err_msg);
961 return MEDIA_SVC_PLUGIN_ERROR;
964 ret = media_svc_insert_item_pass2(handle, storage_id, storage_type, scan_type, path, FALSE, uid);
966 __set_error_message(ret, err_msg);
967 return MEDIA_SVC_PLUGIN_ERROR;
970 return MEDIA_SVC_PLUGIN_ERROR_NONE;
973 int insert_folder_begin(void * handle, int item_cnt, char **err_msg)
975 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
977 if (handle == NULL) {
978 __set_error_message(ERR_HANDLE, err_msg);
979 return MEDIA_SVC_PLUGIN_ERROR;
982 ret = media_svc_insert_folder_begin(handle, item_cnt);
984 __set_error_message(ret, err_msg);
985 return MEDIA_SVC_PLUGIN_ERROR;
988 return MEDIA_SVC_PLUGIN_ERROR_NONE;
991 int insert_folder_end(void *handle, uid_t uid, char **err_msg)
993 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
995 if (handle == NULL) {
996 __set_error_message(ERR_HANDLE, err_msg);
997 return MEDIA_SVC_PLUGIN_ERROR;
1000 ret = media_svc_insert_folder_end(handle, uid);
1002 __set_error_message(ret, err_msg);
1003 return MEDIA_SVC_PLUGIN_ERROR;
1006 return MEDIA_SVC_PLUGIN_ERROR_NONE;
1009 int insert_folder(void * handle, const char *storage_id, const char *file_path, int storage_type, uid_t uid, char **err_msg)
1011 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
1013 if (handle == NULL) {
1014 __set_error_message(ERR_HANDLE, err_msg);
1015 return MEDIA_SVC_PLUGIN_ERROR;
1018 if (!STRING_VALID(file_path)) {
1019 __set_error_message(ERR_FILE_PATH, err_msg);
1020 return MEDIA_SVC_PLUGIN_ERROR;
1023 if (!STORAGE_VALID(storage_type)) {
1024 __set_error_message(ERR_STORAGE_TYPE, err_msg);
1025 return MEDIA_SVC_PLUGIN_ERROR;
1028 ret = media_svc_insert_folder(handle, storage_id, storage_type, file_path, uid);
1030 __set_error_message(ret, err_msg);
1031 return MEDIA_SVC_PLUGIN_ERROR;
1034 return MEDIA_SVC_PLUGIN_ERROR_NONE;
1037 int delete_invalid_folder(void * handle, const char *storage_id, uid_t uid, char **err_msg)
1039 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
1041 if (handle == NULL) {
1042 __set_error_message(ERR_HANDLE, err_msg);
1043 return MEDIA_SVC_PLUGIN_ERROR;
1046 ret = media_svc_delete_invalid_folder(handle, storage_id, uid);
1048 __set_error_message(ret, err_msg);
1049 return MEDIA_SVC_PLUGIN_ERROR;
1052 return MEDIA_SVC_PLUGIN_ERROR_NONE;
1055 int set_folder_validity(void * handle, const char *storage_id, const char* start_path, int validity, bool is_recursive, uid_t uid, char **err_msg)
1057 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
1059 if (handle == NULL) {
1060 __set_error_message(ERR_HANDLE, err_msg);
1061 return MEDIA_SVC_PLUGIN_ERROR;
1064 ret = media_svc_set_folder_validity(handle, storage_id, start_path, validity, is_recursive, uid);
1066 __set_error_message(ret, err_msg);
1067 return MEDIA_SVC_PLUGIN_ERROR;
1070 return MEDIA_SVC_PLUGIN_ERROR_NONE;
1073 int delete_invalid_folder_by_path(void * handle, const char *storage_id, const char *folder_path, uid_t uid, int *delete_count, char **err_msg)
1075 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
1077 if (handle == NULL) {
1078 __set_error_message(ERR_HANDLE, err_msg);
1079 return MEDIA_SVC_PLUGIN_ERROR;
1082 ret = media_svc_delete_invalid_folder_by_path(handle, storage_id, folder_path, uid, delete_count);
1084 __set_error_message(ret, err_msg);
1085 return MEDIA_SVC_PLUGIN_ERROR;
1088 return MEDIA_SVC_PLUGIN_ERROR_NONE;
1091 int check_folder_exist(void * handle, const char *storage_id, const char *folder_path, char **err_msg)
1093 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
1095 if (handle == NULL) {
1096 __set_error_message(ERR_HANDLE, err_msg);
1097 return MEDIA_SVC_PLUGIN_ERROR;
1100 ret = media_svc_check_folder_exist_by_path(handle, storage_id, folder_path);
1102 __set_error_message(ret, err_msg);
1103 return MEDIA_SVC_PLUGIN_ERROR;
1106 return MEDIA_SVC_PLUGIN_ERROR_NONE;
1109 int count_subfolder(void * handle, const char *storage_id, const char *folder_path, int *count, char **err_msg)
1111 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
1114 if (handle == NULL) {
1115 __set_error_message(ERR_HANDLE, err_msg);
1116 return MEDIA_SVC_PLUGIN_ERROR;
1119 ret = media_svc_check_subfolder_by_path(handle, storage_id, folder_path, &cnt);
1121 __set_error_message(ret, err_msg);
1122 return MEDIA_SVC_PLUGIN_ERROR;
1127 return MEDIA_SVC_PLUGIN_ERROR_NONE;
1130 int get_folder_id(void * handle, const char *storage_id, const char *path, char *folder_id, char **err_msg)
1132 int ret = MEDIA_SVC_PLUGIN_ERROR_NONE;
1134 if (handle == NULL) {
1135 __set_error_message(ERR_HANDLE, err_msg);
1136 return MEDIA_SVC_PLUGIN_ERROR;
1139 ret = media_svc_get_folder_id(handle, storage_id, path, folder_id);
1141 __set_error_message(ret, err_msg);
1142 return MEDIA_SVC_PLUGIN_ERROR;
1145 return MEDIA_SVC_PLUGIN_ERROR_NONE;