/** * e_account_list_save: * @account_list: an #EAccountList * * Saves @account_list to GConf. Signals will be emitted for changes. **/ void e_account_list_save (EAccountList *account_list) { GSList *list = NULL; EAccount *account; EIterator *iter; char *xmlbuf; 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); xmlbuf = e_account_to_xml (account); if (xmlbuf) list = g_slist_append (list, xmlbuf); } g_object_unref (iter); gconf_client_set_list (account_list->priv->gconf, "/apps/evolution/mail/accounts", GCONF_VALUE_STRING, list, NULL); while (list) { g_free (list->data); list = g_slist_remove (list, list->data); } gconf_client_suggest_sync (account_list->priv->gconf, NULL); }
/* load list of enabled accessible EEE accounts */ void eee_accounts_manager_load_access_accounts_list(EeeAccountsManager *self) { EIterator *iter; g_slist_foreach(self->priv->access_accounts, (GFunc)g_free, NULL); g_slist_free(self->priv->access_accounts); self->priv->access_accounts = NULL; for (iter = e_list_get_iterator(E_LIST(self->priv->ealist)); e_iterator_is_valid(iter); e_iterator_next(iter)) { EAccount *account = E_ACCOUNT(e_iterator_get(iter)); const char *name = e_account_get_string(account, E_ACCOUNT_ID_ADDRESS); if (!account->enabled) { continue; } if (eee_accounts_manager_account_is_disabled(self, name)) { continue; } if (g_slist_find_custom(self->priv->access_accounts, (gpointer)name, (GCompareFunc)strcmp)) { continue; } self->priv->access_accounts = g_slist_append(self->priv->access_accounts, g_strdup(name)); } }
static gint uri_is_ignore (EMailBackend *backend, const gchar *uri) { EMailSession *session; CamelSession *camel_session; EAccountList *accounts; EAccount *account; EIterator *iter; const gchar *local_drafts_uri; const gchar *local_outbox_uri; const gchar *local_sent_uri; gint found = FALSE; local_drafts_uri = e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_DRAFTS); local_outbox_uri = e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_OUTBOX); local_sent_uri = e_mail_local_get_folder_uri (E_MAIL_LOCAL_FOLDER_SENT); session = e_mail_backend_get_session (backend); camel_session = CAMEL_SESSION (session); if (e_mail_folder_uri_equal (camel_session, local_outbox_uri, uri)) return TRUE; if (e_mail_folder_uri_equal (camel_session, local_sent_uri, uri)) return TRUE; if (e_mail_folder_uri_equal (camel_session, local_drafts_uri, uri)) return TRUE; accounts = e_get_account_list (); iter = e_list_get_iterator (E_LIST (accounts)); while (!found && e_iterator_is_valid (iter)) { /* XXX EIterator misuses const. */ account = (EAccount *) e_iterator_get (iter); if (!found && account->sent_folder_uri != NULL) found = e_mail_folder_uri_equal ( camel_session, uri, account->sent_folder_uri); if (!found && account->drafts_folder_uri != NULL) found = e_mail_folder_uri_equal ( camel_session, uri, account->drafts_folder_uri); e_iterator_next (iter); } g_object_unref (iter); return found; }
/* * Virtual functions */ static void e_list_dispose (GObject *object) { EList *list = E_LIST (object); if (list->free) g_list_foreach (list->list, (GFunc) list->free, list->closure); g_list_free (list->list); (* G_OBJECT_CLASS (e_list_parent_class)->dispose) (object); }
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_construct (EAccountList *account_list, GConfClient *gconf) { g_return_if_fail (GCONF_IS_CLIENT (gconf)); e_list_construct (E_LIST (account_list), copy_func, free_func, NULL); account_list->priv->gconf = gconf; g_object_ref (gconf); gconf_client_add_dir (account_list->priv->gconf, "/apps/evolution/mail/accounts", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); account_list->priv->notify_id = gconf_client_notify_add (account_list->priv->gconf, "/apps/evolution/mail/accounts", gconf_accounts_changed, account_list, NULL, NULL); gconf_accounts_changed (account_list->priv->gconf, account_list->priv->notify_id, NULL, account_list); }
static void gconf_accounts_changed (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data) { EAccountList *account_list = user_data; GSList *list, *l, *new_accounts = NULL; EAccount *account; EList *old_accounts; EIterator *iter; char *uid; old_accounts = e_list_duplicate (E_LIST (account_list)); list = gconf_client_get_list (client, "/apps/evolution/mail/accounts", GCONF_VALUE_STRING, NULL); for (l = list; l; l = l->next) { uid = e_account_uid_from_xml (l->data); if (!uid) continue; /* See if this is an existing account */ for (iter = e_list_get_iterator (old_accounts); e_iterator_is_valid (iter); e_iterator_next (iter)) { account = (EAccount *)e_iterator_get (iter); if (!strcmp (account->uid, uid)) { /* The account still exists, so remove * it from "old_accounts" and update it. */ e_iterator_delete (iter); if (e_account_set_from_xml (account, l->data)) g_signal_emit (account_list, signals[ACCOUNT_CHANGED], 0, account); goto next; } } /* Must be a new account */ account = e_account_new_from_xml (l->data); e_list_append (E_LIST (account_list), account); new_accounts = g_slist_prepend (new_accounts, account); next: g_free (uid); g_object_unref (iter); } if (list) { g_slist_foreach (list, (GFunc) g_free, NULL); g_slist_free (list); } /* Now emit signals for each added account. (We do this after * adding all of them because otherwise if the signal handler * calls e_account_list_get_default_account() it will end up * causing the first account in the list to become the * default.) */ for (l = new_accounts; l; l = l->next) { account = l->data; g_signal_emit (account_list, signals[ACCOUNT_ADDED], 0, account); g_object_unref (account); } g_slist_free (new_accounts); /* Anything left in old_accounts must have been deleted */ for (iter = e_list_get_iterator (old_accounts); e_iterator_is_valid (iter); e_iterator_next (iter)) { account = (EAccount *)e_iterator_get (iter); e_list_remove (E_LIST (account_list), account); g_signal_emit (account_list, signals[ACCOUNT_REMOVED], 0, account); } g_object_unref (iter); g_object_unref (old_accounts); }