diff options
author | Harish Krishnaswamy <kharish@novell.com> | 2006-12-04 01:47:06 +0800 |
---|---|---|
committer | Harish Krishnaswamy <kharish@src.gnome.org> | 2006-12-04 01:47:06 +0800 |
commit | 9a388362b9869d1fdf1af85c2928b47965a68e79 (patch) | |
tree | b7b37a61035152c08e00c609005360adcb14fc78 | |
parent | 2bb9e731bed3b5e001e1b1af6e0545eea2a88f3e (diff) | |
download | gsoc2013-evolution-9a388362b9869d1fdf1af85c2928b47965a68e79.tar.gz gsoc2013-evolution-9a388362b9869d1fdf1af85c2928b47965a68e79.tar.zst gsoc2013-evolution-9a388362b9869d1fdf1af85c2928b47965a68e79.zip |
Add code to prune dead proxy entries (so they are executed regardless of
2006-12-03 Harish Krishnaswamy <kharish@novell.com>
* plugins/groupwise-account-setup/camel-gw-listener.c:
(add_esource), (add_calendar_tasks_sources),
(get_addressbook_names_from_server), (add_proxy_sources),
(prune_proxies), (camel_gw_listener_construct):
Add code to prune dead proxy entries (so they are executed
regardless of which component gets loaded first). Clean up
the existing code, fix leaks and ensure new proxy calendars
have their (different) color set.
svn path=/trunk/; revision=33037
-rw-r--r-- | plugins/groupwise-account-setup/ChangeLog | 11 | ||||
-rw-r--r-- | plugins/groupwise-account-setup/camel-gw-listener.c | 161 |
2 files changed, 83 insertions, 89 deletions
diff --git a/plugins/groupwise-account-setup/ChangeLog b/plugins/groupwise-account-setup/ChangeLog index 1b936efd85..d3b24c912a 100644 --- a/plugins/groupwise-account-setup/ChangeLog +++ b/plugins/groupwise-account-setup/ChangeLog @@ -1,3 +1,14 @@ +2006-12-03 Harish Krishnaswamy <kharish@novell.com> + + * plugins/groupwise-account-setup/camel-gw-listener.c: + (add_esource), (add_calendar_tasks_sources), + (get_addressbook_names_from_server), (add_proxy_sources), + (prune_proxies), (camel_gw_listener_construct): + Add code to prune dead proxy entries (so they are executed + regardless of which component gets loaded first). Clean up + the existing code, fix leaks and ensure new proxy calendars + have their (different) color set. + 2006-09-19 Kjartan Maraas <kmaraas@gnome.org> * org-gnome-gw-account-setup.eplug.xml: Mark description for diff --git a/plugins/groupwise-account-setup/camel-gw-listener.c b/plugins/groupwise-account-setup/camel-gw-listener.c index 5634bf65fb..55b2c4e4e3 100644 --- a/plugins/groupwise-account-setup/camel-gw-listener.c +++ b/plugins/groupwise-account-setup/camel-gw-listener.c @@ -32,6 +32,7 @@ #include <libedataserverui/e-passwords.h> #include "e-util/e-error.h" #include <libedataserver/e-account.h> +#include <libecal/e-cal.h> /*stores some info about all currently existing groupwise accounts list of GwAccountInfo structures */ @@ -167,7 +168,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) +add_esource (const char *conf_key, const char *group_name, const char *source_name, CamelURL *url, const char* parent_id_name) { ESourceList *source_list; ESourceGroup *group; @@ -181,10 +182,10 @@ add_esource (const char *conf_key, const char *group_name, const char *source_n const char *poa_address; const char *offline_sync; - poa_address = url->host; if (!poa_address || strlen (poa_address) ==0) return; + soap_port = camel_url_get_param (url, "soap_port"); if (!soap_port || strlen (soap_port) == 0) @@ -197,12 +198,12 @@ add_esource (const char *conf_key, const char *group_name, const char *source_n client = gconf_client_get_default(); source_list = e_source_list_new_for_gconf (client, conf_key); - group = e_source_group_new (group_name, GROUPWISE_URI_PREFIX); + if (!e_source_list_add_group (source_list, group, -1)) return; + 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"); e_source_set_property (source, "username", url->user); @@ -210,9 +211,12 @@ add_esource (const char *conf_key, const char *group_name, const char *source_n e_source_set_property (source, "auth-domain", "Groupwise"); e_source_set_property (source, "use_ssl", use_ssl); e_source_set_property (source, "offline_sync", offline_sync ? "1" : "0" ); - - - e_source_set_color (source, 0xEEBC60); + if (parent_id_name) { + e_source_set_property (source, "parent_id_name", parent_id_name); + e_source_set_color (source, 0xFF00FF); + } + else + e_source_set_color (source, 0xEEBC60); e_source_group_add_source (group, source, -1); e_source_list_sync (source_list, NULL); @@ -220,14 +224,18 @@ add_esource (const char *conf_key, const char *group_name, const char *source_n source_selection_key = SELECTED_CALENDARS; else if (!strcmp (conf_key, TASKS_SOURCES)) source_selection_key = SELECTED_TASKS; - else source_selection_key = NULL; + else + source_selection_key = NULL; + if (source_selection_key) { ids = gconf_client_get_list (client, source_selection_key , GCONF_VALUE_STRING, NULL); ids = g_slist_append (ids, g_strdup (e_source_peek_uid (source))); gconf_client_set_list (client, source_selection_key, GCONF_VALUE_STRING, ids, NULL); temp = ids; + for (; temp != NULL; temp = g_slist_next (temp)) g_free (temp->data); + g_slist_free (ids); } @@ -238,7 +246,6 @@ add_esource (const char *conf_key, const char *group_name, const char *source_n g_free (relative_uri); } - static void remove_esource (const char *conf_key, const char *group_name, char* source_name, const char* relative_uri) { @@ -387,9 +394,9 @@ 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); - add_esource ("/apps/evolution/tasks/sources", info->name, _("Tasks"), url); - add_esource ("/apps/evolution/memos/sources", info->name, _("Notes"), url); + add_esource ("/apps/evolution/calendar/sources", info->name, _("Calendar"), url, NULL); + add_esource ("/apps/evolution/tasks/sources", info->name, _("Tasks"), url, NULL); + add_esource ("/apps/evolution/memos/sources", info->name, _("Notes"), url, NULL); camel_url_free (url); @@ -516,80 +523,6 @@ get_addressbook_names_from_server (char *source_url) e_error_run (NULL, "mail:gw-accountsetup-error", poa_address, NULL); return NULL; } - -static void -add_proxy_esource (const char *conf_key, const char *group_name, const char *source_name, CamelURL *url, const char* parent_id_name) -{ - ESourceList *source_list; - ESourceGroup *group; - ESource *source; - GConfClient* client; - GSList *ids, *temp ; - char *source_selection_key; - char *relative_uri; - const char *soap_port; - const char * use_ssl; - const char *poa_address; - const char *offline_sync; - - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return; - - soap_port = camel_url_get_param (url, "soap_port"); - - if (!soap_port || strlen (soap_port) == 0) - soap_port = "7191"; - - use_ssl = camel_url_get_param (url, "use_ssl"); - - - offline_sync = camel_url_get_param (url, "offline_sync"); - - client = gconf_client_get_default(); - source_list = e_source_list_new_for_gconf (client, conf_key); - group = e_source_group_new (group_name, GROUPWISE_URI_PREFIX); - - if (!e_source_list_add_group (source_list, group, -1)) - return; - - 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"); - e_source_set_property (source, "username", url->user); - 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); - e_source_set_property (source, "offline_sync", offline_sync ? "1" : "0" ); - e_source_set_property (source, "parent_id_name", parent_id_name); - e_source_group_add_source (group, source, -1); - e_source_list_sync (source_list, NULL); - - if (!strcmp (conf_key, CALENDAR_SOURCES)) - source_selection_key = SELECTED_CALENDARS; - else if (!strcmp (conf_key, TASKS_SOURCES)) - source_selection_key = SELECTED_TASKS; - else - source_selection_key = NULL; - - if (source_selection_key) { - ids = gconf_client_get_list (client, source_selection_key , GCONF_VALUE_STRING, NULL); - ids = g_slist_append (ids, g_strdup (e_source_peek_uid (source))); - gconf_client_set_list (client, source_selection_key, GCONF_VALUE_STRING, ids, NULL); - temp = ids; - - for (; temp != NULL; temp = g_slist_next (temp)) - g_free (temp->data); - - g_slist_free (ids); - } - - g_object_unref (source); - g_object_unref (group); - g_object_unref (source_list); - g_object_unref (client); - g_free (relative_uri); -} static void add_proxy_sources (GwAccountInfo *info, const char *parent_name) @@ -597,9 +530,9 @@ add_proxy_sources (GwAccountInfo *info, const char *parent_name) CamelURL *url; url = camel_url_new (info->source_url, NULL); - add_proxy_esource ("/apps/evolution/calendar/sources", info->name, _("Calendar"), url, parent_name); - add_proxy_esource ("/apps/evolution/tasks/sources", info->name, _("Tasks"), url, parent_name); - add_proxy_esource ("/apps/evolution/memos/sources", info->name, _("Notes"), url, parent_name); + add_esource ("/apps/evolution/calendar/sources", info->name, _("Calendar"), url, parent_name); + add_esource ("/apps/evolution/tasks/sources", info->name, _("Tasks"), url, parent_name); + add_esource ("/apps/evolution/memos/sources", info->name, _("Notes"), url, parent_name); camel_url_free (url); } @@ -972,11 +905,60 @@ account_changed (EAccountList *account_listener, EAccount *account) } static void +prune_proxies (void) { + + GConfClient *client = gconf_client_get_default (); + EAccountList *account_list; + ESourceList *sources; + ESourceGroup *group; + GSList *groups, *e_sources, *l, *p; + ESource *source; + GError *err = NULL; + const gchar *parent_id_name = NULL; + int i; + ECalSourceType types [] = { E_CAL_SOURCE_TYPE_EVENT, + E_CAL_SOURCE_TYPE_TODO, + E_CAL_SOURCE_TYPE_JOURNAL + }; + + account_list = e_account_list_new (client); + /* Is this being leaked */ + g_object_unref (client); + + e_account_list_prune_proxies (account_list); + + for (i=0; i<3; i++) { + if (e_cal_get_sources (&sources, types[i], &err)) { + /* peek groupwise id and prune for proxies. */ + groups = e_source_list_peek_groups (sources); + for (l = groups; l != NULL;) { + group = (ESourceGroup *) l->data; + l = l->next; + if (!strcmp (e_source_group_peek_base_uri (group), "groupwise://")) { + e_sources = e_source_group_peek_sources (group); + for (p = e_sources; p != NULL; p = p->next) { + source = (ESource *)p->data; + parent_id_name = e_source_get_property (source, "parent_id_name"); + if (parent_id_name) { + e_source_group_remove_source (group, source); + e_source_list_remove_group (sources, group); + } + } + } + } + e_source_list_sync (sources, NULL); + } + } + +} +static void camel_gw_listener_construct (CamelGwListener *config_listener) { EIterator *iter; EAccount *account; GwAccountInfo *info ; + + prune_proxies (); config_listener->priv->account_list = e_account_list_new (config_listener->priv->gconf_client); @@ -995,6 +977,7 @@ camel_gw_listener_construct (CamelGwListener *config_listener) } } + g_signal_connect (config_listener->priv->account_list, "account_added", G_CALLBACK (account_added), NULL); g_signal_connect (config_listener->priv->account_list, "account_changed", G_CALLBACK (account_changed), NULL); g_signal_connect (config_listener->priv->account_list, "account_removed", G_CALLBACK (account_removed), NULL); |