X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fgnome%2Fmodest-account-view-window.c;h=c71ad6607855711d9412b853207a343d51f173d9;hp=65db235587e63a11fe00aa272cb6a57bafd5509c;hb=42346499332a89c1cc32d9ec4127e88de4ddf2da;hpb=a492bde5b678e6fcd4e89c0a88f159121ea4e8b9 diff --git a/src/gnome/modest-account-view-window.c b/src/gnome/modest-account-view-window.c index 65db235..c71ad66 100644 --- a/src/gnome/modest-account-view-window.c +++ b/src/gnome/modest-account-view-window.c @@ -193,10 +193,85 @@ on_remove_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) } } +/** Check whether any connections are active, and cancel them if + * the user wishes. + * Returns TRUE is there was no problem, + * or if an operation was cancelled so we can continue. + * Returns FALSE if the user chose to cancel his request instead. + */ +static gboolean +check_for_active_account (ModestAccountViewWindow *self, const gchar* account_name) +{ + ModestTnyAccountStore *acc_store; + ModestMailOperationQueue* queue; + TnyConnectionStatus store_conn_status, transport_conn_status; + TnyAccount *store_account = NULL, *transport_account = NULL; + gboolean retval = TRUE; + + acc_store = modest_runtime_get_account_store (); + queue = modest_runtime_get_mail_operation_queue (); + + store_account = + modest_tny_account_store_get_server_account (acc_store, + account_name, + TNY_ACCOUNT_TYPE_STORE); + transport_account = + modest_tny_account_store_get_server_account (acc_store, + account_name, + TNY_ACCOUNT_TYPE_TRANSPORT); + + store_conn_status = tny_account_get_connection_status (store_account); + transport_conn_status = tny_account_get_connection_status (transport_account); + + if (store_conn_status == TNY_CONNECTION_STATUS_CONNECTED || + transport_conn_status == TNY_CONNECTION_STATUS_CONNECTED) { + gint response; + + response = modest_platform_run_confirmation_dialog (GTK_WINDOW (self), + _("emev_nc_disconnect_account")); + if (response == GTK_RESPONSE_OK) { + /* FIXME: We should only cancel those of this account */ + modest_mail_operation_queue_cancel_all (queue); + + /* Also disconnect the account */ + if (tny_account_get_connection_status (store_account) == TNY_CONNECTION_STATUS_CONNECTED) { + tny_account_cancel (store_account); + tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (store_account), + FALSE, NULL, NULL); + } + if (tny_account_get_connection_status (transport_account) == TNY_CONNECTION_STATUS_CONNECTED) { + tny_account_cancel (transport_account); + tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (transport_account), + FALSE, NULL, NULL); + } + retval = TRUE; + } else { + retval = FALSE; + } + } + + /* Frees */ + g_object_unref (store_account); + g_object_unref (transport_account); + + return retval; +} + static void on_edit_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) { - g_message (__FUNCTION__); + ModestAccountViewWindowPrivate *priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE (self); + + gchar* account_name = modest_account_view_get_selected_account (priv->account_view); + if (!account_name) + return; + + if (check_for_active_account (self, account_name)) { + modest_tny_account_store_show_account_settings_dialog (modest_runtime_get_account_store (), account_name); + + } + + g_free (account_name); } static void