216
* e_cal_backend_sync_refresh:
217
* @backend: An ECalBackendSync object.
218
* @cal: An EDataCal object.
220
* Calls the refresh method on the given backend.
222
* Returns: Status code.
226
ECalBackendSyncStatus
227
e_cal_backend_sync_refresh (ECalBackendSync *backend, EDataCal *cal)
229
ECalBackendSyncStatus status;
231
g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
232
g_return_val_if_fail (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->refresh_sync != NULL,
233
GNOME_Evolution_Calendar_UnsupportedMethod);
235
LOCK_WRAPPER (refresh_sync, (backend, cal));
214
241
* e_cal_backend_sync_create_object:
215
242
* @backend: An ECalBackendSync object.
216
243
* @cal: An EDataCal object.
479
506
* @tzid: ID of the timezone to retrieve.
480
507
* @object: Placeholder for the returned timezone.
482
* Calls the get_timezone method on the given backend.
509
* Calls the get_timezone_sync method on the given backend.
510
* This method is not mandatory on the backend, because here
511
* is used internal_get_timezone call to fetch timezone from
512
* it and that is transformed to a string. In other words,
513
* any object deriving from ECalBackendSync can implement only
514
* internal_get_timezone and can skip implementation of
515
* get_timezone_sync completely.
484
* Return value: Status code.
517
* Returns: Status code.
486
519
ECalBackendSyncStatus
487
520
e_cal_backend_sync_get_timezone (ECalBackendSync *backend, EDataCal *cal, const gchar *tzid, gchar **object)
489
ECalBackendSyncStatus status;
522
ECalBackendSyncStatus status = GNOME_Evolution_Calendar_ObjectNotFound;
491
524
g_return_val_if_fail (E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
493
LOCK_WRAPPER (get_timezone_sync, (backend, cal, tzid, object));
526
if (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->get_timezone_sync) {
527
LOCK_WRAPPER (get_timezone_sync, (backend, cal, tzid, object));
530
if (object && !*object) {
531
icaltimezone *zone = NULL;
533
if (backend->priv->mutex_lock)
534
g_mutex_lock (backend->priv->sync_mutex);
535
zone = e_cal_backend_internal_get_timezone (E_CAL_BACKEND (backend), tzid);
536
if (backend->priv->mutex_lock)
537
g_mutex_unlock (backend->priv->sync_mutex);
540
status = GNOME_Evolution_Calendar_ObjectNotFound;
542
icalcomponent *icalcomp;
544
icalcomp = icaltimezone_get_component (zone);
547
status = GNOME_Evolution_Calendar_InvalidObject;
549
*object = icalcomponent_as_ical_string_r (icalcomp);
550
status = GNOME_Evolution_Calendar_Success;
650
_e_cal_backend_get_cal_address (ECalBackend *backend, EDataCal *cal)
710
_e_cal_backend_get_cal_address (ECalBackend *backend, EDataCal *cal, EServerMethodContext context)
652
712
ECalBackendSyncStatus status;
653
713
gchar *address = NULL;
655
715
status = e_cal_backend_sync_get_cal_address (E_CAL_BACKEND_SYNC (backend), cal, &address);
657
e_data_cal_notify_cal_address (cal, status, address);
717
e_data_cal_notify_cal_address (cal, context, status, address);
659
719
g_free (address);
663
_e_cal_backend_get_alarm_email_address (ECalBackend *backend, EDataCal *cal)
723
_e_cal_backend_get_alarm_email_address (ECalBackend *backend, EDataCal *cal, EServerMethodContext context)
665
725
ECalBackendSyncStatus status;
666
726
gchar *address = NULL;
668
728
status = e_cal_backend_sync_get_alarm_email_address (E_CAL_BACKEND_SYNC (backend), cal, &address);
670
e_data_cal_notify_alarm_email_address (cal, status, address);
730
e_data_cal_notify_alarm_email_address (cal, context, status, address);
672
732
g_free (address);
676
_e_cal_backend_get_ldap_attribute (ECalBackend *backend, EDataCal *cal)
736
_e_cal_backend_get_ldap_attribute (ECalBackend *backend, EDataCal *cal, EServerMethodContext context)
678
738
ECalBackendSyncStatus status;
679
739
gchar *attribute = NULL;
681
741
status = e_cal_backend_sync_get_ldap_attribute (E_CAL_BACKEND_SYNC (backend), cal, &attribute);
683
e_data_cal_notify_ldap_attribute (cal, status, attribute);
743
e_data_cal_notify_ldap_attribute (cal, context, status, attribute);
685
745
g_free (attribute);
689
_e_cal_backend_get_static_capabilities (ECalBackend *backend, EDataCal *cal)
749
_e_cal_backend_get_static_capabilities (ECalBackend *backend, EDataCal *cal, EServerMethodContext context)
691
751
ECalBackendSyncStatus status;
692
752
gchar *capabilities = NULL;
694
754
status = e_cal_backend_sync_get_static_capabilities (E_CAL_BACKEND_SYNC (backend), cal, &capabilities);
696
e_data_cal_notify_static_capabilities (cal, status, capabilities);
756
e_data_cal_notify_static_capabilities (cal, context, status, capabilities);
698
758
g_free (capabilities);
702
_e_cal_backend_open (ECalBackend *backend, EDataCal *cal, gboolean only_if_exists,
762
_e_cal_backend_open (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, gboolean only_if_exists,
703
763
const gchar *username, const gchar *password)
705
765
ECalBackendSyncStatus status;
707
767
status = e_cal_backend_sync_open (E_CAL_BACKEND_SYNC (backend), cal, only_if_exists, username, password);
709
e_data_cal_notify_open (cal, status);
713
_e_cal_backend_remove (ECalBackend *backend, EDataCal *cal)
769
e_data_cal_notify_open (cal, context, status);
773
_e_cal_backend_refresh (ECalBackend *backend, EDataCal *cal, EServerMethodContext context)
775
ECalBackendSyncStatus status;
777
status = e_cal_backend_sync_refresh (E_CAL_BACKEND_SYNC (backend), cal);
779
e_data_cal_notify_refresh (cal, context, status);
783
_e_cal_backend_remove (ECalBackend *backend, EDataCal *cal, EServerMethodContext context)
715
785
ECalBackendSyncStatus status;
717
787
status = e_cal_backend_sync_remove (E_CAL_BACKEND_SYNC (backend), cal);
719
e_data_cal_notify_remove (cal, status);
789
e_data_cal_notify_remove (cal, context, status);
723
_e_cal_backend_create_object (ECalBackend *backend, EDataCal *cal, const gchar *calobj)
793
_e_cal_backend_create_object (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *calobj)
725
795
ECalBackendSyncStatus status;
726
796
gchar *uid = NULL, *modified_calobj = (gchar *) calobj;
728
798
status = e_cal_backend_sync_create_object (E_CAL_BACKEND_SYNC (backend), cal, &modified_calobj, &uid);
730
e_data_cal_notify_object_created (cal, status, uid, modified_calobj);
800
e_data_cal_notify_object_created (cal, context, status, uid, modified_calobj);
732
802
/* free memory */
748
818
calobj, mod, &old_object, &new_object);
751
e_data_cal_notify_object_modified (cal, status, old_object, new_object);
821
e_data_cal_notify_object_modified (cal, context, status, old_object, new_object);
753
e_data_cal_notify_object_modified (cal, status, old_object, calobj);
823
e_data_cal_notify_object_modified (cal, context, status, old_object, calobj);
755
825
g_free (old_object);
756
826
g_free (new_object);
760
_e_cal_backend_remove_object (ECalBackend *backend, EDataCal *cal, const gchar *uid, const gchar *rid, CalObjModType mod)
830
_e_cal_backend_remove_object (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *uid, const gchar *rid, CalObjModType mod)
762
832
ECalBackendSyncStatus status;
763
833
gchar *object = NULL, *old_object = NULL;
773
843
id->rid = g_strdup (rid);
776
e_data_cal_notify_object_removed (cal, status, id, old_object, object);
846
e_data_cal_notify_object_removed (cal, context, status, id, old_object, object);
778
e_data_cal_notify_object_modified (cal, status, old_object, object);
848
e_data_cal_notify_object_modified (cal, context, status, old_object, object);
780
850
e_cal_component_free_id (id);
782
e_data_cal_notify_object_removed (cal, status, NULL, old_object, object);
852
e_data_cal_notify_object_removed (cal, context, status, NULL, old_object, object);
784
854
g_free (old_object);
789
_e_cal_backend_discard_alarm (ECalBackend *backend, EDataCal *cal, const gchar *uid, const gchar *auid)
859
_e_cal_backend_discard_alarm (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *uid, const gchar *auid)
791
861
ECalBackendSyncStatus status;
793
863
status = e_cal_backend_sync_discard_alarm (E_CAL_BACKEND_SYNC (backend), cal, uid, auid);
795
e_data_cal_notify_alarm_discarded (cal, status);
865
e_data_cal_notify_alarm_discarded (cal, context, status);
799
_e_cal_backend_receive_objects (ECalBackend *backend, EDataCal *cal, const gchar *calobj)
869
_e_cal_backend_receive_objects (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *calobj)
801
871
ECalBackendSyncStatus status;
803
873
status = e_cal_backend_sync_receive_objects (E_CAL_BACKEND_SYNC (backend), cal, calobj);
805
e_data_cal_notify_objects_received (cal, status);
875
e_data_cal_notify_objects_received (cal, context, status);
809
_e_cal_backend_send_objects (ECalBackend *backend, EDataCal *cal, const gchar *calobj)
879
_e_cal_backend_send_objects (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *calobj)
811
881
ECalBackendSyncStatus status;
812
882
GList *users = NULL;
813
883
gchar *modified_calobj = NULL;
815
885
status = e_cal_backend_sync_send_objects (E_CAL_BACKEND_SYNC (backend), cal, calobj, &users, &modified_calobj);
816
e_data_cal_notify_objects_sent (cal, status, users, modified_calobj);
886
e_data_cal_notify_objects_sent (cal, context, status, users, modified_calobj);
818
888
g_list_foreach (users, (GFunc) g_free, NULL);
819
889
g_list_free (users);
824
_e_cal_backend_get_default_object (ECalBackend *backend, EDataCal *cal)
894
_e_cal_backend_get_default_object (ECalBackend *backend, EDataCal *cal, EServerMethodContext context)
826
896
ECalBackendSyncStatus status;
827
897
gchar *object = NULL;
829
899
status = e_cal_backend_sync_get_default_object (E_CAL_BACKEND_SYNC (backend), cal, &object);
831
e_data_cal_notify_default_object (cal, status, object);
901
e_data_cal_notify_default_object (cal, context, status, object);
837
_e_cal_backend_get_object (ECalBackend *backend, EDataCal *cal, const gchar *uid, const gchar *rid)
907
_e_cal_backend_get_object (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *uid, const gchar *rid)
839
909
ECalBackendSyncStatus status;
840
910
gchar *object = NULL;
842
912
status = e_cal_backend_sync_get_object (E_CAL_BACKEND_SYNC (backend), cal, uid, rid, &object);
844
e_data_cal_notify_object (cal, status, object);
914
e_data_cal_notify_object (cal, context, status, object);
850
_e_cal_backend_get_attachment_list (ECalBackend *backend, EDataCal *cal, const gchar *uid, const gchar *rid)
920
_e_cal_backend_get_attachment_list (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *uid, const gchar *rid)
852
922
ECalBackendSyncStatus status;
853
923
GSList *list = NULL;
855
925
status = e_cal_backend_sync_get_attachment_list (E_CAL_BACKEND_SYNC (backend), cal, uid, rid, &list);
857
e_data_cal_notify_attachment_list (cal, status, list);
927
e_data_cal_notify_attachment_list (cal, context, status, list);
859
929
g_slist_foreach (list, (GFunc) g_free, NULL);
864
_e_cal_backend_get_object_list (ECalBackend *backend, EDataCal *cal, const gchar *sexp)
934
_e_cal_backend_get_object_list (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *sexp)
866
936
ECalBackendSyncStatus status;
867
937
GList *objects = NULL, *l;
869
939
status = e_cal_backend_sync_get_object_list (E_CAL_BACKEND_SYNC (backend), cal, sexp, &objects);
871
e_data_cal_notify_object_list (cal, status, objects);
941
e_data_cal_notify_object_list (cal, context, status, objects);
873
943
for (l = objects; l; l = l->next)
874
944
g_free (l->data);
929
999
e_cal_backend_sync_add_timezone (E_CAL_BACKEND_SYNC (backend), cal, object);
932
e_data_cal_notify_timezone_requested (cal, status, object);
1002
e_data_cal_notify_timezone_requested (cal, context, status, object);
934
1004
g_free (object);
938
_e_cal_backend_add_timezone (ECalBackend *backend, EDataCal *cal, const gchar *tzobj)
1008
_e_cal_backend_add_timezone (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *tzobj)
940
1010
ECalBackendSyncStatus status;
942
1012
status = e_cal_backend_sync_add_timezone (E_CAL_BACKEND_SYNC (backend), cal, tzobj);
944
e_data_cal_notify_timezone_added (cal, status, tzobj);
1014
e_data_cal_notify_timezone_added (cal, context, status, tzobj);
1017
/* The default implementation is looking for timezone in the ical's builtin timezones,
1018
and if that fails, then it tries to extract the location from the tzid and get the
1019
timezone based on it. If even that fails, then it's returning UTC timezone.
1020
That means, that any object deriving from ECalBackendSync is supposed to implement
1021
this function for checking for a timezone in its own timezone cache, and if that
1022
fails, then call parent's object internal_get_timezone, and that's all.
947
1024
static icaltimezone *
948
1025
_e_cal_backend_internal_get_timezone (ECalBackend *backend, const gchar *tzid)
1027
icaltimezone *zone = NULL;
952
1029
if (!tzid || !*tzid)
955
for (i = 0; tzid [i]; i++) {
1032
zone = icaltimezone_get_builtin_timezone_from_tzid (tzid);
1035
const gchar *s, *slash1 = NULL, *slash2 = NULL;
1037
/* get builtin by a location, if any */
1038
for (s = tzid; *s; s++) {
1046
zone = icaltimezone_get_builtin_timezone (slash1 + 1);
1048
zone = icaltimezone_get_builtin_timezone (tzid);
960
/* try if it contains only location of the timezone */
961
return slashes == 1 ? icaltimezone_get_builtin_timezone (tzid) : NULL;
1052
zone = icaltimezone_get_utc_timezone ();
965
_e_cal_backend_set_default_zone (ECalBackend *backend, EDataCal *cal, const gchar *tz)
1058
_e_cal_backend_set_default_zone (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *tz)
967
1060
ECalBackendSyncStatus status;
969
1062
status = e_cal_backend_sync_set_default_zone (E_CAL_BACKEND_SYNC (backend), cal, tz);
971
e_data_cal_notify_default_timezone_set (cal, status);
1064
e_data_cal_notify_default_timezone_set (cal, context, status);
975
_e_cal_backend_set_default_timezone (ECalBackend *backend, EDataCal *cal, const gchar *tzid)
1068
_e_cal_backend_set_default_timezone (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *tzid)
977
1070
ECalBackendSyncStatus status;
979
1072
status = e_cal_backend_sync_set_default_timezone (E_CAL_BACKEND_SYNC (backend), cal, tzid);
981
e_data_cal_notify_default_timezone_set (cal, status);
1074
e_data_cal_notify_default_timezone_set (cal, context, status);
985
_e_cal_backend_get_changes (ECalBackend *backend, EDataCal *cal, const gchar *change_id)
1078
_e_cal_backend_get_changes (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, const gchar *change_id)
987
1080
ECalBackendSyncStatus status;
988
1081
GList *adds = NULL, *modifies = NULL, *deletes = NULL, *l;
1009
_e_cal_backend_get_free_busy (ECalBackend *backend, EDataCal *cal, GList *users, time_t start, time_t end)
1102
_e_cal_backend_get_free_busy (ECalBackend *backend, EDataCal *cal, EServerMethodContext context, GList *users, time_t start, time_t end)
1011
1104
ECalBackendSyncStatus status;
1012
1105
GList *freebusy = NULL, *l;
1014
1107
status = e_cal_backend_sync_get_free_busy (E_CAL_BACKEND_SYNC (backend), cal, users, start, end, &freebusy);
1016
e_data_cal_notify_free_busy (cal, status, freebusy);
1109
e_data_cal_notify_free_busy (cal, context, status, freebusy);
1018
1111
for (l = freebusy; l; l = l->next)
1019
1112
g_free (l->data);
1086
1180
object_class->dispose = e_cal_backend_sync_dispose;
1090
* e_cal_backend_get_type:
1092
* Registers the ECalBackendSync class if needed.
1094
* Return value: The ID of the ECalBackendSync class.
1097
e_cal_backend_sync_get_type (void)
1099
static GType type = 0;
1103
sizeof (ECalBackendSyncClass),
1104
NULL, /* base_class_init */
1105
NULL, /* base_class_finalize */
1106
(GClassInitFunc) e_cal_backend_sync_class_init,
1107
NULL, /* class_finalize */
1108
NULL, /* class_data */
1109
sizeof (ECalBackendSync),
1110
0, /* n_preallocs */
1111
(GInstanceInitFunc) e_cal_backend_sync_init
1114
type = g_type_register_static (E_TYPE_CAL_BACKEND, "ECalBackendSync", &info, 0);