X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-tny-account-store.c;h=4d88938b8fb58eb90c128dbfdfc8f0ecaabf1313;hp=5344694401d12aa4d68c57dbef0b67e100a62567;hb=e374da56f67092cecb1572dd4bee2ca34e0bc04c;hpb=79acfb0d9e8e1ade6eedcc636cba74f7e9cfd939 diff --git a/src/modest-tny-account-store.c b/src/modest-tny-account-store.c index 5344694..4d88938 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 { @@ -145,6 +145,9 @@ struct _ModestTnyAccountStorePrivate { /* Matches transport accounts and outbox folder */ GHashTable *outbox_of_transport; + + /* is sending mail blocked? */ + gboolean send_mail_blocked; }; #define MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -266,6 +269,7 @@ modest_tny_account_store_instance_init (ModestTnyAccountStore *obj) priv->session = NULL; priv->device = NULL; priv->sighandlers = NULL; + priv->send_mail_blocked = FALSE; priv->outbox_of_transport = g_hash_table_new_full (g_direct_hash, g_direct_equal, @@ -331,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)); @@ -354,6 +358,7 @@ on_vfs_volume_mounted(GnomeVFSVolumeMonitor *volume_monitor, { ModestTnyAccountStore *self; ModestTnyAccountStorePrivate *priv; + gchar *volume_path_uri; gchar *uri = NULL; @@ -363,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); } @@ -378,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; @@ -418,6 +431,7 @@ on_vfs_volume_unmounted(GnomeVFSVolumeMonitor *volume_monitor, __FUNCTION__); } } + g_free (volume_path_uri); g_free (uri); } @@ -509,6 +523,7 @@ show_wrong_password_dialog (TnyAccount *account) if (proto && MODEST_IS_ACCOUNT_PROTOCOL (proto)) { ModestAccountSettingsDialog *dialog = modest_account_protocol_get_account_settings_dialog (proto, modest_account_name); + modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), NULL); gtk_widget_show (GTK_WIDGET (dialog)); } } @@ -846,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); } @@ -946,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. */); } @@ -1645,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); } @@ -1701,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 @@ -1968,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) @@ -1984,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 @@ -2002,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 @@ -2020,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 @@ -2041,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); } @@ -2063,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)) { @@ -2205,3 +2219,46 @@ modest_tny_account_store_shutdown (ModestTnyAccountStore *self, g_free (op_data); } } + +gboolean +modest_tny_account_store_is_send_mail_blocked (ModestTnyAccountStore *self) +{ + ModestTnyAccountStorePrivate *priv; + + priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(self); + + return priv->send_mail_blocked; +} + +void +modest_tny_account_store_set_send_mail_blocked (ModestTnyAccountStore *self, + gboolean blocked) +{ + ModestTnyAccountStorePrivate *priv; + + priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE(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; +}