From 38035659d1d57b512b28b19dc4436609de3d52ca Mon Sep 17 00:00:00 2001 From: Shreyas Srinivasan Date: Sun, 10 Jul 2005 09:55:57 +0000 Subject: 2005-07-10 Shreyas Srinivasan * e-util/e-account.[ch]: Add structures to handle proxies. * e-util/e-account-list.[ch]: Add functions to remove proxy accounts and account's proxies. svn path=/trunk/; revision=29697 --- e-util/ChangeLog | 6 ++++++ e-util/e-account-list.c | 45 ++++++++++++++++++++++++++++++++++++++++++++- e-util/e-account-list.h | 5 +++++ e-util/e-account.c | 24 ++++++++++++++++++++++-- e-util/e-account.h | 4 ++++ 5 files changed, 81 insertions(+), 3 deletions(-) diff --git a/e-util/ChangeLog b/e-util/ChangeLog index 400025dce7..1303a6a2e5 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,3 +1,9 @@ +2005-07-10 Shreyas Srinivasan + + * e-util/e-account.[ch]: Add structures to handle proxies. + * e-util/e-account-list.[ch]: Add functions to remove proxy + accounts and account's proxies. + 2005-06-18 Tor Lillqvist * Makefile.am (WIN32_BOOTSTRAP_LIBS): Use bootstrap library for diff --git a/e-util/e-account-list.c b/e-util/e-account-list.c index c4968d82b3..bc17e9a203 100644 --- a/e-util/e-account-list.c +++ b/e-util/e-account-list.c @@ -28,7 +28,7 @@ #include struct EAccountListPrivate { - GConfClient *gconf; + GConfClient *gconf; guint notify_id; }; @@ -293,6 +293,45 @@ e_account_list_save (EAccountList *account_list) gconf_client_suggest_sync (account_list->priv->gconf, NULL); } +void +e_account_list_prune_proxies (EAccountList *account_list) +{ + EAccount *account; + EIterator *iter; + + for (iter = e_list_get_iterator (E_LIST (account_list)); + e_iterator_is_valid (iter); + e_iterator_next (iter)) { + account = (EAccount *)e_iterator_get (iter); + if (account->parent_uid) + e_account_list_remove (account_list, account); + } + + e_account_list_save (account_list); + g_object_unref (iter); +} + +void +e_account_list_remove_account_proxies (EAccountList *accounts, EAccount *account) +{ + EAccount *child_account; + + while ( (child_account = e_account_list_find (accounts, E_ACCOUNT_FIND_PARENT_UID, account->uid))) { + e_account_list_remove (accounts, child_account); + child_account = NULL; + } + + e_account_list_save (accounts); +} + +int +e_account_list_account_has_proxies (EAccountList *accounts, EAccount *account) +{ + if (e_account_list_find (accounts, E_ACCOUNT_FIND_PARENT_UID, account->uid)) + return TRUE; + + return FALSE; +} /** * e_account_list_add: * @accounts: @@ -452,6 +491,10 @@ e_account_list_find(EAccountList *accounts, e_account_find_t type, const char *k if (account->id) found = g_ascii_strcasecmp(account->id->address, key) == 0; break; + case E_ACCOUNT_FIND_PARENT_UID: + if (account->parent_uid) + found = strcmp(account->parent_uid, key) == 0; + break; } if (found) diff --git a/e-util/e-account-list.h b/e-util/e-account-list.h index f2b17af360..02b801aded 100644 --- a/e-util/e-account-list.h +++ b/e-util/e-account-list.h @@ -38,6 +38,7 @@ typedef enum _e_account_find_t { E_ACCOUNT_FIND_UID, E_ACCOUNT_FIND_ID_NAME, E_ACCOUNT_FIND_ID_ADDRESS, + E_ACCOUNT_FIND_PARENT_UID, } e_account_find_t; typedef struct _EAccountList { @@ -72,4 +73,8 @@ const EAccount *e_account_list_get_default(EAccountList *); void e_account_list_set_default(EAccountList *, EAccount *); const EAccount *e_account_list_find (EAccountList *, e_account_find_t type, const char *key); +void e_account_list_prune_proxies (EAccountList *); +void e_account_list_remove_account_proxies (EAccountList *, EAccount *); +int e_account_list_account_has_proxies (EAccountList *, EAccount *); + #endif /* __E_ACCOUNT_LIST__ */ diff --git a/e-util/e-account.c b/e-util/e-account.c index 4ede2375e2..89c0525336 100644 --- a/e-util/e-account.c +++ b/e-util/e-account.c @@ -108,6 +108,8 @@ e_account_init (EAccount *account) account->source = g_new0 (EAccountService, 1); account->transport = g_new0 (EAccountService, 1); + account->parent_uid = NULL; + account->source->auto_check = FALSE; account->source->auto_check_time = 10; } @@ -149,7 +151,7 @@ e_account_finalize (GObject *object) identity_destroy (account->id); service_destroy (account->source); service_destroy (account->transport); - + g_free (account->drafts_folder_uri); g_free (account->sent_folder_uri); @@ -160,6 +162,8 @@ e_account_finalize (GObject *object) g_free (account->smime_sign_key); g_free (account->smime_encrypt_key); + g_free (account->parent_uid); + G_OBJECT_CLASS (e_account_parent_class)->finalize (object); } @@ -486,6 +490,15 @@ e_account_set_from_xml (EAccount *account, const char *xml) } } } + } else if (!strcmp (node->name, "proxy")) { + if (node->children) { + for (cur = node->children; cur; cur = cur->next) { + if (!strcmp (cur->name, "parent-uid")) { + changed |= xml_set_content (cur, &account->parent_uid); + break; + } + } + } } } @@ -563,7 +576,7 @@ e_account_import (EAccount *dest, EAccount *src) dest->smime_encrypt_to_self = src->smime_encrypt_to_self; g_free (dest->smime_encrypt_key); dest->smime_encrypt_key = g_strdup (src->smime_encrypt_key); - + g_signal_emit(dest, signals[CHANGED], 0, -1); } @@ -652,6 +665,11 @@ e_account_to_xml (EAccount *account) if (account->smime_encrypt_key) xmlNewTextChild (node, NULL, "encrypt-key-id", account->smime_encrypt_key); + if (account->parent_uid) { + node = xmlNewChild (root, NULL, "proxy", NULL); + xmlNewTextChild (node, NULL, "parent-uid", account->parent_uid); + } + xmlDocDumpMemory (doc, &xmlbuf, &n); xmlFreeDoc (doc); @@ -778,6 +796,8 @@ static struct _account_info { { /* E_ACCOUNT_SMIME_SIGN_DEFAULT */ 0, TYPE_BOOL, G_STRUCT_OFFSET(EAccount, smime_sign_default) }, { /* E_ACCOUNT_SMIME_ENCRYPT_TO_SELF */ 0, TYPE_BOOL, G_STRUCT_OFFSET(EAccount, smime_encrypt_to_self) }, { /* E_ACCOUNT_SMIME_ENCRYPT_DEFAULT */ 0, TYPE_BOOL, G_STRUCT_OFFSET(EAccount, smime_encrypt_default) }, + + { /* E_ACCOUNT_PROXY_PARENT_UID, */ 0, TYPE_STRING, G_STRUCT_OFFSET(EAccount, parent_uid) }, }; static GHashTable *ea_option_table; diff --git a/e-util/e-account.h b/e-util/e-account.h index 4e5de875d5..2969ecef63 100644 --- a/e-util/e-account.h +++ b/e-util/e-account.h @@ -69,6 +69,8 @@ typedef enum _e_account_item_t { E_ACCOUNT_SMIME_ENCRYPT_TO_SELF, E_ACCOUNT_SMIME_ENCRYPT_DEFAULT, + E_ACCOUNT_PROXY_PARENT_UID, + E_ACCOUNT_ITEM_LAST } e_account_item_t; @@ -125,6 +127,8 @@ typedef struct _EAccount { gboolean pgp_no_imip_sign; gboolean pgp_always_trust; + char *parent_uid; + char *smime_sign_key; char *smime_encrypt_key; gboolean smime_sign_default; -- cgit v1.2.3