4 * Copyright (c) 2012 - 2015 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.
26 #include "cal_internal.h"
27 #include "cal_typedef.h"
29 #include "cal_dbus_helper.h"
32 #include "cal_client_handle.h"
33 #include "cal_client_reminder.h"
34 #include "cal_client_db_helper.h"
36 #define __CAL_CLIENT_ACCESS_MAX 10
37 #define __CAL_CLIENT_ALLOW_USEC 25000
38 #define CAL_LIMIT_ACCESS_FRONT(uri) \
39 DBG("uri[%s]", uri); \
40 int is_schedule = 0; \
42 if (CAL_STRING_EQUAL == strncmp(uri, CALENDAR_VIEW_EVENT, strlen(CALENDAR_VIEW_EVENT))) { \
44 struct timeval hold = {0}; \
45 struct timeval diff = {0}; \
46 gettimeofday(&hold, NULL); \
47 timersub(&hold, &__g_release_time, &diff); \
48 DBG("%ld.%ld sec", diff.tv_sec, diff.tv_usec); \
49 if (diff.tv_sec / 1000 == 0 && diff.tv_usec < __CAL_CLIENT_ALLOW_USEC) { \
50 if (__g_access_count < __CAL_CLIENT_ACCESS_MAX) { \
52 DBG("--count (%d)", __g_access_count); \
56 __g_access_count = 0; \
57 timerclear(&__g_release_time); \
61 __g_access_count = 0; \
62 timerclear(&__g_release_time); \
67 #define CAL_LIMIT_ACCESS_BACK \
70 gettimeofday(&__g_release_time, NULL); \
74 static int __g_access_count = 0;
75 static struct timeval __g_release_time;
77 static calDbus *cal_dbus_object;
79 static void _cal_dbus_cleanup(void)
84 static void _cal_dbus_name_owner_notify(GObject *object, GParamSpec *pspec, gpointer user_data)
88 GDBusProxy *proxy = G_DBUS_PROXY(object);
89 gchar *name_owner = g_dbus_proxy_get_name_owner(proxy);
92 DBG("name_owner[%s]", name_owner);
99 void cal_dbus_call_reminder_cb(GDBusConnection *connection,
100 const gchar *sender_name,
101 const gchar *object_path,
102 const gchar *interface_name,
103 const gchar *signal_name,
104 GVariant *parameters,
111 cal_dbus_utils_gvariant_to_stream(parameters, &stream_size, &stream);
112 DBG("stream[%s]", stream);
113 cal_client_reminder_call_subscribe(stream);
116 unsigned int cal_dbus_subscribe_signal(char *signal_name, GDBusSignalCallback callback,
117 gpointer user_data, GDestroyNotify user_data_free_func)
119 GDBusConnection *conn = g_dbus_proxy_get_connection(G_DBUS_PROXY(cal_dbus_object));
121 return g_dbus_connection_signal_subscribe(conn,
127 G_DBUS_SIGNAL_FLAGS_NONE,
130 user_data_free_func);
133 void cal_dbus_unsubscribe_signal(unsigned int id)
135 GDBusConnection *conn = g_dbus_proxy_get_connection(G_DBUS_PROXY(cal_dbus_object));
136 g_dbus_connection_signal_unsubscribe(conn, id);
139 static int _register_resource(void)
141 GError *error = NULL;
144 cal_dbus_call_register_resource_sync(cal_dbus_object, &ret, NULL, &error);
146 ERR("cal_dbus_call_register_resource_sync() Fail[%s]", error->message);
148 return CALENDAR_ERROR_IPC;
153 static int _unregister_resource(void)
155 GError *error = NULL;
158 cal_dbus_call_unregister_resource_sync(cal_dbus_object, &ret, NULL, &error);
160 ERR("cal_dbus_call_register_resource_sync() Fail[%s]", error->message);
162 return CALENDAR_ERROR_IPC;
167 int cal_dbus_start(void)
169 if (cal_dbus_object) {
170 DBG("Already exists");
171 return CALENDAR_ERROR_NONE;
174 GError *error = NULL;
175 cal_dbus_object = cal_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SESSION,
176 G_DBUS_PROXY_FLAGS_NONE,
181 if (NULL == cal_dbus_object) {
182 ERR("cal_dbus_proxy_new_for_bus_sync() Fail");
184 ERR("error[%s]", error->message);
187 return CALENDAR_ERROR_IPC;
190 _register_resource();
193 id = g_signal_connect(cal_dbus_object, "notify::g-name-owner",
194 G_CALLBACK(_cal_dbus_name_owner_notify), NULL);
196 ERR("g_signal_connect() Fail");
197 return CALENDAR_ERROR_IPC;
200 return CALENDAR_ERROR_NONE;
203 int cal_dbus_stop(void)
205 if (NULL == cal_dbus_object) {
207 return CALENDAR_ERROR_NONE;
210 DBG("[ALL CONNECTION IS CLOSED]");
212 _unregister_resource();
215 g_object_unref(cal_dbus_object);
216 cal_dbus_object = NULL;
218 return CALENDAR_ERROR_NONE;
221 int cal_dbus_recovery(void)
225 if (cal_dbus_object) {
227 g_object_unref(cal_dbus_object);
228 cal_dbus_object = NULL;
231 GError *error = NULL;
232 cal_dbus_object = cal_dbus_proxy_new_for_bus_sync(G_BUS_TYPE_SESSION,
233 G_DBUS_PROXY_FLAGS_NONE,
238 if (NULL == cal_dbus_object) {
239 ERR("cal_dbus_proxy_new_for_bus_sync() Fail");
241 ERR("error[%s]", error->message);
244 return CALENDAR_ERROR_IPC;
248 id = g_signal_connect(cal_dbus_object, "notify::g-name-owner",
249 G_CALLBACK(_cal_dbus_name_owner_notify), NULL);
251 ERR("g_signal_connect() Fail");
252 return CALENDAR_ERROR_IPC;
255 return CALENDAR_ERROR_NONE;
258 int cal_dbus_insert_record(calendar_h handle, calendar_record_h record, int *out_id)
260 GError *error = NULL;
265 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
266 RETV_IF(NULL == record, CALENDAR_ERROR_INVALID_PARAMETER);
267 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
269 CAL_RECORD_RESET_COMMON((cal_record_s *)record);
270 CAL_LIMIT_ACCESS_FRONT(((cal_record_s *)record)->view_uri);
272 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
273 GVariant *arg_record = cal_dbus_utils_record_to_gvariant(record);
274 cal_dbus_call_insert_record_sync(cal_dbus_object, arg_handle, arg_record,
275 &id, &version, &ret, NULL, &error);
276 g_variant_unref(arg_record);
277 g_variant_unref(arg_handle);
279 ERR("cal_dbus_call_insert_record_sync() Fail[%s]", error->message);
280 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
281 ret = CALENDAR_ERROR_PERMISSION_DENIED;
283 ret = CALENDAR_ERROR_IPC;
287 cal_client_handle_set_version(handle, version);
291 CAL_LIMIT_ACCESS_BACK;
295 int cal_dbus_update_record(calendar_h handle, calendar_record_h record)
297 GError *error = NULL;
301 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
302 RETV_IF(NULL == record, CALENDAR_ERROR_INVALID_PARAMETER);
303 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
305 CAL_LIMIT_ACCESS_FRONT(((cal_record_s *)record)->view_uri);
307 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
308 GVariant *arg_record = cal_dbus_utils_record_to_gvariant(record);
309 cal_dbus_call_update_record_sync(cal_dbus_object, arg_handle, arg_record,
310 &version, &ret, NULL, &error);
311 g_variant_unref(arg_record);
312 g_variant_unref(arg_handle);
314 ERR("cal_dbus_call_update_record_sync() Fail[%s]", error->message);
315 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
316 ret = CALENDAR_ERROR_PERMISSION_DENIED;
318 ret = CALENDAR_ERROR_IPC;
322 cal_client_handle_set_version(handle, version);
324 CAL_LIMIT_ACCESS_BACK;
328 int cal_dbus_delete_record(calendar_h handle, const char *view_uri, int id)
330 GError *error = NULL;
334 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
335 RETV_IF(NULL == view_uri, CALENDAR_ERROR_INVALID_PARAMETER);
336 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
338 CAL_LIMIT_ACCESS_FRONT(view_uri);
340 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
341 cal_dbus_call_delete_record_sync(cal_dbus_object, arg_handle, view_uri, id,
342 &version, &ret, NULL, &error);
343 g_variant_unref(arg_handle);
345 ERR("cal_dbus_call_delete_record_sync() Fail[%s]", error->message);
346 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
347 ret = CALENDAR_ERROR_PERMISSION_DENIED;
349 ret = CALENDAR_ERROR_IPC;
353 cal_client_handle_set_version(handle, version);
355 CAL_LIMIT_ACCESS_BACK;
359 int cal_dbus_replace_record(calendar_h handle, calendar_record_h record, int id)
361 GError *error = NULL;
365 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
366 RETV_IF(NULL == record, CALENDAR_ERROR_INVALID_PARAMETER);
367 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
369 CAL_LIMIT_ACCESS_FRONT(((cal_record_s *)record)->view_uri);
371 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
372 GVariant *arg_record = cal_dbus_utils_record_to_gvariant(record);
373 cal_dbus_call_replace_record_sync(cal_dbus_object, arg_handle, arg_record, id,
374 &version, &ret, NULL, &error);
375 g_variant_unref(arg_record);
376 g_variant_unref(arg_handle);
378 ERR("cal_dbus_call_replace_record_sync() Fail[%s]", error->message);
379 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
380 ret = CALENDAR_ERROR_PERMISSION_DENIED;
382 ret = CALENDAR_ERROR_IPC;
386 cal_client_handle_set_version(handle, version);
388 CAL_LIMIT_ACCESS_BACK;
392 int cal_dbus_insert_records(calendar_h handle, calendar_list_h list,
393 int** out_ids, int* out_count)
395 GError *error = NULL;
400 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
401 RETV_IF(NULL == list, CALENDAR_ERROR_INVALID_PARAMETER);
402 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
404 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
405 GVariant *arg_list = cal_dbus_utils_list_to_gvariant(list);
406 GVariant *arg_ids = NULL;
407 cal_dbus_call_insert_records_sync(cal_dbus_object, arg_handle, arg_list,
408 &arg_ids, &count, &version, &ret, NULL, &error);
409 g_variant_unref(arg_list);
410 g_variant_unref(arg_handle);
412 ERR("cal_dbus_call_insert_records_sync() Fail[%s]", error->message);
413 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
414 ret = CALENDAR_ERROR_PERMISSION_DENIED;
416 ret = CALENDAR_ERROR_IPC;
421 cal_client_handle_set_version(handle, version);
424 cal_dbus_utils_gvariant_to_ids(arg_ids, count, &ids);
425 g_variant_unref(arg_ids);
438 int cal_dbus_update_records(calendar_h handle, calendar_list_h list)
440 GError *error = NULL;
444 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
445 RETV_IF(NULL == list, CALENDAR_ERROR_INVALID_PARAMETER);
446 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
448 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
449 GVariant *arg_list = cal_dbus_utils_list_to_gvariant(list);
450 cal_dbus_call_update_records_sync(cal_dbus_object, arg_handle, arg_list,
451 &version, &ret, NULL, &error);
452 g_variant_unref(arg_list);
453 g_variant_unref(arg_handle);
455 ERR("cal_dbus_call_update_records_sync() Fail[%s]", error->message);
456 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
457 ret = CALENDAR_ERROR_PERMISSION_DENIED;
459 ret = CALENDAR_ERROR_IPC;
463 cal_client_handle_set_version(handle, version);
468 int cal_dbus_delete_records(calendar_h handle, const char *view_uri, int *ids, int count)
470 GError *error = NULL;
474 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
475 RETV_IF(NULL == view_uri, CALENDAR_ERROR_INVALID_PARAMETER);
476 RETV_IF(NULL == ids, CALENDAR_ERROR_INVALID_PARAMETER);
477 RETV_IF(0 == count, CALENDAR_ERROR_INVALID_PARAMETER);
478 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
480 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
481 GVariant *arg_ids = cal_dbus_utils_ids_to_gvariant(ids, count);
482 cal_dbus_call_delete_records_sync(cal_dbus_object, arg_handle, view_uri,
483 arg_ids, count, &version, &ret, NULL, &error);
484 g_variant_unref(arg_ids);
485 g_variant_unref(arg_handle);
487 ERR("cal_dbus_call_delete_records_sync() Fail[%s]", error->message);
488 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
489 ret = CALENDAR_ERROR_PERMISSION_DENIED;
491 ret = CALENDAR_ERROR_IPC;
495 cal_client_handle_set_version(handle, version);
500 int cal_dbus_replace_records(calendar_h handle, calendar_list_h list, int *ids, int count)
502 GError *error = NULL;
506 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
507 RETV_IF(NULL == list, CALENDAR_ERROR_INVALID_PARAMETER);
508 RETV_IF(NULL == ids, CALENDAR_ERROR_INVALID_PARAMETER);
509 RETV_IF(0 == count, CALENDAR_ERROR_INVALID_PARAMETER);
510 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
512 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
513 GVariant *arg_list = cal_dbus_utils_list_to_gvariant(list);
514 GVariant *arg_ids = cal_dbus_utils_ids_to_gvariant(ids, count);
515 cal_dbus_call_replace_records_sync(cal_dbus_object, arg_handle, arg_list,
516 arg_ids, count, &version, &ret, NULL, &error);
517 g_variant_unref(arg_list);
518 g_variant_unref(arg_ids);
519 g_variant_unref(arg_handle);
521 ERR("cal_dbus_call_replace_records_sync() Fail[%s]", error->message);
522 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
523 ret = CALENDAR_ERROR_PERMISSION_DENIED;
525 ret = CALENDAR_ERROR_IPC;
529 cal_client_handle_set_version(handle, version);
534 int cal_dbus_get_record(calendar_h handle, const char *view_uri, int id,
535 calendar_record_h *out_record)
537 GError *error = NULL;
540 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
541 RETV_IF(NULL == out_record, CALENDAR_ERROR_INVALID_PARAMETER);
542 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
544 DBG("uri[%s]", view_uri);
545 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
546 GVariant *arg_record = NULL;
547 cal_dbus_call_get_record_sync(cal_dbus_object, arg_handle, view_uri, id,
548 &arg_record, &ret, NULL, &error);
549 g_variant_unref(arg_handle);
551 ERR("cal_dbus_call_get_record_sync() Fail[%s]", error->message);
552 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
553 ret = CALENDAR_ERROR_PERMISSION_DENIED;
555 ret = CALENDAR_ERROR_IPC;
560 if (CALENDAR_ERROR_NONE != ret) {
561 ERR("get_record() Fail(%d)", ret);
562 g_variant_unref(arg_record);
566 cal_dbus_utils_gvariant_to_record(arg_record, out_record);
567 g_variant_unref(arg_record);
572 int cal_dbus_get_all_records(calendar_h handle, const char *view_uri,
573 int offset, int limit, calendar_list_h *out_list)
575 GError *error = NULL;
578 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
579 RETV_IF(NULL == out_list, CALENDAR_ERROR_INVALID_PARAMETER);
580 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
582 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
583 GVariant *arg_list = NULL;
584 cal_dbus_call_get_all_records_sync(cal_dbus_object, arg_handle, view_uri,
585 offset, limit, &arg_list, &ret, NULL, &error);
586 g_variant_unref(arg_handle);
588 ERR("cal_dbus_call_get_all_records_sync() Fail[%s]", error->message);
589 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
590 ret = CALENDAR_ERROR_PERMISSION_DENIED;
592 ret = CALENDAR_ERROR_IPC;
597 if (CALENDAR_ERROR_NONE != ret) {
598 ERR("get_all_records() Fail(%d)", ret);
599 g_variant_unref(arg_list);
604 cal_dbus_utils_gvariant_to_list(arg_list, out_list);
605 g_variant_unref(arg_list);
608 calendar_list_first(*out_list);
613 int cal_dbus_get_records_with_query(calendar_h handle, calendar_query_h query,
614 int offset, int limit, calendar_list_h* out_list)
616 GError *error = NULL;
619 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
620 RETV_IF(NULL == out_list, CALENDAR_ERROR_INVALID_PARAMETER);
621 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
623 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
624 GVariant *arg_query = cal_dbus_utils_query_to_gvariant(query);
625 GVariant *arg_list = NULL;
626 cal_dbus_call_get_records_with_query_sync(cal_dbus_object, arg_handle, arg_query,
627 offset, limit, &arg_list, &ret, NULL, &error);
628 g_variant_unref(arg_query);
629 g_variant_unref(arg_handle);
631 ERR("cal_dbus_call_get_records_with_query_sync() Fail[%s]", error->message);
632 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
633 ret = CALENDAR_ERROR_PERMISSION_DENIED;
635 ret = CALENDAR_ERROR_IPC;
639 cal_dbus_utils_gvariant_to_list(arg_list, out_list);
640 g_variant_unref(arg_list);
643 calendar_list_first(*out_list);
648 int cal_dbus_get_count(calendar_h handle, const char *view_uri, int *out_count)
650 GError *error = NULL;
654 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
655 RETV_IF(NULL == out_count, CALENDAR_ERROR_INVALID_PARAMETER);
656 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
658 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
659 cal_dbus_call_get_count_sync(cal_dbus_object, arg_handle, view_uri,
660 &count, &ret, NULL, &error);
661 g_variant_unref(arg_handle);
663 ERR("cal_dbus_call_get_count_sync() Fail[%s]", error->message);
664 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
665 ret = CALENDAR_ERROR_PERMISSION_DENIED;
667 ret = CALENDAR_ERROR_IPC;
676 int cal_dbus_get_count_with_query(calendar_h handle, calendar_query_h query, int *out_count)
678 GError *error = NULL;
682 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
683 RETV_IF(NULL == out_count, CALENDAR_ERROR_INVALID_PARAMETER);
684 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
686 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
687 GVariant *arg_query = cal_dbus_utils_query_to_gvariant(query);
688 cal_dbus_call_get_count_with_query_sync(cal_dbus_object, arg_handle, arg_query,
689 &count, &ret, NULL, &error);
690 g_variant_unref(arg_query);
691 g_variant_unref(arg_handle);
693 ERR("cal_dbus_call_get_count_with_query_sync() Fail[%s]", error->message);
694 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
695 ret = CALENDAR_ERROR_PERMISSION_DENIED;
697 ret = CALENDAR_ERROR_IPC;
706 int cal_dbus_add_changed_cb(calendar_h handle, const char* view_uri,
707 void *callback, void* user_data)
709 GError *error = NULL;
712 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
713 RETV_IF(NULL == callback, CALENDAR_ERROR_INVALID_PARAMETER);
715 cal_dbus_call_check_permission_write_sync(cal_dbus_object, NULL, &error);
717 ERR("cal_dbus_call_check_permission_write_sync() Fail[%s]", error->message);
718 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
719 ret = CALENDAR_ERROR_PERMISSION_DENIED;
721 ret = CALENDAR_ERROR_IPC;
726 return cal_client_db_add_changed_cb(handle, view_uri, callback, user_data);
729 int cal_dbus_remove_changed_cb(calendar_h handle, const char* view_uri,
730 void *callback, void* user_data)
732 GError *error = NULL;
735 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
736 RETV_IF(NULL == callback, CALENDAR_ERROR_INVALID_PARAMETER);
738 cal_dbus_call_check_permission_write_sync(cal_dbus_object, NULL, &error);
740 ERR("cal_dbus_call_check_permission_write_sync() Fail[%s]", error->message);
741 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
742 ret = CALENDAR_ERROR_PERMISSION_DENIED;
744 ret = CALENDAR_ERROR_IPC;
748 return cal_client_db_remove_changed_cb(handle, view_uri, callback, user_data);
751 int cal_dbus_get_current_version(calendar_h handle, int *out_version)
753 GError *error = NULL;
757 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
758 RETV_IF(NULL == out_version, CALENDAR_ERROR_INVALID_PARAMETER);
759 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
761 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
762 cal_dbus_call_get_current_version_sync(cal_dbus_object, arg_handle,
763 &version, &ret, NULL, &error);
764 g_variant_unref(arg_handle);
766 ERR("cal_dbus_call_get_current_version_sync() Fail[%s]", error->message);
767 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
768 ret = CALENDAR_ERROR_PERMISSION_DENIED;
770 ret = CALENDAR_ERROR_IPC;
774 if (CALENDAR_ERROR_NONE != ret) {
775 ERR("server return Fail(%d)", ret);
778 *out_version = version;
783 int cal_dbus_get_last_change_version(calendar_h handle, int *out_version)
785 GError *error = NULL;
788 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
789 RETV_IF(NULL == out_version, CALENDAR_ERROR_INVALID_PARAMETER);
791 cal_dbus_call_check_permission_read_sync(cal_dbus_object, NULL, &error);
793 ERR("cal_dbus_call_check_permission_read_sync() Fail[%s]", error->message);
794 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
795 ret = CALENDAR_ERROR_PERMISSION_DENIED;
797 ret = CALENDAR_ERROR_IPC;
801 return cal_handle_get_version(handle, out_version);
804 int cal_dbus_get_changes_by_version(calendar_h handle, const char *view_uri,
805 int book_id, int in_version, calendar_list_h *out_list, int *out_version)
807 GError *error = NULL;
810 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
811 RETV_IF(NULL == view_uri, CALENDAR_ERROR_INVALID_PARAMETER);
812 RETV_IF(NULL == out_list, CALENDAR_ERROR_INVALID_PARAMETER);
813 RETV_IF(NULL == out_version, CALENDAR_ERROR_INVALID_PARAMETER);
814 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
816 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
817 GVariant *arg_list = NULL;
818 cal_dbus_call_get_changes_by_version_sync(cal_dbus_object, arg_handle, view_uri,
819 book_id, in_version, &arg_list, out_version, &ret, NULL, &error);
820 g_variant_unref(arg_handle);
822 ERR("cal_dbus_call_get_changes_by_version_sync() Fail[%s]", error->message);
823 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
824 ret = CALENDAR_ERROR_PERMISSION_DENIED;
826 ret = CALENDAR_ERROR_IPC;
830 cal_dbus_utils_gvariant_to_list(arg_list, out_list);
831 g_variant_unref(arg_list);
834 calendar_list_first(*out_list);
839 int cal_dbus_get_changes_exception_by_version(calendar_h handle, const char *view_uri,
840 int original_id, int version, calendar_list_h *out_list)
842 GError *error = NULL;
845 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
846 RETV_IF(NULL == view_uri, CALENDAR_ERROR_INVALID_PARAMETER);
847 RETV_IF(NULL == out_list, CALENDAR_ERROR_INVALID_PARAMETER);
848 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
850 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
851 GVariant *arg_list = NULL;
852 cal_dbus_call_get_changes_exception_by_version_sync(cal_dbus_object, arg_handle,
853 view_uri, original_id, version, &arg_list, &ret, NULL, &error);
854 g_variant_unref(arg_handle);
856 ERR("cal_dbus_call_get_changes_exception_by_version_sync() Fail[%s]", error->message);
857 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
858 ret = CALENDAR_ERROR_PERMISSION_DENIED;
860 ret = CALENDAR_ERROR_IPC;
864 cal_client_handle_set_version(handle, version);
866 cal_dbus_utils_gvariant_to_list(arg_list, out_list);
867 g_variant_unref(arg_list);
870 calendar_list_first(*out_list);
875 int cal_dbus_clean_after_sync(calendar_h handle, int book_id, int version)
877 GError *error = NULL;
880 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
881 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
883 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
884 cal_dbus_call_clean_after_sync_sync(cal_dbus_object, arg_handle, book_id, version,
886 g_variant_unref(arg_handle);
888 ERR("cal_dbus_call_clean_after_sync_sync() Fail[%s]", error->message);
889 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
890 ret = CALENDAR_ERROR_PERMISSION_DENIED;
892 ret = CALENDAR_ERROR_IPC;
900 int cal_dbus_insert_vcalendars(calendar_h handle, const char *stream,
901 int **out_ids, int *out_count)
903 GError *error = NULL;
907 GVariant *arg_ids = NULL;
909 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
910 RETV_IF(NULL == stream, CALENDAR_ERROR_INVALID_PARAMETER);
911 RETV_IF(NULL == out_count, CALENDAR_ERROR_INVALID_PARAMETER);
912 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
914 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
915 cal_dbus_call_insert_vcalendars_sync(cal_dbus_object, arg_handle, stream,
916 &arg_ids, &count, &version, &ret, NULL, &error);
917 g_variant_unref(arg_handle);
919 ERR("cal_dbus_call_insert_vcalendars_sync() Fail[%s]", error->message);
920 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
921 ret = CALENDAR_ERROR_PERMISSION_DENIED;
923 ret = CALENDAR_ERROR_IPC;
927 cal_client_handle_set_version(handle, version);
930 cal_dbus_utils_gvariant_to_ids(arg_ids, count, &ids);
931 g_variant_unref(arg_ids);
944 int cal_dbus_replace_vcalendars(calendar_h handle, const char *stream,
947 GError *error = NULL;
951 RETV_IF(NULL == handle, CALENDAR_ERROR_INVALID_PARAMETER);
952 RETV_IF(NULL == stream, CALENDAR_ERROR_INVALID_PARAMETER);
953 RETV_IF(NULL == ids, CALENDAR_ERROR_INVALID_PARAMETER);
954 RETV_IF(0 == count, CALENDAR_ERROR_INVALID_PARAMETER);
955 RETV_IF(NULL == cal_dbus_object, CALENDAR_ERROR_IPC);
957 GVariant *arg_handle = cal_dbus_utils_handle_to_gvariant(handle);
958 GVariant *arg_ids = cal_dbus_utils_ids_to_gvariant(ids, count);
959 cal_dbus_call_replace_vcalendars_sync(cal_dbus_object, arg_handle, stream,
960 arg_ids, count, &ret, &version, NULL, &error);
961 g_variant_unref(arg_ids);
962 g_variant_unref(arg_handle);
964 ERR("cal_dbus_call_replace_vcalendars_sync Fail[%s]", error->message);
965 if (G_DBUS_ERROR_ACCESS_DENIED == error->code)
966 ret = CALENDAR_ERROR_PERMISSION_DENIED;
968 ret = CALENDAR_ERROR_IPC;
972 cal_client_handle_set_version(handle, version);