From f2009dabdf83fb6a5151a3b5b1277edbe79f0ad2 Mon Sep 17 00:00:00 2001 From: Kevin Smith Date: Sun, 4 Oct 2009 19:20:42 +0100 Subject: Handle errors during initial login correctly. diff --git a/Swift/Controllers/LoginWindow.h b/Swift/Controllers/LoginWindow.h index bab505b..cfa20c7 100644 --- a/Swift/Controllers/LoginWindow.h +++ b/Swift/Controllers/LoginWindow.h @@ -16,6 +16,7 @@ namespace Swift { virtual void setMessage(const String&) = 0; virtual void addAvailableAccount(const String& defaultJID, const String& defaultPassword, const String& defaultCertificate) = 0; boost::signal onLoginRequest; + boost::signal onCancelLoginRequest; }; } #endif diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index 958a2ed..8bd9435 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -79,6 +79,7 @@ MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowF delete profileSettings; } loginWindow_->onLoginRequest.connect(boost::bind(&MainController::handleLoginRequest, this, _1, _2, _3, _4)); + loginWindow_->onCancelLoginRequest.connect(boost::bind(&MainController::handleCancelLoginRequest, this)); } MainController::~MainController() { @@ -259,10 +260,17 @@ void MainController::handleError(const ClientError& error) { case ClientError::ClientCertificateLoadError: message = "Error loading certificate (Invalid password?)"; break; case ClientError::ClientCertificateError: message = "Certificate not authorized"; break; } - loginWindow_->setMessage(message); + if (!rosterController_) { //hasn't been logged in yet + signOut(); + loginWindow_->setMessage(message); + } logout(); } +void MainController::handleCancelLoginRequest() { + signOut(); +} + void MainController::signOut() { logout(); loginWindow_->loggedOut(); @@ -280,7 +288,7 @@ void MainController::signOut() { } void MainController::logout() { - if (client_->isAvailable()) { + if (client_ && client_->isAvailable()) { client_->disconnect(); } setManagersEnabled(false); @@ -294,7 +302,9 @@ void MainController::setManagersEnabled(bool enabled) { foreach (JIDMUCControllerPair controllerPair, mucControllers_) { controllerPair.second->setEnabled(enabled); } - rosterController_->setEnabled(enabled); + if (rosterController_) { + rosterController_->setEnabled(enabled); + } } void MainController::handleChatRequest(const String &contact) { diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h index 5c2b523..2971493 100644 --- a/Swift/Controllers/MainController.h +++ b/Swift/Controllers/MainController.h @@ -55,6 +55,7 @@ namespace Swift { void handleConnected(); void handleLoginRequest(const String& username, const String& password, const String& certificateFile, bool remember); + void handleCancelLoginRequest(); void handleChatRequest(const String& contact); void handleJoinMUCRequest(const JID& muc, const String& nick); void handleIncomingPresence(boost::shared_ptr presence); diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp index a7c9740..23eece6 100644 --- a/Swift/QtUI/QtLoginWindow.cpp +++ b/Swift/QtUI/QtLoginWindow.cpp @@ -147,6 +147,7 @@ void QtLoginWindow::loggedOut() { void QtLoginWindow::loginClicked() { setEnabled(false); + message_->setText(""); onLoginRequest(Q2PSTRING(username_->currentText()), Q2PSTRING(password_->text()), Q2PSTRING(certificateFile_), remember_->isChecked()); } -- cgit v0.10.2-6-g49f6