From 4ca16039ae0e04a218ff979c499ecd7cf0a0ae46 Mon Sep 17 00:00:00 2001 From: Chenthill Palanisamy Date: Wed, 30 Apr 2008 08:25:32 +0000 Subject: Committing on behalf of Chenthill Palanisamy 2008-04-30 Chenthill Palanisamy ** Fixes #358644 (bnc) Retracted groupwise appointments should disappear as soon as they are retracted. svn path=/trunk/; revision=35449 --- plugins/groupwise-account-setup/ChangeLog | 13 ++++ .../groupwise-account-setup/camel-gw-listener.c | 53 +++++++++---- .../groupwise-account-setup.c | 88 ++++++++++++++++++++++ .../org-gnome-gw-account-setup.eplug.xml | 12 ++- 4 files changed, 151 insertions(+), 15 deletions(-) (limited to 'plugins/groupwise-account-setup') diff --git a/plugins/groupwise-account-setup/ChangeLog b/plugins/groupwise-account-setup/ChangeLog index 817b28a694..6e158a510c 100644 --- a/plugins/groupwise-account-setup/ChangeLog +++ b/plugins/groupwise-account-setup/ChangeLog @@ -1,3 +1,16 @@ +2008-04-30 Chenthill Palanisamy + + ** Fixes #358644 (bnc) + Retracted groupwise appointments should disappear as soon as they are + retracted. + + * camel-gw-listener.c: (add_esource), (modify_esource), + (add_calendar_tasks_sources), (add_proxy_sources), (account_added), + (account_changed): + * groupwise-account-setup.c: (is_groupwise_account), + (set_esource_props), (ensure_mandatory_esource_properties): + * org-gnome-gw-account-setup.eplug.xml: + 2007-10-26 Kjartan Maraas * camel-gw-listener.c: (camel_gw_listener_new): diff --git a/plugins/groupwise-account-setup/camel-gw-listener.c b/plugins/groupwise-account-setup/camel-gw-listener.c index 8b3d8c85bd..66df661457 100644 --- a/plugins/groupwise-account-setup/camel-gw-listener.c +++ b/plugins/groupwise-account-setup/camel-gw-listener.c @@ -49,6 +49,8 @@ struct _GwAccountInfo { char *uid; char *name; char *source_url; + gboolean auto_check; + guint auto_check_time; }; typedef struct _GwAccountInfo GwAccountInfo; @@ -168,7 +170,7 @@ lookup_account_info (const char *key) #define SELECTED_NOTES "/apps/evolution/calendar/memos/selected_memos" static void -add_esource (const char *conf_key, const char *group_name, const char *source_name, CamelURL *url, const char* parent_id_name, gboolean can_create) +add_esource (const char *conf_key, GwAccountInfo *info, const char *source_name, CamelURL *url, const char* parent_id_name, gboolean can_create) { ESourceList *source_list; ESourceGroup *group; @@ -181,11 +183,14 @@ add_esource (const char *conf_key, const char *group_name, const char *source_n const char * use_ssl; const char *poa_address; const char *offline_sync; + const char *group_name; poa_address = url->host; if (!poa_address || strlen (poa_address) ==0) return; + group_name = info->name; + soap_port = camel_url_get_param (url, "soap_port"); if (!soap_port || strlen (soap_port) == 0) @@ -206,6 +211,7 @@ add_esource (const char *conf_key, const char *group_name, const char *source_n if (!can_create) e_source_group_set_property (group, "create_source", "no"); + relative_uri = g_strdup_printf ("%s@%s/", url->user, poa_address); source = e_source_new (source_name, relative_uri); e_source_set_property (source, "auth", "1"); @@ -213,6 +219,15 @@ add_esource (const char *conf_key, const char *group_name, const char *source_n e_source_set_property (source, "port", camel_url_get_param (url, "soap_port")); e_source_set_property (source, "auth-domain", "Groupwise"); e_source_set_property (source, "use_ssl", use_ssl); + + if (info->auto_check) { + char *str = g_strdup_printf ("%d", info->auto_check_time); + + e_source_set_property (source, "refresh", str); + g_free (str); + } else + e_source_set_property (source, "refresh", NULL); + e_source_set_property (source, "offline_sync", offline_sync ? "1" : "0" ); e_source_set_property (source, "delete", "no"); if (parent_id_name) { @@ -324,7 +339,7 @@ remove_esource (const char *conf_key, const char *group_name, char* source_name, /* looks up for e-source with having same info as old_account_info and changes its values passed in new values */ static void -modify_esource (const char* conf_key, GwAccountInfo *old_account_info, const char* new_group_name, CamelURL *new_url) +modify_esource (const char* conf_key, GwAccountInfo *old_account_info, EAccount *a, CamelURL *new_url) { ESourceList *list; GSList *groups; @@ -334,7 +349,8 @@ modify_esource (const char* conf_key, GwAccountInfo *old_account_info, const cha GConfClient* client; const char *poa_address; const char *new_poa_address; - + const char* new_group_name = a->name; + url = camel_url_new (old_account_info->source_url, NULL); poa_address = url->host; if (!poa_address || strlen (poa_address) ==0) @@ -372,6 +388,15 @@ modify_esource (const char* conf_key, GwAccountInfo *old_account_info, const cha e_source_set_property (source, "port", camel_url_get_param (new_url,"soap_port")); e_source_set_property (source, "use_ssl", camel_url_get_param (url, "use_ssl")); e_source_set_property (source, "offline_sync", camel_url_get_param (url, "offline_sync") ? "1" : "0"); + + if (a->source->auto_check) { + char *str = g_strdup_printf ("%d", a->source->auto_check_time); + + e_source_set_property (source, "refresh", str); + g_free (str); + } else + e_source_set_property (source, "refresh", NULL); + e_source_list_sync (list, NULL); found_group = TRUE; g_free (new_relative_uri); @@ -397,10 +422,10 @@ add_calendar_tasks_sources (GwAccountInfo *info) CamelURL *url; url = camel_url_new (info->source_url, NULL); - add_esource ("/apps/evolution/calendar/sources", info->name, _("Calendar"), url, NULL, FALSE); - add_esource ("/apps/evolution/tasks/sources", info->name, _("Tasks"), url, NULL, FALSE); - add_esource ("/apps/evolution/memos/sources", info->name, _("Notes"), url, NULL, TRUE); - + add_esource ("/apps/evolution/calendar/sources", info, _("Calendar"), url, NULL, FALSE); + add_esource ("/apps/evolution/tasks/sources", info, _("Tasks"), url, NULL, FALSE); + add_esource ("/apps/evolution/memos/sources", info, _("Notes"), url, NULL, TRUE); + camel_url_free (url); @@ -541,9 +566,9 @@ add_proxy_sources (GwAccountInfo *info, const char *parent_name) camel_url_set_param (url, "color", color); - add_esource ("/apps/evolution/calendar/sources", info->name, _("Calendar"), url, parent_name, FALSE); - add_esource ("/apps/evolution/tasks/sources", info->name, _("Tasks"), url, parent_name, FALSE); - add_esource ("/apps/evolution/memos/sources", info->name, _("Notes"), url, parent_name, TRUE); + add_esource ("/apps/evolution/calendar/sources", info, _("Calendar"), url, parent_name, FALSE); + add_esource ("/apps/evolution/tasks/sources", info, _("Tasks"), url, parent_name, FALSE); + add_esource ("/apps/evolution/memos/sources", info, _("Notes"), url, parent_name, TRUE); g_free (color); camel_url_free (url); @@ -793,6 +818,8 @@ account_added (EAccountList *account_listener, EAccount *account) info->uid = g_strdup (account->uid); info->name = g_strdup (account->name); info->source_url = g_strdup (account->source->url); + info->auto_check = account->source->auto_check; + info->auto_check_time = account->source->auto_check_time; if (account->parent_uid) { parent = (EAccount *)e_account_list_find (account_listener, E_ACCOUNT_FIND_UID, account->parent_uid); @@ -900,9 +927,9 @@ account_changed (EAccountList *account_listener, EAccount *account) account_added (account_listener, account); } else if (strcmp (existing_account_info->name, account->name)) { - modify_esource ("/apps/evolution/calendar/sources", existing_account_info, account->name, new_url); - modify_esource ("/apps/evolution/tasks/sources", existing_account_info, account->name, new_url); - modify_esource ("/apps/evolution/memos/sources", existing_account_info, account->name, new_url); + modify_esource ("/apps/evolution/calendar/sources", existing_account_info, account, new_url); + modify_esource ("/apps/evolution/tasks/sources", existing_account_info, account, new_url); + modify_esource ("/apps/evolution/memos/sources", existing_account_info, account, new_url); modify_addressbook_sources (account, existing_account_info); } diff --git a/plugins/groupwise-account-setup/groupwise-account-setup.c b/plugins/groupwise-account-setup/groupwise-account-setup.c index ccdf1f4305..13a6f46d0f 100644 --- a/plugins/groupwise-account-setup/groupwise-account-setup.c +++ b/plugins/groupwise-account-setup/groupwise-account-setup.c @@ -28,11 +28,99 @@ #include "camel-gw-listener.h" #include #include "mail/em-config.h" +#include +#include "shell/es-event.h" +#include + +#define GROUPWISE_BASE_URI "groupwise://" static CamelGwListener *config_listener = NULL; int e_plugin_lib_enable (EPluginLib *ep, int enable); GtkWidget* org_gnome_gw_account_setup(struct _EPlugin *epl, struct _EConfigHookItemFactoryData *data); +void ensure_mandatory_esource_properties (EPlugin *ep, ESEventTargetUpgrade *target); + +static gboolean +is_groupwise_account (EAccount *account) +{ + if (account->source->url != NULL) { + return g_str_has_prefix (account->source->url, GROUPWISE_BASE_URI); + } else { + return FALSE; + } +} + +static void +set_esource_props (const char *path, EAccount *a, GConfClient *client, const char *name) +{ + ESourceList *list; + GSList *groups; + char *old_relative_uri; + const char *poa_address; + CamelURL *url = camel_url_new (a->source->url, NULL); + + old_relative_uri = g_strdup_printf ("%s@%s/", url->user, poa_address); + list = e_source_list_new_for_gconf (client, path); + groups = e_source_list_peek_groups (list); + poa_address = url->host; + + if (!poa_address || !*poa_address) + return; + + for ( ; groups != NULL; groups = g_slist_next (groups)) { + ESourceGroup *group = E_SOURCE_GROUP (groups->data); + + if (strcmp (e_source_group_peek_name (group), name) == 0 && + strcmp (e_source_group_peek_base_uri (group), GROUPWISE_BASE_URI) == 0) { + GSList *sources = e_source_group_peek_sources (group); + + for ( ; sources != NULL; sources = g_slist_next (sources)) { + ESource *source = E_SOURCE (sources->data); + + if (a->source->auto_check) { + char *str = g_strdup_printf ("%d",a->source->auto_check_time); + + e_source_set_property (source, "refresh", str); + g_free (str); + } else + e_source_set_property (source, "refresh", NULL); + break; + } + } + } + e_source_list_sync (list, NULL); + + g_object_unref (list); + g_free (old_relative_uri); + camel_url_free (url); + +} + +void +ensure_mandatory_esource_properties (EPlugin *ep, ESEventTargetUpgrade *target) +{ + GConfClient* client; + EAccountList *al; + EIterator *it; + + client = gconf_client_get_default(); + al = e_account_list_new (client); + + for (it = e_list_get_iterator((EList *)al); + e_iterator_is_valid(it); + e_iterator_next(it)) { + EAccount *a; + + a = (EAccount *) e_iterator_get(it); + if (!a->enabled || !is_groupwise_account (a)) + continue; + set_esource_props ("/apps/evolution/calendar/sources", a, client, a->name); + set_esource_props ("/apps/evolution/tasks/sources", a, client, a->name); + set_esource_props ("/apps/evolution/memos/sources", a, client, a->name); + } + g_object_unref (al); + g_object_unref (client); +} static void free_groupwise_listener ( void ) diff --git a/plugins/groupwise-account-setup/org-gnome-gw-account-setup.eplug.xml b/plugins/groupwise-account-setup/org-gnome-gw-account-setup.eplug.xml index 4555957ba9..dd7886348c 100644 --- a/plugins/groupwise-account-setup/org-gnome-gw-account-setup.eplug.xml +++ b/plugins/groupwise-account-setup/org-gnome-gw-account-setup.eplug.xml @@ -20,7 +20,15 @@ - - + + + + + + -- cgit v1.2.3