}
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;
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 ************* */
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
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
{
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
ECalComponentDateTime dt;
struct icaltimetype dtvalue;
icaltimezone *utc;
- gchar *str;
+ gchar *str, *usermail;
GList *u;
GSList *attendees = NULL, *to_free = NULL;
GError *err = NULL;
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);