-/** Fill the TnyList from the appropriate cached GSList of accounts. */
-static void
-get_cached_accounts (TnyAccountStore *self, TnyList *list, TnyAccountType type)
-{
- ModestTnyAccountStorePrivate *priv;
- GSList *accounts, *cursor;
-
- priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
- accounts = (type == TNY_ACCOUNT_TYPE_STORE ? priv->store_accounts : priv->transport_accounts);
-
- cursor = accounts;
- while (cursor) {
- if (cursor->data) {
- GObject *object = G_OBJECT(cursor->data);
- tny_list_prepend (list, object);
- }
-
- cursor = cursor->next;
- }
-}
-
-static void
-create_per_account_local_outbox_folders (TnyAccountStore *self)
-{
- g_return_if_fail (self);
-
- ModestTnyAccountStorePrivate *priv =
- MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
-
- /* printf("DEBUG: %s: priv->store_accounts_outboxes = %p\n", __FUNCTION__, priv->store_accounts_outboxes); */
-
- GSList *accounts = NULL;
-
- GSList *account_names = modest_account_mgr_account_names (priv->account_mgr,
- TRUE /* including disabled accounts */);
-
- GSList *iter = NULL;
- for (iter = account_names; iter; iter = g_slist_next (iter)) {
-
- const gchar* account_name = (const gchar*)iter->data;
-
- /* Create a per-account local outbox folder (a _store_ account)
- * for each _transport_ account: */
- TnyAccount *tny_account_outbox =
- modest_tny_account_new_for_per_account_local_outbox_folder (
- priv->account_mgr, account_name, priv->session);
-
- accounts = g_slist_append (accounts, tny_account_outbox); /* cache it */
- };
-
- modest_account_mgr_free_account_names (account_names);
- account_names = NULL;
-
- priv->store_accounts_outboxes = accounts;
-}
-
-/* This function fills the TnyList, and also stores a GSList of the accounts,
- * for caching purposes. It creates the TnyAccount objects if necessary.
- * The @list parameter may be NULL, if you just want to fill the cache.
- */
-static void
-get_server_accounts (TnyAccountStore *self, TnyList *list, TnyAccountType type)
-{
- g_return_if_fail (self);
-
- ModestTnyAccountStorePrivate *priv =
- MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self);
-
- /* Do nothing if the accounts are already cached: */
- if (type == TNY_ACCOUNT_TYPE_STORE) {
- if (priv->store_accounts)
- return;
- } else if (type == TNY_ACCOUNT_TYPE_TRANSPORT) {
- if (priv->transport_accounts)
- return;
- }
-
- GSList *account_names = NULL, *cursor = NULL;
- GSList *accounts = NULL;
-
- /* These are account names, not server_account names */
- account_names = modest_account_mgr_account_names (priv->account_mgr,FALSE);
-
- for (cursor = account_names; cursor; cursor = cursor->next) {
-
- gchar *account_name = (gchar*)cursor->data;
-
- /* we get the server_accounts for enabled accounts */
- if (modest_account_mgr_get_enabled(priv->account_mgr, account_name)) {
-
- /* Add the account: */
- TnyAccount *tny_account =
- modest_tny_account_new_from_account (priv->account_mgr,
- account_name,
- type, priv->session,
- get_password,
- forget_password);
- if (tny_account) {
- g_object_set_data (G_OBJECT(tny_account), "account_store",
- (gpointer)self);
- if (list)
- tny_list_prepend (list, G_OBJECT(tny_account));
-
- accounts = g_slist_append (accounts, tny_account); /* cache it */
- } else
- g_printerr ("modest: failed to create account for %s\n",
- account_name);
- }
- }
-
- if (type == TNY_ACCOUNT_TYPE_STORE) {
- /* Also add the Memory card account if it is mounted: */
- gboolean mmc_is_mounted = FALSE;
- GnomeVFSVolumeMonitor* monitor =
- gnome_vfs_get_volume_monitor();
- GList* list_volumes = gnome_vfs_volume_monitor_get_mounted_volumes (monitor);
- GList *iter = list_volumes;
- while (iter) {
- GnomeVFSVolume *volume = (GnomeVFSVolume*)iter->data;
- if (volume) {
- if (!mmc_is_mounted) {
- gchar *uri = gnome_vfs_volume_get_activation_uri (volume);
- if (uri && (strcmp (uri, MODEST_MCC1_VOLUMEPATH_URI) == 0)) {
- mmc_is_mounted = TRUE;
- }
- g_free (uri);
- }
-
- gnome_vfs_volume_unref(volume);
- }
-
- iter = g_list_next (iter);
- }
- g_list_free (list_volumes);
-
- if (mmc_is_mounted) {
- TnyAccount *tny_account =
- modest_tny_account_new_for_local_folders (priv->account_mgr,
- priv->session, MODEST_MCC1_VOLUMEPATH);
- if (list)
- tny_list_prepend (list, G_OBJECT(tny_account));
- accounts = g_slist_append (accounts, tny_account); /* cache it */
- }
- }
-
- /* And add the connection-specific transport accounts, if any.
- * Note that these server account instances might never be used
- * if their connections are never active: */
- /* Look at each modest account: */
- if (type == TNY_ACCOUNT_TYPE_TRANSPORT) {
- GSList *iter_account_names = account_names;
- while (iter_account_names) {
- const gchar* account_name = (const gchar*)(iter_account_names->data);
- GSList *list_specifics = modest_account_mgr_get_list (priv->account_mgr,
- account_name,
- MODEST_ACCOUNT_CONNECTION_SPECIFIC_SMTP_LIST,
- MODEST_CONF_VALUE_STRING, FALSE);
-
- /* Look at each connection-specific transport account for the
- * modest account: */
- GSList *iter = list_specifics;
- while (iter) {
- /* const gchar* this_connection_name = (const gchar*)(iter->data); */
- iter = g_slist_next (iter);
- if (iter) {
- const gchar* transport_account_name = (const gchar*)(iter->data);
- if (transport_account_name) {
- TnyAccount * tny_account = NULL;
- /* Add the account: */
- tny_account = modest_tny_account_new_from_server_account_name (
- priv->account_mgr, priv->session, transport_account_name);
- if (tny_account) {
- g_object_set_data (G_OBJECT(tny_account), "account_store",
- (gpointer)self);
- if (list)
- tny_list_prepend (list, G_OBJECT(tny_account));
-
- accounts = g_slist_append (accounts, tny_account); /* cache it */
- } else
- g_printerr ("modest: failed to create smtp-specific account for %s\n",
- transport_account_name);
- }
- }
-
- iter = g_slist_next (iter);
- }
-
- iter_account_names = g_slist_next (iter_account_names);
- }
- }
-
- /* free the account_names */
- modest_account_mgr_free_account_names (account_names);
- account_names = NULL;
-
- /* We also create a per-account local outbox folder (a _store_ account)
- * for each _transport_ account. */
- if (type == TNY_ACCOUNT_TYPE_TRANSPORT) {
- /* Now would be a good time to create the per-account local outbox folder
- * _store_ accounts corresponding to each transport account: */
- if (!priv->store_accounts_outboxes) {
- create_per_account_local_outbox_folders (self);
- }
- }
-
- /* But we only return the per-account local outbox folder when
- * _store_ accounts are requested. */
- if (type == TNY_ACCOUNT_TYPE_STORE) {
- /* Create them if necessary,
- * (which also requires creating the transport accounts,
- * if necessary.) */
- if (!priv->store_accounts_outboxes) {
- create_per_account_local_outbox_folders (self);
- }
-
- /* Also add the local folder pseudo-account: */
- TnyAccount *tny_account =
- modest_tny_account_new_for_local_folders (priv->account_mgr,
- priv->session, NULL);
-
- /* Add them to the TnyList: */
- if (priv->store_accounts_outboxes) {
- GSList *iter = NULL;
- for (iter = priv->store_accounts_outboxes; iter; iter = g_slist_next (iter)) {
- TnyAccount *outbox_account = (TnyAccount*)iter->data;
- if (list && outbox_account)
- tny_list_prepend (list, G_OBJECT(outbox_account));
-
- g_object_ref (outbox_account);
- accounts = g_slist_append (accounts, outbox_account);
- }
- }
-
- /* Add a merged folder, merging all the per-account outbox folders: */
- modest_tny_local_folders_account_add_merged_outbox_folders (
- MODEST_TNY_LOCAL_FOLDERS_ACCOUNT (tny_account), priv->store_accounts_outboxes);
-
- if (priv->store_accounts_outboxes) {
- /* We have finished with this temporary list, so free it: */
- account_list_free (priv->store_accounts_outboxes);
- priv->store_accounts_outboxes = NULL;
- }
-
- if (list)
- tny_list_prepend (list, G_OBJECT(tny_account));
- accounts = g_slist_append (accounts, tny_account); /* cache it */
- }
-
- if (type == TNY_ACCOUNT_TYPE_STORE) {
- /* Store the cache: */
- priv->store_accounts = accounts;
- } else if (type == TNY_ACCOUNT_TYPE_TRANSPORT) {
- /* Store the cache: */
- priv->transport_accounts = accounts;
- }
-}
-
-