diff options
| author | Milan Crha <mcrha@redhat.com> | 2010-12-08 14:30:53 +0100 |
|---|---|---|
| committer | Milan Crha <mcrha@redhat.com> | 2010-12-08 14:30:53 +0100 |
| commit | b47659bfaac7810857f201fc2692961325277162 (patch) | |
| tree | 5ced510856e64e38b29c644586f8486c5d037507 | |
| parent | 7e947fef2fb5d1f7d812395b51d9c08358477f65 (diff) | |
| download | evolution-data-server-b47659bfaac7810857f201fc2692961325277162.tar.gz | |
Bug #631568 - Scheduling Meetings with CalDAV calendars
| -rw-r--r-- | calendar/backends/caldav/e-cal-backend-caldav.c | 105 |
1 files changed, 70 insertions, 35 deletions
diff --git a/calendar/backends/caldav/e-cal-backend-caldav.c b/calendar/backends/caldav/e-cal-backend-caldav.c index 14ec221b9..cb3b0fee5 100644 --- a/calendar/backends/caldav/e-cal-backend-caldav.c +++ b/calendar/backends/caldav/e-cal-backend-caldav.c @@ -2147,7 +2147,7 @@ caldav_synch_slave_loop (gpointer data) } static gchar * -get_users_email (const gchar *username, const gchar *may_append) +maybe_append_email_domain (const gchar *username, const gchar *may_append) { if (!username || !*username) return NULL; @@ -2158,6 +2158,36 @@ get_users_email (const gchar *username, const gchar *may_append) return g_strconcat (username, may_append, NULL); } +static gchar * +get_usermail (ECalBackend *backend) +{ + ECalBackendCalDAV *cbdav; + ECalBackendCalDAVPrivate *priv; + ESource *source; + gchar *res = NULL; + + g_return_val_if_fail (backend != NULL, NULL); + + source = e_cal_backend_get_source (backend); + if (source) { + res = e_source_get_duped_property (source, "usermail"); + if (res && *res) + return res; + + g_free (res); + res = NULL; + } + + cbdav = E_CAL_BACKEND_CALDAV (backend); + priv = E_CAL_BACKEND_CALDAV_GET_PRIVATE (cbdav); + + if (priv && priv->is_google && priv->username) { + res = maybe_append_email_domain (priv->username, "@gmail.com"); + } + + return res; +} + /* ************************************************************************* */ /* ********** ECalBackendSync virtual function implementation ************* */ @@ -2187,17 +2217,7 @@ caldav_get_cal_address (ECalBackendSync *backend, gchar **address, GError **perror) { - ECalBackendCalDAV *cbdav; - ECalBackendCalDAVPrivate *priv; - - *address = NULL; - - cbdav = E_CAL_BACKEND_CALDAV (backend); - priv = E_CAL_BACKEND_CALDAV_GET_PRIVATE (cbdav); - - if (priv && priv->is_google && priv->username) { - *address = get_users_email (priv->username, "@gmail.com"); - } + *address = get_usermail (E_CAL_BACKEND (backend)); } static void @@ -2206,17 +2226,7 @@ caldav_get_alarm_email_address (ECalBackendSync *backend, gchar **address, GError **perror) { - ECalBackendCalDAV *cbdav; - ECalBackendCalDAVPrivate *priv; - - *address = NULL; - - cbdav = E_CAL_BACKEND_CALDAV (backend); - priv = E_CAL_BACKEND_CALDAV_GET_PRIVATE (cbdav); - - if (priv && priv->is_google && priv->username) { - *address = get_users_email (priv->username, "@gmail.com"); - } + *address = get_usermail (E_CAL_BACKEND (backend)); } static void @@ -2236,19 +2246,32 @@ caldav_get_static_capabilities (ECalBackendSync *backend, { ECalBackendCalDAV *cbdav; ECalBackendCalDAVPrivate *priv; + ESource *source; + GString *caps; + gchar *usermail; cbdav = E_CAL_BACKEND_CALDAV (backend); priv = E_CAL_BACKEND_CALDAV_GET_PRIVATE (cbdav); - if (priv && priv->is_google) - *capabilities = g_strdup (CAL_STATIC_CAPABILITY_NO_THISANDFUTURE "," - CAL_STATIC_CAPABILITY_NO_THISANDPRIOR "," - CAL_STATIC_CAPABILITY_REFRESH_SUPPORTED); - else - *capabilities = g_strdup (CAL_STATIC_CAPABILITY_NO_EMAIL_ALARMS "," - CAL_STATIC_CAPABILITY_NO_THISANDFUTURE "," - CAL_STATIC_CAPABILITY_NO_THISANDPRIOR "," - CAL_STATIC_CAPABILITY_REFRESH_SUPPORTED); + caps = g_string_new (CAL_STATIC_CAPABILITY_NO_THISANDFUTURE "," + CAL_STATIC_CAPABILITY_NO_THISANDPRIOR "," + CAL_STATIC_CAPABILITY_REFRESH_SUPPORTED); + + usermail = get_usermail (E_CAL_BACKEND (backend)); + if (!usermail || !*usermail) + g_string_append (caps, "," CAL_STATIC_CAPABILITY_NO_EMAIL_ALARMS); + g_free (usermail); + + source = e_cal_backend_get_source (E_CAL_BACKEND (backend)); + if (source) { + const gchar *prop = e_source_get_property (source, "autoschedule"); + + if (prop && g_str_equal (prop, "1")) + g_string_append (caps, "," CAL_STATIC_CAPABILITY_CREATE_MESSAGES + "," CAL_STATIC_CAPABILITY_SAVE_SCHEDULES); + } + + *capabilities = g_string_free (caps, FALSE); } static gboolean @@ -4226,7 +4249,7 @@ caldav_get_free_busy (ECalBackendSync *backend, ECalComponentDateTime dt; struct icaltimetype dtvalue; icaltimezone *utc; - gchar *str; + gchar *str, *usermail; GList *u; GSList *attendees = NULL, *to_free = NULL; GError *err = NULL; @@ -4273,13 +4296,25 @@ caldav_get_free_busy (ECalBackendSync *backend, dtvalue = icaltime_from_timet_with_zone (end, FALSE, utc); e_cal_component_set_dtend (comp, &dt); - if (priv->username) { + usermail = get_usermail (E_CAL_BACKEND (backend)); + if (usermail && !*usermail) { + g_free (usermail); + usermail = NULL; + } + + if (priv->username || usermail) { ECalComponentOrganizer organizer = {NULL}; - organizer.value = priv->username; + organizer.value = usermail ? usermail : priv->username; + organizer.value = g_strconcat ("mailto:", organizer.value, NULL); + e_cal_component_set_organizer (comp, &organizer); + + g_free ((gchar *) organizer.value); } + g_free (usermail); + for (u = users; u; u = u->next) { ECalComponentAttendee *ca; gchar *temp = g_strconcat ("mailto:", (const gchar *)u->data, NULL); |
