4 * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #include <stdlib.h> //calloc
22 #include <glib-object.h> //g_type_init
24 #include "calendar_service.h"
25 #include "calendar_db.h"
26 #include "calendar_types2.h"
28 #include "cal_internal.h"
29 #include "cal_typedef.h"
30 #include "cal_inotify.h"
32 #include "cal_record.h"
34 #include "cal_mutex.h"
37 #include "cal_ipc_marshal.h"
39 #include "cal_client_ipc.h"
42 calendar_db_result_cb callback;
44 }cal_client_db_async_userdata_s;
47 calendar_db_insert_result_cb callback;
49 }cal_client_db_async_insert_userdata_s;
51 #define CAL_IPC_DATA_FREE(ptr) \
54 pims_ipc_data_destroy(ptr); \
59 void __cal_client_db_insert_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata);
60 void __cal_client_db_update_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata);
61 void __cal_client_db_delete_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata);
62 void __cal_client_db_insert_vcalendars_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata);
63 void __cal_client_db_replace_vcalendars_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata);
64 void __cal_client_db_replace_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata);
66 void __cal_client_db_insert_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata)
68 cal_client_db_async_insert_userdata_s *sync_data = (cal_client_db_async_insert_userdata_s *)userdata;
69 int ret = CALENDAR_ERROR_NONE;
74 if (sync_data == NULL)
76 ERR("sync_data is NULL");
83 unsigned int size = 0;
84 ret = *(int*) pims_ipc_data_get(data_out,&size);
86 if (ret == CALENDAR_ERROR_NONE )
89 unsigned int size = 0;
91 int transaction_ver = 0;
92 transaction_ver = *(int*)pims_ipc_data_get(data_out,&size);
93 _cal_client_ipc_set_change_version(transaction_ver);
95 count = *(int*) pims_ipc_data_get(data_out,&size);
97 id = calloc(1, sizeof(int)*count);
103 id[i] = *(unsigned int*) pims_ipc_data_get(data_out,&size);
115 ret = CALENDAR_ERROR_IPC;
116 ERR("async cb is no data");
119 if (sync_data->callback)
121 sync_data->callback(ret, id, count, sync_data->user_data);
124 _cal_inotify_call_pending_callback();
133 void __cal_client_db_update_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata)
135 cal_client_db_async_userdata_s *sync_data = (cal_client_db_async_userdata_s *)userdata;
136 int ret = CALENDAR_ERROR_NONE;
138 if (sync_data == NULL)
140 ERR("sync_data is NULL");
147 unsigned int size = 0;
148 ret = *(int*) pims_ipc_data_get(data_out,&size);
150 if (ret == CALENDAR_ERROR_NONE)
152 int transaction_ver = 0;
153 transaction_ver = *(int*)pims_ipc_data_get(data_out,&size);
154 _cal_client_ipc_set_change_version(transaction_ver);
159 ret = CALENDAR_ERROR_IPC;
160 ERR("async cb is no data");
163 if (sync_data->callback)
165 sync_data->callback(ret, sync_data->user_data);
168 _cal_inotify_call_pending_callback();
174 void __cal_client_db_delete_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata)
176 cal_client_db_async_userdata_s *sync_data = (cal_client_db_async_userdata_s *)userdata;
177 int ret = CALENDAR_ERROR_NONE;
179 if (sync_data == NULL)
181 ERR("sync_data is NULL");
188 unsigned int size = 0;
189 ret = *(int*) pims_ipc_data_get(data_out,&size);
191 if (ret == CALENDAR_ERROR_NONE)
193 int transaction_ver = 0;
194 transaction_ver = *(int*)pims_ipc_data_get(data_out,&size);
195 _cal_client_ipc_set_change_version(transaction_ver);
200 ret = CALENDAR_ERROR_IPC;
201 ERR("async cb is no data");
204 if (sync_data->callback)
206 sync_data->callback(ret, sync_data->user_data);
209 _cal_inotify_call_pending_callback();
216 void __cal_client_db_insert_vcalendars_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata)
218 cal_client_db_async_insert_userdata_s *sync_data = (cal_client_db_async_insert_userdata_s *)userdata;
219 int ret = CALENDAR_ERROR_NONE;
224 if (sync_data == NULL)
226 ERR("sync_data is NULL");
233 unsigned int size = 0;
234 ret = *(int*) pims_ipc_data_get(data_out,&size);
236 if (ret == CALENDAR_ERROR_NONE )
239 unsigned int size = 0;
241 int transaction_ver = 0;
242 transaction_ver = *(int*)pims_ipc_data_get(data_out,&size);
243 _cal_client_ipc_set_change_version(transaction_ver);
245 count = *(int*) pims_ipc_data_get(data_out,&size);
247 id = calloc(1, sizeof(int)*count);
253 id[i] = *(unsigned int*) pims_ipc_data_get(data_out,&size);
264 ret = CALENDAR_ERROR_IPC;
265 ERR("async cb is no data");
268 if (sync_data->callback)
270 sync_data->callback(ret, id, count, sync_data->user_data);
273 _cal_inotify_call_pending_callback();
282 void __cal_client_db_replace_vcalendars_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata)
284 cal_client_db_async_userdata_s *sync_data = (cal_client_db_async_userdata_s *)userdata;
285 int ret = CALENDAR_ERROR_NONE;
287 if (sync_data == NULL)
289 ERR("sync_data is NULL");
296 unsigned int size = 0;
297 ret = *(int*) pims_ipc_data_get(data_out,&size);
299 if (ret == CALENDAR_ERROR_NONE)
301 int transaction_ver = 0;
302 transaction_ver = *(int*)pims_ipc_data_get(data_out,&size);
303 _cal_client_ipc_set_change_version(transaction_ver);
308 ret = CALENDAR_ERROR_IPC;
309 ERR("async cb is no data");
312 if (sync_data->callback)
314 sync_data->callback(ret, sync_data->user_data);
317 _cal_inotify_call_pending_callback();
324 void __cal_client_db_replace_records_cb(pims_ipc_h ipc, pims_ipc_data_h data_out, void *userdata)
326 cal_client_db_async_userdata_s *sync_data = (cal_client_db_async_userdata_s *)userdata;
327 int ret = CALENDAR_ERROR_NONE;
329 if (sync_data == NULL)
331 ERR("sync_data is NULL");
338 unsigned int size = 0;
339 ret = *(int*) pims_ipc_data_get(data_out,&size);
341 if (ret == CALENDAR_ERROR_NONE)
343 int transaction_ver = 0;
344 transaction_ver = *(int*)pims_ipc_data_get(data_out,&size);
345 _cal_client_ipc_set_change_version(transaction_ver);
350 ret = CALENDAR_ERROR_IPC;
351 ERR("async cb is no data");
354 if (sync_data->callback)
356 sync_data->callback(ret, sync_data->user_data);
359 _cal_inotify_call_pending_callback();
366 API int calendar_db_insert_record( calendar_record_h record, int* id )
368 int ret = CALENDAR_ERROR_NONE;
369 pims_ipc_data_h indata = NULL;
370 pims_ipc_data_h outdata = NULL;
372 retvm_if(record==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record is NULL");
374 CAL_RECORD_RESET_COMMON((cal_record_s*)record);
376 indata = pims_ipc_data_create(0);
379 ERR("ipc data created fail !");
380 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
383 ret = _cal_ipc_marshal_record(record,indata);
384 if (ret != CALENDAR_ERROR_NONE)
387 CAL_IPC_DATA_FREE(indata);
392 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_INSERT_RECORD, indata, &outdata) != 0)
394 ERR("pims_ipc_call failed");
395 CAL_IPC_DATA_FREE(indata);
396 return CALENDAR_ERROR_IPC;
399 CAL_IPC_DATA_FREE(indata);
405 unsigned int size = 0;
406 ret = *(int*) pims_ipc_data_get(outdata,&size);
408 if (ret == CALENDAR_ERROR_NONE)
410 int transaction_ver = 0;
411 transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
412 _cal_client_ipc_set_change_version(transaction_ver);
413 //unsigned int property_id = 0;
415 //property_id = *(unsigned int*)pims_ipc_data_get(outdata,&size);
416 out_id = *(int*)pims_ipc_data_get(outdata,&size);
417 //_cal_record_set_int(record,property_id,id);
424 pims_ipc_data_destroy(outdata);
428 ERR("ipc outdata is NULL");
429 return CALENDAR_ERROR_IPC;
435 API int calendar_db_get_record( const char* view_uri, int id, calendar_record_h* out_record )
437 int ret = CALENDAR_ERROR_NONE;
438 pims_ipc_data_h indata = NULL;
439 pims_ipc_data_h outdata = NULL;
441 retvm_if(view_uri==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"view_uri is NULL");
442 retvm_if(id<=0,CALENDAR_ERROR_INVALID_PARAMETER,"id <= 0");
443 retvm_if(out_record==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record is NULL");
446 indata = pims_ipc_data_create(0);
449 ERR("ipc data created fail !");
450 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
453 ret = _cal_ipc_marshal_char(view_uri,indata);
454 if (ret != CALENDAR_ERROR_NONE)
457 CAL_IPC_DATA_FREE(indata);
460 ret = _cal_ipc_marshal_int(id,indata);
461 if (ret != CALENDAR_ERROR_NONE)
464 CAL_IPC_DATA_FREE(indata);
469 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_RECORD, indata, &outdata) != 0)
471 ERR("pims_ipc_call failed");
472 CAL_IPC_DATA_FREE(indata);
473 return CALENDAR_ERROR_IPC;
476 CAL_IPC_DATA_FREE(indata);
481 unsigned int size = 0;
482 ret = *(int*) pims_ipc_data_get(outdata,&size);
484 if (ret == CALENDAR_ERROR_NONE)
486 ret = _cal_ipc_unmarshal_record(outdata,out_record);
489 pims_ipc_data_destroy(outdata);
493 ERR("ipc outdata is NULL");
494 return CALENDAR_ERROR_IPC;
500 API int calendar_db_update_record( calendar_record_h record )
502 int ret = CALENDAR_ERROR_NONE;
503 pims_ipc_data_h indata = NULL;
504 pims_ipc_data_h outdata = NULL;
506 retvm_if(record==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record is NULL");
509 indata = pims_ipc_data_create(0);
512 ERR("ipc data created fail !");
513 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
516 ret = _cal_ipc_marshal_record(record,indata);
517 if (ret != CALENDAR_ERROR_NONE)
520 CAL_IPC_DATA_FREE(indata);
525 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_UPDATE_RECORD, indata, &outdata) != 0)
527 ERR("pims_ipc_call failed");
528 CAL_IPC_DATA_FREE(indata);
529 return CALENDAR_ERROR_IPC;
532 CAL_IPC_DATA_FREE(indata);
537 unsigned int size = 0;
538 ret = *(int*) pims_ipc_data_get(outdata,&size);
540 if (ret == CALENDAR_ERROR_NONE)
542 int transaction_ver = 0;
543 transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
544 _cal_client_ipc_set_change_version(transaction_ver);
547 pims_ipc_data_destroy(outdata);
551 ERR("ipc outdata is NULL");
552 return CALENDAR_ERROR_IPC;
558 API int calendar_db_delete_record( const char* view_uri, int id )
560 int ret = CALENDAR_ERROR_NONE;
561 pims_ipc_data_h indata = NULL;
562 pims_ipc_data_h outdata = NULL;
564 retvm_if(view_uri==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"view_uri is NULL");
565 retvm_if(id<=0,CALENDAR_ERROR_INVALID_PARAMETER,"id <= 0");
568 indata = pims_ipc_data_create(0);
571 ERR("ipc data created fail !");
572 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
575 ret = _cal_ipc_marshal_char(view_uri,indata);
576 if (ret != CALENDAR_ERROR_NONE)
579 CAL_IPC_DATA_FREE(indata);
582 ret = _cal_ipc_marshal_int(id,indata);
583 if (ret != CALENDAR_ERROR_NONE)
586 CAL_IPC_DATA_FREE(indata);
591 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_DELETE_RECORD, indata, &outdata) != 0)
593 ERR("pims_ipc_call failed");
594 CAL_IPC_DATA_FREE(indata);
595 return CALENDAR_ERROR_IPC;
598 CAL_IPC_DATA_FREE(indata);
603 unsigned int size = 0;
604 ret = *(int*) pims_ipc_data_get(outdata,&size);
606 if (ret == CALENDAR_ERROR_NONE)
608 int transaction_ver = 0;
609 transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
610 _cal_client_ipc_set_change_version(transaction_ver);
613 pims_ipc_data_destroy(outdata);
617 ERR("ipc outdata is NULL");
618 return CALENDAR_ERROR_IPC;
624 API int calendar_db_get_all_records( const char* view_uri, int offset, int limit, calendar_list_h* out_list )
626 int ret = CALENDAR_ERROR_NONE;
627 pims_ipc_data_h indata = NULL;
628 pims_ipc_data_h outdata = NULL;
630 retvm_if(out_list==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"list is NULL");
631 retvm_if(view_uri==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"view_uri is NULL");
634 indata = pims_ipc_data_create(0);
637 ERR("ipc data created fail !");
638 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
642 ret = _cal_ipc_marshal_char(view_uri,indata);
643 if (ret != CALENDAR_ERROR_NONE)
646 CAL_IPC_DATA_FREE(indata);
649 ret = _cal_ipc_marshal_int(offset,indata);
650 if (ret != CALENDAR_ERROR_NONE)
653 CAL_IPC_DATA_FREE(indata);
656 ret = _cal_ipc_marshal_int(limit,indata);
657 if (ret != CALENDAR_ERROR_NONE)
660 CAL_IPC_DATA_FREE(indata);
665 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_ALL_RECORDS, indata, &outdata) != 0)
667 ERR("pims_ipc_call failed");
668 CAL_IPC_DATA_FREE(indata);
669 return CALENDAR_ERROR_IPC;
672 CAL_IPC_DATA_FREE(indata);
677 unsigned int size = 0;
678 ret = *(int*) pims_ipc_data_get(outdata,&size);
680 if (ret == CALENDAR_ERROR_NONE)
682 ret = _cal_ipc_unmarshal_list(outdata,out_list);
684 pims_ipc_data_destroy(outdata);
688 ERR("ipc outdata is NULL");
689 return CALENDAR_ERROR_IPC;
695 API int calendar_db_get_records_with_query( calendar_query_h query, int offset, int limit, calendar_list_h* out_list )
697 int ret = CALENDAR_ERROR_NONE;
698 pims_ipc_data_h indata = NULL;
699 pims_ipc_data_h outdata = NULL;
701 retvm_if(query==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"query is NULL");
702 retvm_if(out_list==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"list is NULL");
705 indata = pims_ipc_data_create(0);
708 ERR("ipc data created fail !");
709 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
712 ret = _cal_ipc_marshal_query(query,indata);
713 if (ret != CALENDAR_ERROR_NONE)
716 CAL_IPC_DATA_FREE(indata);
719 ret = _cal_ipc_marshal_int(offset,indata);
720 if (ret != CALENDAR_ERROR_NONE)
723 CAL_IPC_DATA_FREE(indata);
726 ret = _cal_ipc_marshal_int(limit,indata);
727 if (ret != CALENDAR_ERROR_NONE)
730 CAL_IPC_DATA_FREE(indata);
735 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_RECORDS_WITH_QUERY, indata, &outdata) != 0)
737 ERR("pims_ipc_call failed");
738 CAL_IPC_DATA_FREE(indata);
739 return CALENDAR_ERROR_IPC;
742 CAL_IPC_DATA_FREE(indata);
747 unsigned int size = 0;
748 ret = *(int*) pims_ipc_data_get(outdata,&size);
750 if (ret == CALENDAR_ERROR_NONE)
752 ret = _cal_ipc_unmarshal_list(outdata,out_list);
755 pims_ipc_data_destroy(outdata);
759 ERR("ipc outdata is NULL");
760 return CALENDAR_ERROR_IPC;
766 API int calendar_db_clean_after_sync( int calendar_book_id, int calendar_db_version)
768 int ret = CALENDAR_ERROR_NONE;
769 pims_ipc_data_h indata = NULL;
770 pims_ipc_data_h outdata = NULL;
772 retvm_if(calendar_book_id <= 0,CALENDAR_ERROR_INVALID_PARAMETER,"calendar_book_id < 0");
775 indata = pims_ipc_data_create(0);
778 ERR("ipc data created fail !");
779 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
782 ret = _cal_ipc_marshal_int(calendar_book_id,indata);
783 if (ret != CALENDAR_ERROR_NONE)
786 CAL_IPC_DATA_FREE(indata);
789 ret = _cal_ipc_marshal_int(calendar_db_version,indata);
790 if (ret != CALENDAR_ERROR_NONE)
793 CAL_IPC_DATA_FREE(indata);
798 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_CLEAN_AFTER_SYNC, indata, &outdata) != 0)
800 ERR("pims_ipc_call failed");
801 CAL_IPC_DATA_FREE(indata);
802 return CALENDAR_ERROR_IPC;
805 CAL_IPC_DATA_FREE(indata);
810 unsigned int size = 0;
811 ret = *(int*) pims_ipc_data_get(outdata,&size);
813 pims_ipc_data_destroy(outdata);
817 ERR("ipc outdata is NULL");
818 return CALENDAR_ERROR_IPC;
824 API int calendar_db_get_count( const char* view_uri, int *out_count )
826 int ret = CALENDAR_ERROR_NONE;
827 pims_ipc_data_h indata = NULL;
828 pims_ipc_data_h outdata = NULL;
830 retvm_if(view_uri==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"view_uri is NULL");
831 retvm_if(out_count==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"count pointer is NULL");
834 indata = pims_ipc_data_create(0);
837 ERR("ipc data created fail !");
838 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
841 ret = _cal_ipc_marshal_char(view_uri,indata);
842 if (ret != CALENDAR_ERROR_NONE)
845 CAL_IPC_DATA_FREE(indata);
850 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_COUNT, indata, &outdata) != 0)
852 ERR("pims_ipc_call failed");
853 CAL_IPC_DATA_FREE(indata);
854 return CALENDAR_ERROR_IPC;
857 CAL_IPC_DATA_FREE(indata);
862 unsigned int size = 0;
863 ret = *(int*) pims_ipc_data_get(outdata,&size);
865 if (ret == CALENDAR_ERROR_NONE)
867 ret = _cal_ipc_unmarshal_int(outdata,out_count);
870 pims_ipc_data_destroy(outdata);
874 ERR("ipc outdata is NULL");
875 return CALENDAR_ERROR_IPC;
881 API int calendar_db_get_count_with_query( calendar_query_h query, int *out_count )
883 int ret = CALENDAR_ERROR_NONE;
884 pims_ipc_data_h indata = NULL;
885 pims_ipc_data_h outdata = NULL;
887 retvm_if(query==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record is NULL");
890 indata = pims_ipc_data_create(0);
893 ERR("ipc data created fail !");
894 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
897 ret = _cal_ipc_marshal_query(query,indata);
898 if (ret != CALENDAR_ERROR_NONE)
901 CAL_IPC_DATA_FREE(indata);
906 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_COUNT_WITH_QUERY, indata, &outdata) != 0)
908 ERR("pims_ipc_call failed");
909 CAL_IPC_DATA_FREE(indata);
910 return CALENDAR_ERROR_IPC;
913 CAL_IPC_DATA_FREE(indata);
918 unsigned int size = 0;
919 ret = *(int*) pims_ipc_data_get(outdata,&size);
921 if (ret == CALENDAR_ERROR_NONE)
923 ret = _cal_ipc_unmarshal_int(outdata,out_count);
926 pims_ipc_data_destroy(outdata);
930 ERR("ipc outdata is NULL");
931 return CALENDAR_ERROR_IPC;
937 API int calendar_db_insert_records( calendar_list_h record_list, int** record_id_array, int* count)
939 int ret = CALENDAR_ERROR_NONE;
940 pims_ipc_data_h indata = NULL;
941 pims_ipc_data_h outdata = NULL;
943 retvm_if(record_list==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"list is NULL");
946 indata = pims_ipc_data_create(0);
949 ERR("ipc data created fail !");
950 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
953 ret = _cal_ipc_marshal_list(record_list,indata);
954 if (ret != CALENDAR_ERROR_NONE)
957 CAL_IPC_DATA_FREE(indata);
961 if (_cal_client_ipc_call(CAL_IPC_MODULE,CAL_IPC_SERVER_DB_INSERT_RECORDS,
962 indata,&outdata) != 0)
964 ERR("pims_ipc_call failed");
965 CAL_IPC_DATA_FREE(indata);
966 return CALENDAR_ERROR_IPC;
969 CAL_IPC_DATA_FREE(indata);
973 unsigned int size = 0;
974 ret = *(int*) pims_ipc_data_get(outdata,&size);
976 if (ret == CALENDAR_ERROR_NONE)
978 int transaction_ver = 0;
979 transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
980 _cal_client_ipc_set_change_version(transaction_ver);
984 pims_ipc_data_destroy(outdata);
988 ERR("ipc outdata is NULL");
989 return CALENDAR_ERROR_IPC;
998 unsigned int size = 0;
1001 if (count && record_id_array)
1003 *count = *(int*) pims_ipc_data_get(outdata,&size);
1007 ERR("count is %d",*count);
1009 pims_ipc_data_destroy(outdata);
1010 return CALENDAR_ERROR_INVALID_PARAMETER;
1012 ids = calloc(1, sizeof(int)*(*count));
1018 pims_ipc_data_destroy(outdata);
1019 return CALENDAR_ERROR_OUT_OF_MEMORY;
1021 for(i=0;i<(*count);i++)
1023 ids[i] = *(int*) pims_ipc_data_get(outdata,&size);
1025 *record_id_array = ids;
1027 pims_ipc_data_destroy(outdata);
1033 API int calendar_db_insert_records_async(calendar_list_h list, calendar_db_insert_result_cb callback, void *user_data)
1035 int ret = CALENDAR_ERROR_NONE;
1036 pims_ipc_data_h indata = NULL;
1037 cal_client_db_async_insert_userdata_s *async_data = NULL;
1038 calendar_list_h clone_list = NULL;
1040 retvm_if(list==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"list is NULL");
1041 retvm_if(callback==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"list is NULL");
1043 ret = _cal_list_clone(list, &clone_list);
1044 if (CALENDAR_ERROR_NONE != ret)
1046 ERR("_cal_list_clone() failed");
1051 indata = pims_ipc_data_create(0);
1054 ERR("ipc data created fail !");
1055 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1056 calendar_list_destroy(clone_list, true);
1059 ret = _cal_ipc_marshal_list(clone_list,indata);
1060 if (ret != CALENDAR_ERROR_NONE)
1062 ERR("marshal fail");
1063 CAL_IPC_DATA_FREE(indata);
1064 calendar_list_destroy(clone_list, true);
1068 async_data = (cal_client_db_async_insert_userdata_s*)malloc(sizeof(cal_client_db_async_insert_userdata_s));
1069 if (async_data == NULL)
1071 ERR("malloc fail !");
1072 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1073 calendar_list_destroy(clone_list, true);
1074 CAL_IPC_DATA_FREE(indata);
1077 async_data->callback = callback;
1078 async_data->user_data = user_data;
1080 if (_cal_client_ipc_call_async(CAL_IPC_MODULE,CAL_IPC_SERVER_DB_INSERT_RECORDS,
1081 indata,__cal_client_db_insert_records_cb,async_data) != 0)
1083 ERR("pims_ipc_call_async failed");
1084 calendar_list_destroy(clone_list, true);
1085 CAL_IPC_DATA_FREE(indata);
1086 return CALENDAR_ERROR_IPC;
1089 CAL_IPC_DATA_FREE(indata);
1091 calendar_list_destroy(clone_list, true);
1096 API int calendar_db_update_records( calendar_list_h record_list)
1098 int ret = CALENDAR_ERROR_NONE;
1099 pims_ipc_data_h indata = NULL;
1100 pims_ipc_data_h outdata = NULL;
1102 retvm_if(record_list==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record is NULL");
1105 indata = pims_ipc_data_create(0);
1108 ERR("ipc data created fail !");
1109 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1112 ret = _cal_ipc_marshal_list(record_list,indata);
1113 if (ret != CALENDAR_ERROR_NONE)
1115 ERR("marshal fail");
1116 CAL_IPC_DATA_FREE(indata);
1121 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_UPDATE_RECORDS, indata, &outdata) != 0)
1123 ERR("pims_ipc_call failed");
1124 CAL_IPC_DATA_FREE(indata);
1125 return CALENDAR_ERROR_IPC;
1128 CAL_IPC_DATA_FREE(indata);
1133 unsigned int size = 0;
1134 ret = *(int*) pims_ipc_data_get(outdata,&size);
1136 if (ret == CALENDAR_ERROR_NONE)
1138 int transaction_ver = 0;
1139 transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
1140 _cal_client_ipc_set_change_version(transaction_ver);
1143 pims_ipc_data_destroy(outdata);
1147 ERR("ipc outdata is NULL");
1148 return CALENDAR_ERROR_IPC;
1155 API int calendar_db_update_records_async( calendar_list_h list, calendar_db_result_cb callback, void *user_data)
1157 int ret = CALENDAR_ERROR_NONE;
1158 pims_ipc_data_h indata = NULL;
1159 cal_client_db_async_userdata_s *async_data = NULL;
1160 calendar_list_h clone_list = NULL;
1162 retvm_if(list==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record is NULL");
1163 retvm_if(callback==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"callback is NULL");
1165 ret = _cal_list_clone(list, &clone_list);
1166 if (CALENDAR_ERROR_NONE != ret)
1168 ERR("_cal_list_clone() failed");
1173 indata = pims_ipc_data_create(0);
1176 ERR("ipc data created fail !");
1177 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1178 calendar_list_destroy(clone_list, true);
1181 ret = _cal_ipc_marshal_list(clone_list,indata);
1182 if (ret != CALENDAR_ERROR_NONE)
1184 ERR("marshal fail");
1185 calendar_list_destroy(clone_list, true);
1186 CAL_IPC_DATA_FREE(indata);
1190 async_data = (cal_client_db_async_userdata_s*)malloc(sizeof(cal_client_db_async_userdata_s));
1191 if (async_data == NULL)
1193 ERR("malloc fail !");
1194 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1195 calendar_list_destroy(clone_list, true);
1196 CAL_IPC_DATA_FREE(indata);
1199 async_data->callback = callback;
1200 async_data->user_data = user_data;
1202 if (_cal_client_ipc_call_async(CAL_IPC_MODULE,CAL_IPC_SERVER_DB_UPDATE_RECORDS,
1203 indata,__cal_client_db_update_records_cb,async_data) != 0)
1205 ERR("pims_ipc_call_async failed");
1206 calendar_list_destroy(clone_list, true);
1207 CAL_IPC_DATA_FREE(indata);
1208 return CALENDAR_ERROR_IPC;
1211 CAL_IPC_DATA_FREE(indata);
1213 calendar_list_destroy(clone_list, true);
1217 API int calendar_db_delete_records(const char* view_uri, int record_id_array[], int count)
1219 int ret = CALENDAR_ERROR_NONE;
1220 pims_ipc_data_h indata = NULL;
1221 pims_ipc_data_h outdata = NULL;
1224 retvm_if(view_uri==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"view_uri is NULL");
1225 retvm_if(record_id_array==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record_id_array is NULL");
1226 retvm_if(count<=0,CALENDAR_ERROR_INVALID_PARAMETER,"count <= 0 ");
1229 indata = pims_ipc_data_create(0);
1232 ERR("ipc data created fail !");
1233 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1236 ret = _cal_ipc_marshal_char(view_uri,indata);
1237 if (ret != CALENDAR_ERROR_NONE)
1239 ERR("marshal fail");
1240 CAL_IPC_DATA_FREE(indata);
1243 ret = _cal_ipc_marshal_int(count,indata);
1244 if (ret != CALENDAR_ERROR_NONE)
1246 ERR("marshal fail");
1247 CAL_IPC_DATA_FREE(indata);
1250 for (i=0;i<count;i++)
1252 ret = _cal_ipc_marshal_int(record_id_array[i],indata);
1253 if (ret != CALENDAR_ERROR_NONE)
1255 ERR("marshal fail");
1256 CAL_IPC_DATA_FREE(indata);
1262 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_DELETE_RECORDS, indata, &outdata) != 0)
1264 ERR("pims_ipc_call failed");
1265 CAL_IPC_DATA_FREE(indata);
1266 return CALENDAR_ERROR_IPC;
1269 CAL_IPC_DATA_FREE(indata);
1274 unsigned int size = 0;
1275 ret = *(int*) pims_ipc_data_get(outdata,&size);
1277 if (ret == CALENDAR_ERROR_NONE)
1279 int transaction_ver = 0;
1280 transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
1281 _cal_client_ipc_set_change_version(transaction_ver);
1284 pims_ipc_data_destroy(outdata);
1288 ERR("ipc outdata is NULL");
1289 return CALENDAR_ERROR_IPC;
1296 API int calendar_db_delete_records_async(const char* view_uri, int ids[], int count, calendar_db_result_cb callback, void *user_data)
1298 int ret = CALENDAR_ERROR_NONE;
1299 pims_ipc_data_h indata = NULL;
1301 cal_client_db_async_userdata_s *async_data = NULL;
1303 retvm_if(view_uri==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"view_uri is NULL");
1304 retvm_if(callback==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"callback is NULL");
1307 indata = pims_ipc_data_create(0);
1310 ERR("ipc data created fail !");
1311 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1314 ret = _cal_ipc_marshal_char(view_uri,indata);
1315 if (ret != CALENDAR_ERROR_NONE)
1317 ERR("marshal fail");
1318 CAL_IPC_DATA_FREE(indata);
1321 ret = _cal_ipc_marshal_int(count,indata);
1322 if (ret != CALENDAR_ERROR_NONE)
1324 ERR("marshal fail");
1325 CAL_IPC_DATA_FREE(indata);
1328 for (i=0;i<count;i++)
1330 ret = _cal_ipc_marshal_int(ids[i],indata);
1331 if (ret != CALENDAR_ERROR_NONE)
1333 ERR("marshal fail");
1334 CAL_IPC_DATA_FREE(indata);
1339 async_data = (cal_client_db_async_userdata_s*)malloc(sizeof(cal_client_db_async_userdata_s));
1340 if (async_data == NULL)
1342 ERR("malloc fail !");
1343 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1344 CAL_IPC_DATA_FREE(indata);
1347 async_data->callback = callback;
1348 async_data->user_data = user_data;
1349 if (_cal_client_ipc_call_async(CAL_IPC_MODULE,CAL_IPC_SERVER_DB_DELETE_RECORDS,
1350 indata,__cal_client_db_delete_records_cb,async_data) != 0)
1352 ERR("pims_ipc_call_async failed");
1353 CAL_IPC_DATA_FREE(indata);
1354 return CALENDAR_ERROR_IPC;
1357 CAL_IPC_DATA_FREE(indata);
1362 API int calendar_db_get_changes_by_version(const char* view_uri, int calendar_book_id, int calendar_db_version, calendar_list_h* record_list, int* current_calendar_db_version )
1364 int ret = CALENDAR_ERROR_NONE;
1365 pims_ipc_data_h indata = NULL;
1366 pims_ipc_data_h outdata = NULL;
1368 retvm_if(view_uri==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"view_uri is NULL");
1369 retvm_if(record_list==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record_list is NULL");
1370 retvm_if(current_calendar_db_version==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"current_calendar_db_version is NULL");
1373 indata = pims_ipc_data_create(0);
1376 ERR("ipc data created fail !");
1377 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1380 ret = _cal_ipc_marshal_char(view_uri,indata);
1381 if (ret != CALENDAR_ERROR_NONE)
1383 ERR("marshal fail");
1384 CAL_IPC_DATA_FREE(indata);
1387 ret = _cal_ipc_marshal_int(calendar_book_id,indata);
1388 if (ret != CALENDAR_ERROR_NONE)
1390 ERR("marshal fail");
1391 CAL_IPC_DATA_FREE(indata);
1394 ret = _cal_ipc_marshal_int(calendar_db_version,indata);
1395 if (ret != CALENDAR_ERROR_NONE)
1397 ERR("marshal fail");
1398 CAL_IPC_DATA_FREE(indata);
1403 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_CHANGES_BY_VERSION, indata, &outdata) != 0)
1405 ERR("pims_ipc_call failed");
1406 CAL_IPC_DATA_FREE(indata);
1407 return CALENDAR_ERROR_IPC;
1410 CAL_IPC_DATA_FREE(indata);
1415 unsigned int size = 0;
1416 ret = *(int*) pims_ipc_data_get(outdata,&size);
1418 if (ret == CALENDAR_ERROR_NONE)
1420 ret = _cal_ipc_unmarshal_list(outdata,record_list);
1422 if (ret == CALENDAR_ERROR_NONE)
1424 ret = _cal_ipc_unmarshal_int(outdata,current_calendar_db_version);
1428 pims_ipc_data_destroy(outdata);
1432 ERR("ipc outdata is NULL");
1433 return CALENDAR_ERROR_IPC;
1439 API int calendar_db_get_current_version(int* calendar_db_version)
1441 int ret = CALENDAR_ERROR_NONE;
1442 pims_ipc_data_h indata = NULL;
1443 pims_ipc_data_h outdata = NULL;
1445 retvm_if(calendar_db_version==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"calendar_db_version is null");
1448 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_GET_CURRENT_VERSION, indata, &outdata) != 0)
1450 ERR("pims_ipc_call failed");
1451 return CALENDAR_ERROR_IPC;
1457 unsigned int size = 0;
1458 ret = *(int*) pims_ipc_data_get(outdata,&size);
1459 if (ret == CALENDAR_ERROR_NONE)
1461 ret = _cal_ipc_unmarshal_int(outdata,calendar_db_version);
1463 pims_ipc_data_destroy(outdata);
1467 ERR("ipc outdata is NULL");
1468 return CALENDAR_ERROR_IPC;
1474 API int calendar_db_add_changed_cb(const char* view_uri, calendar_db_changed_cb callback, void* user_data )
1478 cal_record_type_e type = CAL_RECORD_TYPE_INVALID;
1480 retv_if(NULL == view_uri || NULL == callback , CALENDAR_ERROR_INVALID_PARAMETER);
1482 type = _cal_view_get_type(view_uri);
1486 case CAL_RECORD_TYPE_CALENDAR:
1487 ret = _cal_inotify_subscribe(CAL_NOTI_TYPE_CALENDAR, CAL_NOTI_CALENDAR_CHANGED, callback, user_data);
1489 case CAL_RECORD_TYPE_EVENT:
1490 ret = _cal_inotify_subscribe(CAL_NOTI_TYPE_EVENT, CAL_NOTI_EVENT_CHANGED, callback, user_data);
1492 case CAL_RECORD_TYPE_TODO:
1493 ret = _cal_inotify_subscribe(CAL_NOTI_TYPE_TODO, CAL_NOTI_TODO_CHANGED, callback, user_data);
1496 ERR("Invalid view_uri(%s)", view_uri);
1497 return CALENDAR_ERROR_INVALID_PARAMETER;
1499 retvm_if(CALENDAR_ERROR_NONE != ret, ret, "_cal_inotify_subscribe() Failed(%d)", ret);
1501 return CALENDAR_ERROR_NONE;
1504 API int calendar_db_remove_changed_cb( const char* view_uri, calendar_db_changed_cb callback, void* user_data )
1508 cal_record_type_e type = CAL_RECORD_TYPE_INVALID;
1510 retv_if(NULL == view_uri || NULL == callback , CALENDAR_ERROR_INVALID_PARAMETER);
1512 type = _cal_view_get_type(view_uri);
1516 case CAL_RECORD_TYPE_CALENDAR:
1517 ret = _cal_inotify_unsubscribe_with_data(CAL_NOTI_CALENDAR_CHANGED, callback, user_data);
1519 case CAL_RECORD_TYPE_EVENT:
1520 ret = _cal_inotify_unsubscribe_with_data(CAL_NOTI_EVENT_CHANGED, callback, user_data);
1522 case CAL_RECORD_TYPE_TODO:
1523 ret = _cal_inotify_unsubscribe_with_data(CAL_NOTI_TODO_CHANGED, callback, user_data);
1526 ERR("Invalid view_uri(%s)", view_uri);
1527 return CALENDAR_ERROR_INVALID_PARAMETER;
1529 retvm_if(CALENDAR_ERROR_NONE != ret, ret, "_cal_inotify_unsubscribe_with_data() Failed(%d)", ret);
1531 return CALENDAR_ERROR_NONE;
1534 API int calendar_db_insert_vcalendars(const char* vcalendar_stream, int **record_id_array, int *count)
1536 int ret = CALENDAR_ERROR_NONE;
1537 pims_ipc_data_h indata = NULL;
1538 pims_ipc_data_h outdata = NULL;
1541 retvm_if(NULL == vcalendar_stream, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1544 indata = pims_ipc_data_create(0);
1547 ERR("ipc data created fail !");
1548 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1551 ret = _cal_ipc_marshal_char(vcalendar_stream,indata);
1552 if (ret != CALENDAR_ERROR_NONE)
1554 ERR("marshal fail");
1555 CAL_IPC_DATA_FREE(indata);
1559 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_INSERT_VCALENDARS, indata, &outdata) != 0)
1561 ERR("pims_ipc_call failed");
1562 CAL_IPC_DATA_FREE(indata);
1563 return CALENDAR_ERROR_IPC;
1565 CAL_IPC_DATA_FREE(indata);
1569 unsigned int size = 0;
1570 ret = *(int*) pims_ipc_data_get(outdata,&size);
1572 if (ret == CALENDAR_ERROR_NONE)
1574 int transaction_ver = 0;
1575 transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
1576 _cal_client_ipc_set_change_version(transaction_ver);
1579 if (ret == CALENDAR_ERROR_NONE && count != NULL && record_id_array != NULL)
1583 *count = *(int*) pims_ipc_data_get(outdata,&size);
1585 ids = (int*)malloc(sizeof(int)*(*count));
1588 pims_ipc_data_destroy(outdata);
1590 return CALENDAR_ERROR_OUT_OF_MEMORY;
1592 for(i=0;i<(*count);i++)
1594 ids[i] = *(int*) pims_ipc_data_get(outdata,&size);
1597 *record_id_array = ids;
1599 pims_ipc_data_destroy(outdata);
1603 ERR("ipc outdata is NULL");
1604 return CALENDAR_ERROR_IPC;
1610 API int calendar_db_insert_vcalendars_async(const char* vcalendar_stream, calendar_db_insert_result_cb callback, void *user_data)
1612 int ret = CALENDAR_ERROR_NONE;
1613 pims_ipc_data_h indata = NULL;
1614 cal_client_db_async_insert_userdata_s *async_data = NULL;
1616 retvm_if(vcalendar_stream==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"list is NULL");
1617 retvm_if(callback==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"list is NULL");
1620 indata = pims_ipc_data_create(0);
1623 ERR("ipc data created fail !");
1624 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1627 ret = _cal_ipc_marshal_char(vcalendar_stream,indata);
1628 if (ret != CALENDAR_ERROR_NONE)
1630 ERR("marshal fail");
1631 CAL_IPC_DATA_FREE(indata);
1636 async_data = (cal_client_db_async_insert_userdata_s*)malloc(sizeof(cal_client_db_async_insert_userdata_s));
1637 if (async_data == NULL)
1639 ERR("malloc fail !");
1640 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1641 CAL_IPC_DATA_FREE(indata);
1644 async_data->callback = callback;
1645 async_data->user_data = user_data;
1647 if (_cal_client_ipc_call_async(CAL_IPC_MODULE,CAL_IPC_SERVER_DB_INSERT_VCALENDARS,
1648 indata,__cal_client_db_insert_vcalendars_cb,async_data) != 0)
1650 ERR("pims_ipc_call_async failed");
1651 CAL_IPC_DATA_FREE(indata);
1652 return CALENDAR_ERROR_IPC;
1655 CAL_IPC_DATA_FREE(indata);
1660 API int calendar_db_replace_vcalendars(const char* vcalendar_stream, int *record_id_array, int count)
1662 int ret = CALENDAR_ERROR_NONE;
1663 pims_ipc_data_h indata = NULL;
1664 pims_ipc_data_h outdata = NULL;
1667 retvm_if(NULL == vcalendar_stream, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1668 retvm_if(NULL == record_id_array, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1669 retvm_if(count <= 0, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1672 indata = pims_ipc_data_create(0);
1675 ERR("ipc data created fail !");
1676 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1679 ret = _cal_ipc_marshal_char(vcalendar_stream,indata);
1680 if (ret != CALENDAR_ERROR_NONE)
1682 ERR("marshal fail");
1683 CAL_IPC_DATA_FREE(indata);
1686 ret = _cal_ipc_marshal_int(count,indata);
1687 if (ret != CALENDAR_ERROR_NONE)
1689 ERR("marshal fail");
1690 CAL_IPC_DATA_FREE(indata);
1693 for(i=0;i<count;i++)
1695 ret = _cal_ipc_marshal_int(record_id_array[i],indata);
1696 if (ret != CALENDAR_ERROR_NONE)
1698 ERR("marshal fail");
1699 CAL_IPC_DATA_FREE(indata);
1705 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_REPLACE_VCALENDARS, indata, &outdata) != 0)
1707 ERR("pims_ipc_call failed");
1708 CAL_IPC_DATA_FREE(indata);
1709 return CALENDAR_ERROR_IPC;
1711 CAL_IPC_DATA_FREE(indata);
1715 unsigned int size = 0;
1716 ret = *(int*) pims_ipc_data_get(outdata,&size);
1718 if (ret == CALENDAR_ERROR_NONE)
1720 int transaction_ver = 0;
1721 transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
1722 _cal_client_ipc_set_change_version(transaction_ver);
1725 pims_ipc_data_destroy(outdata);
1729 ERR("ipc outdata is NULL");
1730 return CALENDAR_ERROR_IPC;
1736 API int calendar_db_replace_vcalendars_async(const char* vcalendar_stream, int *record_id_array, int count, calendar_db_result_cb callback, void *user_data)
1738 int ret = CALENDAR_ERROR_NONE;
1739 pims_ipc_data_h indata = NULL;
1740 cal_client_db_async_userdata_s *async_data = NULL;
1743 retvm_if(NULL == vcalendar_stream, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1744 retvm_if(NULL == record_id_array, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1745 retvm_if(count <= 0, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1748 indata = pims_ipc_data_create(0);
1751 ERR("ipc data created fail !");
1752 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1755 ret = _cal_ipc_marshal_char(vcalendar_stream,indata);
1756 if (ret != CALENDAR_ERROR_NONE)
1758 ERR("marshal fail");
1759 CAL_IPC_DATA_FREE(indata);
1762 ret = _cal_ipc_marshal_int(count,indata);
1763 if (ret != CALENDAR_ERROR_NONE)
1765 ERR("marshal fail");
1766 CAL_IPC_DATA_FREE(indata);
1769 for(i=0;i<count;i++)
1771 ret = _cal_ipc_marshal_int(record_id_array[i],indata);
1772 if (ret != CALENDAR_ERROR_NONE)
1774 ERR("marshal fail");
1775 CAL_IPC_DATA_FREE(indata);
1780 async_data = (cal_client_db_async_userdata_s*)malloc(sizeof(cal_client_db_async_userdata_s));
1781 if (async_data == NULL)
1783 ERR("malloc fail !");
1784 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1785 CAL_IPC_DATA_FREE(indata);
1788 async_data->callback = callback;
1789 async_data->user_data = user_data;
1791 if (_cal_client_ipc_call_async(CAL_IPC_MODULE,CAL_IPC_SERVER_DB_REPLACE_VCALENDARS,
1792 indata,__cal_client_db_replace_vcalendars_cb,async_data) != 0)
1794 ERR("pims_ipc_call_async failed");
1795 CAL_IPC_DATA_FREE(indata);
1796 return CALENDAR_ERROR_IPC;
1799 CAL_IPC_DATA_FREE(indata);
1804 API int calendar_db_replace_record(calendar_record_h record, int record_id)
1806 int ret = CALENDAR_ERROR_NONE;
1807 pims_ipc_data_h indata = NULL;
1808 pims_ipc_data_h outdata = NULL;
1810 retvm_if(record==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record is NULL");
1811 retvm_if(record_id < 0, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1814 indata = pims_ipc_data_create(0);
1817 ERR("ipc data created fail !");
1818 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1821 ret = _cal_ipc_marshal_record(record,indata);
1822 if (ret != CALENDAR_ERROR_NONE)
1824 ERR("marshal fail");
1825 CAL_IPC_DATA_FREE(indata);
1828 ret = _cal_ipc_marshal_int(record_id,indata);
1829 if (ret != CALENDAR_ERROR_NONE)
1831 ERR("marshal fail");
1832 CAL_IPC_DATA_FREE(indata);
1837 if (_cal_client_ipc_call(CAL_IPC_MODULE, CAL_IPC_SERVER_DB_REPLACE_RECORD, indata, &outdata) != 0)
1839 ERR("pims_ipc_call failed");
1840 CAL_IPC_DATA_FREE(indata);
1841 return CALENDAR_ERROR_IPC;
1844 CAL_IPC_DATA_FREE(indata);
1849 unsigned int size = 0;
1850 ret = *(int*) pims_ipc_data_get(outdata,&size);
1851 if (ret == CALENDAR_ERROR_NONE)
1853 int transaction_ver = 0;
1854 transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
1855 _cal_client_ipc_set_change_version(transaction_ver);
1857 pims_ipc_data_destroy(outdata);
1861 ERR("ipc outdata is NULL");
1862 return CALENDAR_ERROR_IPC;
1868 API int calendar_db_replace_records(calendar_list_h record_list, int *record_id_array, int count)
1870 int ret = CALENDAR_ERROR_NONE;
1871 pims_ipc_data_h indata = NULL;
1872 pims_ipc_data_h outdata = NULL;
1875 retvm_if(record_list==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record is NULL");
1876 retvm_if(record_id_array==NULL,CALENDAR_ERROR_INVALID_PARAMETER,"record_id_array is NULL");
1877 retvm_if(count <= 0, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1880 indata = pims_ipc_data_create(0);
1883 ERR("ipc data created fail !");
1884 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1887 ret = _cal_ipc_marshal_list(record_list,indata);
1888 if (ret != CALENDAR_ERROR_NONE)
1890 ERR("marshal fail");
1891 CAL_IPC_DATA_FREE(indata);
1894 ret = _cal_ipc_marshal_int(count,indata);
1895 if (ret != CALENDAR_ERROR_NONE)
1897 ERR("marshal fail");
1898 CAL_IPC_DATA_FREE(indata);
1901 for(i=0;i<count;i++)
1903 ret = _cal_ipc_marshal_int(record_id_array[i],indata);
1904 if (ret != CALENDAR_ERROR_NONE)
1906 ERR("marshal fail");
1907 CAL_IPC_DATA_FREE(indata);
1913 if (_cal_client_ipc_call( CAL_IPC_MODULE, CAL_IPC_SERVER_DB_REPLACE_RECORDS, indata, &outdata) != 0)
1915 ERR("pims_ipc_call failed");
1916 CAL_IPC_DATA_FREE(indata);
1917 return CALENDAR_ERROR_IPC;
1920 CAL_IPC_DATA_FREE(indata);
1925 unsigned int size = 0;
1926 ret = *(int*) pims_ipc_data_get(outdata,&size);
1927 if (ret == CALENDAR_ERROR_NONE)
1929 int transaction_ver = 0;
1930 transaction_ver = *(int*)pims_ipc_data_get(outdata,&size);
1931 _cal_client_ipc_set_change_version(transaction_ver);
1933 pims_ipc_data_destroy(outdata);
1937 ERR("ipc outdata is NULL");
1938 return CALENDAR_ERROR_IPC;
1944 API int calendar_db_replace_records_async(calendar_list_h record_list, int *record_id_array, int count, calendar_db_result_cb callback, void *user_data)
1946 int ret = CALENDAR_ERROR_NONE;
1947 pims_ipc_data_h indata = NULL;
1948 cal_client_db_async_userdata_s *async_data = NULL;
1951 retvm_if(NULL == record_list, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1952 retvm_if(NULL == record_id_array, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1953 retvm_if(count <= 0, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
1956 indata = pims_ipc_data_create(0);
1959 ERR("ipc data created fail !");
1960 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1963 ret = _cal_ipc_marshal_list(record_list,indata);
1964 if (ret != CALENDAR_ERROR_NONE)
1966 ERR("marshal fail");
1967 CAL_IPC_DATA_FREE(indata);
1970 ret = _cal_ipc_marshal_int(count,indata);
1971 if (ret != CALENDAR_ERROR_NONE)
1973 ERR("marshal fail");
1974 CAL_IPC_DATA_FREE(indata);
1977 for(i=0;i<count;i++)
1979 ret = _cal_ipc_marshal_int(record_id_array[i],indata);
1980 if (ret != CALENDAR_ERROR_NONE)
1982 ERR("marshal fail");
1983 CAL_IPC_DATA_FREE(indata);
1988 async_data = (cal_client_db_async_userdata_s*)malloc(sizeof(cal_client_db_async_userdata_s));
1989 if (async_data == NULL)
1991 ERR("malloc fail !");
1992 ret = CALENDAR_ERROR_OUT_OF_MEMORY;
1993 CAL_IPC_DATA_FREE(indata);
1996 async_data->callback = callback;
1997 async_data->user_data = user_data;
1999 if (_cal_client_ipc_call_async(CAL_IPC_MODULE,CAL_IPC_SERVER_DB_REPLACE_RECORDS,
2000 indata,__cal_client_db_replace_records_cb,async_data) != 0)
2002 ERR("pims_ipc_call_async failed");
2003 CAL_IPC_DATA_FREE(indata);
2004 return CALENDAR_ERROR_IPC;
2007 CAL_IPC_DATA_FREE(indata);
2012 API int calendar_db_get_last_change_version(int* last_version)
2014 int ret = CALENDAR_ERROR_NONE;
2016 retvm_if(NULL == last_version, CALENDAR_ERROR_INVALID_PARAMETER, "Invalid parameter");
2017 *last_version = _cal_client_ipc_get_change_version();