summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-04-06 22:44:15 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-04-06 22:44:15 (GMT)
commit39e4547f396b6a21ec4ceb2f28c003c4011229a7 (patch)
treead7d2dbb5d968cd187360585387817d7f9358f1f /Swift/Controllers
parentf3e75e58e57e5a49a79da8a88d25f17c784812b6 (diff)
downloadswift-39e4547f396b6a21ec4ceb2f28c003c4011229a7.zip
swift-39e4547f396b6a21ec4ceb2f28c003c4011229a7.tar.bz2
Add option to log in automatically.
Resolves: #240
Diffstat (limited to 'Swift/Controllers')
-rw-r--r--Swift/Controllers/MainController.cpp30
-rw-r--r--Swift/Controllers/MainController.h2
-rw-r--r--Swift/Controllers/UIInterfaces/LoginWindow.h4
3 files changed, 29 insertions, 7 deletions
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp
index 8c43921..f18bd5a 100644
--- a/Swift/Controllers/MainController.cpp
+++ b/Swift/Controllers/MainController.cpp
@@ -73,19 +73,36 @@ MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowF
systemTrayController_ = new SystemTrayController(eventController_, systemTray);
loginWindow_ = loginWindowFactory_->createLoginWindow(uiEventStream_);
soundEventController_ = new SoundEventController(eventController_, soundPlayer, settings, uiEventStream_);
+
+ String selectedLoginJID = settings_->getStringSetting("lastLoginJID");
+ bool loginAutomatically = settings_->getBoolSetting("loginAutomatically", false);
+ String cachedPassword;
+ String cachedCertificate;
foreach (String profile, settings->getAvailableProfiles()) {
ProfileSettingsProvider* profileSettings = new ProfileSettingsProvider(profile, settings);
- loginWindow_->addAvailableAccount(profileSettings->getStringSetting("jid"), profileSettings->getStringSetting("pass"), profileSettings->getStringSetting("certificate"));
+ String password = profileSettings->getStringSetting("pass");
+ String certificate = profileSettings->getStringSetting("certificate");
+ String jid = profileSettings->getStringSetting("jid");
+ loginWindow_->addAvailableAccount(jid, password, certificate);
+ if (jid == selectedLoginJID) {
+ cachedPassword = password;
+ cachedCertificate = certificate;
+ }
delete profileSettings;
}
- loginWindow_->selectUser(settings_->getStringSetting("lastLoginJID"));
- loginWindow_->onLoginRequest.connect(boost::bind(&MainController::handleLoginRequest, this, _1, _2, _3, _4));
+ loginWindow_->selectUser(selectedLoginJID);
+ loginWindow_->setLoginAutomatically(loginAutomatically);
+ loginWindow_->onLoginRequest.connect(boost::bind(&MainController::handleLoginRequest, this, _1, _2, _3, _4, _5));
loginWindow_->onCancelLoginRequest.connect(boost::bind(&MainController::handleCancelLoginRequest, this));
idleDetector_.setIdleTimeSeconds(600);
idleDetector_.onIdleChanged.connect(boost::bind(&MainController::handleInputIdleChanged, this, _1));
xmlConsoleController_ = new XMLConsoleController(uiEventStream_, xmlConsoleWidgetFactory);
+
+ if (loginAutomatically) {
+ handleLoginRequest(selectedLoginJID, cachedPassword, cachedCertificate, true, true);
+ }
}
MainController::~MainController() {
@@ -127,6 +144,7 @@ void MainController::resetClient() {
}
void MainController::handleConnected() {
+ loginWindow_->setIsLoggingIn(false);
//FIXME: this freshLogin thing is temporary so I can see what's what before I split into a seperate method.
bool freshLogin = rosterController_ == NULL;
if (freshLogin) {
@@ -254,13 +272,15 @@ void MainController::handleInputIdleChanged(bool idle) {
}
}
-void MainController::handleLoginRequest(const String &username, const String &password, const String& certificateFile, bool remember) {
+void MainController::handleLoginRequest(const String &username, const String &password, const String& certificateFile, bool remember, bool loginAutomatically) {
loginWindow_->setMessage("");
+ loginWindow_->setIsLoggingIn(true);
ProfileSettingsProvider* profileSettings = new ProfileSettingsProvider(username, settings_);
profileSettings->storeString("jid", username);
profileSettings->storeString("certificate", certificateFile);
- profileSettings->storeString("pass", remember ? password : "");
+ profileSettings->storeString("pass", (remember || loginAutomatically) ? password : "");
settings_->storeString("lastLoginJID", username);
+ settings_->storeBool("loginAutomatically", loginAutomatically);
loginWindow_->addAvailableAccount(profileSettings->getStringSetting("jid"), profileSettings->getStringSetting("pass"), profileSettings->getStringSetting("certificate"));
delete profileSettings;
jid_ = JID(username);
diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h
index 75a8e5a..a098ee2 100644
--- a/Swift/Controllers/MainController.h
+++ b/Swift/Controllers/MainController.h
@@ -62,7 +62,7 @@ namespace Swift {
private:
void resetClient();
void handleConnected();
- void handleLoginRequest(const String& username, const String& password, const String& certificateFile, bool remember);
+ void handleLoginRequest(const String& username, const String& password, const String& certificateFile, bool remember, bool loginAutomatically);
void handleCancelLoginRequest();
void handleChangeStatusRequest(StatusShow::Type show, const String &statusText);
void handleError(const ClientError& error);
diff --git a/Swift/Controllers/UIInterfaces/LoginWindow.h b/Swift/Controllers/UIInterfaces/LoginWindow.h
index d165125..1eecaaa 100644
--- a/Swift/Controllers/UIInterfaces/LoginWindow.h
+++ b/Swift/Controllers/UIInterfaces/LoginWindow.h
@@ -15,8 +15,10 @@ namespace Swift {
virtual void morphInto(MainWindow *mainWindow) = 0;
virtual void loggedOut() = 0;
virtual void setMessage(const String&) = 0;
+ virtual void setIsLoggingIn(bool loggingIn) = 0;
virtual void addAvailableAccount(const String& defaultJID, const String& defaultPassword, const String& defaultCertificate) = 0;
- boost::signal<void (const String&, const String&, const String& /* certificateFile */, bool)> onLoginRequest;
+ boost::signal<void (const String&, const String&, const String& /* certificateFile */, bool /* remember password*/, bool /* login automatically */)> onLoginRequest;
+ virtual void setLoginAutomatically(bool loginAutomatically) = 0;
boost::signal<void ()> onCancelLoginRequest;
};
}