X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-account-store.c;h=29420e6df2df861d6061724160950152337b6ae5;hp=f1b221e3b0870e390f57bef91185cdd0f6a359eb;hb=31cd8a2a77f1c87e3c46bf318dca752f1cec513f;hpb=94bf2a181e8b2644f037246b2fc3a70c865c22e2 diff --git a/src/modest-tny-account-store.c b/src/modest-tny-account-store.c index f1b221e..29420e6 100644 --- a/src/modest-tny-account-store.c +++ b/src/modest-tny-account-store.c @@ -116,7 +116,7 @@ static void connection_status_changed (TnyAccount *account, TnyConnectionStatus status, gpointer data); -static gboolean only_local_accounts (ModestTnyAccountStore *self); +static inline gboolean only_local_accounts (ModestTnyAccountStore *self); /* list my signals */ enum { @@ -335,8 +335,8 @@ add_mmc_account(ModestTnyAccountStore *self, gboolean emit_insert_signal) g_return_if_fail (priv->session); TnyAccount *mmc_account = modest_tny_account_new_for_local_folders (priv->account_mgr, - priv->session, - MODEST_MCC1_VOLUMEPATH); + priv->session, + g_getenv (MODEST_MMC1_VOLUMEPATH_ENV)); /* Add to the list of store accounts */ tny_list_append (priv->store_accounts, G_OBJECT (mmc_account)); @@ -358,6 +358,7 @@ on_vfs_volume_mounted(GnomeVFSVolumeMonitor *volume_monitor, { ModestTnyAccountStore *self; ModestTnyAccountStorePrivate *priv; + gchar *volume_path_uri; gchar *uri = NULL; @@ -367,10 +368,14 @@ on_vfs_volume_mounted(GnomeVFSVolumeMonitor *volume_monitor, /* Check whether this was the external MMC1 card: */ uri = gnome_vfs_volume_get_activation_uri (volume); - if (uri && (!strcmp (uri, MODEST_MCC1_VOLUMEPATH_URI))) { + volume_path_uri = g_strconcat (MODEST_MMC1_VOLUMEPATH_URI_PREFIX, + g_getenv (MODEST_MMC1_VOLUMEPATH_ENV), + NULL); + if (uri && (!strcmp (uri, volume_path_uri))) { add_mmc_account (self, TRUE /* emit the insert signal. */); } - + + g_free (volume_path_uri); g_free (uri); } @@ -382,13 +387,17 @@ on_vfs_volume_unmounted(GnomeVFSVolumeMonitor *volume_monitor, ModestTnyAccountStore *self; ModestTnyAccountStorePrivate *priv; gchar *uri = NULL; + gchar *volume_path_uri; self = MODEST_TNY_ACCOUNT_STORE(user_data); priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self); /* Check whether this was the external MMC1 card: */ uri = gnome_vfs_volume_get_activation_uri (volume); - if (uri && (strcmp (uri, MODEST_MCC1_VOLUMEPATH_URI) == 0)) { + volume_path_uri = g_strconcat (MODEST_MMC1_VOLUMEPATH_URI_PREFIX, + g_getenv (MODEST_MMC1_VOLUMEPATH_ENV), + NULL); + if (uri && (strcmp (uri, volume_path_uri) == 0)) { TnyAccount *mmc_account = NULL; gboolean found = FALSE; TnyIterator *iter = NULL; @@ -422,6 +431,7 @@ on_vfs_volume_unmounted(GnomeVFSVolumeMonitor *volume_monitor, __FUNCTION__); } } + g_free (volume_path_uri); g_free (uri); } @@ -851,7 +861,7 @@ volume_path_is_mounted (const gchar* path) * GnomeVFSVolume even if the drive is not mounted: */ /* GnomeVFSVolume *volume = gnome_vfs_volume_monitor_get_volume_for_path (monitor, - MODEST_MCC1_VOLUMEPATH); + g_getenv (MODEST_MMC1_VOLUMEPATH_ENV)); if (volume) { gnome_vfs_volume_unref(volume); } @@ -951,7 +961,7 @@ modest_tny_account_store_new (ModestAccountMgr *account_mgr, add_connection_specific_transport_accounts (MODEST_TNY_ACCOUNT_STORE(obj)); /* This is a singleton, so it does not need to be unrefed. */ - if (volume_path_is_mounted (MODEST_MCC1_VOLUMEPATH)) { + if (volume_path_is_mounted (g_getenv (MODEST_MMC1_VOLUMEPATH_ENV))) { /* It is mounted: */ add_mmc_account (MODEST_TNY_ACCOUNT_STORE (obj), FALSE /* don't emit the insert signal. */); } @@ -1502,9 +1512,9 @@ connection_status_changed (TnyAccount *account, runnning */ if (status == TNY_CONNECTION_STATUS_CONNECTED) { const gchar *account_name; - ModestWindow *main_window; + ModestWindow *top_window; ModestTnyAccountStorePrivate *priv = NULL; - + priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE (data); /* Remove this handler */ @@ -1514,8 +1524,8 @@ connection_status_changed (TnyAccount *account, /* Perform a send receive */ account_name = modest_tny_account_get_parent_modest_account_name_for_server_account (account); - main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), FALSE); - modest_ui_actions_do_send_receive (account_name, FALSE, FALSE, TRUE, main_window); + top_window = modest_window_mgr_get_current_top (modest_runtime_get_window_mgr ()); + modest_ui_actions_do_send_receive (account_name, FALSE, FALSE, TRUE, top_window); } } @@ -1650,7 +1660,7 @@ add_outbox_from_transport_account_to_global_outbox (ModestTnyAccountStore *self, info = g_slice_new0 (AddOutboxInfo); info->account_store = self; info->transport_account = g_object_ref (transport_account); - tny_folder_store_get_folders_async (TNY_FOLDER_STORE (account_outbox), folders, NULL, + tny_folder_store_get_folders_async (TNY_FOLDER_STORE (account_outbox), folders, NULL, FALSE, add_outbox_from_transport_account_to_global_outbox_get_folders_cb, NULL, (gpointer) info); g_object_unref (account_outbox); } @@ -1706,27 +1716,10 @@ insert_account (ModestTnyAccountStore *self, g_object_unref (transport_account); } -static gboolean +static inline gboolean only_local_accounts (ModestTnyAccountStore *self) { - ModestTnyAccountStorePrivate *priv = NULL; - gboolean only_local = TRUE; - TnyIterator *iter; - - /* Check if this is the first remote account we add */ - priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE (self); - iter = tny_list_create_iterator (priv->store_accounts); - - while (!tny_iterator_is_done (iter) && only_local) { - TnyAccount *account = (TnyAccount *) tny_iterator_get_current (iter); - if (modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (account))) - only_local = FALSE; - g_object_unref (account); - tny_iterator_next (iter); - } - g_object_unref (iter); - - return only_local; + return (modest_tny_account_store_get_num_remote_accounts (self) > 0) ? FALSE : TRUE; } static void @@ -1973,6 +1966,12 @@ modest_tny_account_store_new_connection_specific_transport_account (ModestTnyAcc return TNY_TRANSPORT_ACCOUNT (tny_account); } +static void +foreach_free_string(gpointer data, + gpointer user_data) +{ + g_free (data); +} static void add_connection_specific_transport_accounts (ModestTnyAccountStore *self) @@ -1989,6 +1988,7 @@ add_connection_specific_transport_accounts (ModestTnyAccountStore *self) if (err) { g_error_free (err); g_return_if_reached (); + return; } /* Look at each connection-specific transport account for the @@ -2007,6 +2007,10 @@ add_connection_specific_transport_accounts (ModestTnyAccountStore *self) } iter = g_slist_next (iter); } + + /* Free the list */ + g_slist_foreach (list_specifics, foreach_free_string, NULL); + g_slist_free (list_specifics); } static void @@ -2025,6 +2029,7 @@ remove_connection_specific_transport_accounts (ModestTnyAccountStore *self) if (err) { g_error_free (err); g_return_if_reached (); + return; } /* Look at each connection-specific transport account for the @@ -2046,6 +2051,10 @@ remove_connection_specific_transport_accounts (ModestTnyAccountStore *self) } iter = g_slist_next (iter); } + + /* Free the list */ + g_slist_foreach (list_specifics, foreach_free_string, NULL); + g_slist_free (list_specifics); } @@ -2068,7 +2077,7 @@ modest_tny_account_store_find_msg_in_outboxes (ModestTnyAccountStore *self, TnyAccount *account = TNY_ACCOUNT (tny_iterator_get_current (acc_iter)); TnyIterator *folders_iter = NULL; - tny_folder_store_get_folders (TNY_FOLDER_STORE (account), folders, NULL, NULL); + tny_folder_store_get_folders (TNY_FOLDER_STORE (account), folders, NULL, FALSE, NULL); folders_iter = tny_list_create_iterator (folders); while (msg == NULL && !tny_iterator_is_done (folders_iter)) { @@ -2231,3 +2240,25 @@ modest_tny_account_store_set_send_mail_blocked (ModestTnyAccountStore *self, priv->send_mail_blocked = blocked; } + +static void +count_remote_accounts (gpointer data, gpointer user_data) +{ + TnyFolderStore *account = TNY_FOLDER_STORE (data); + gint *count = (gint *) user_data; + + if (modest_tny_folder_store_is_remote (account)) + (*count)++; +} + +guint +modest_tny_account_store_get_num_remote_accounts (ModestTnyAccountStore *self) +{ + ModestTnyAccountStorePrivate *priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE (self); + gint count = 0; + + /* Count remote accounts */ + tny_list_foreach (priv->store_accounts, (GFunc) count_remote_accounts, &count); + + return count; +}