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
parentf3e75e58e57e5a49a79da8a88d25f17c784812b6 (diff)
downloadswift-contrib-39e4547f396b6a21ec4ceb2f28c003c4011229a7.zip
swift-contrib-39e4547f396b6a21ec4ceb2f28c003c4011229a7.tar.bz2
Add option to log in automatically.
Resolves: #240
-rw-r--r--Swift/Controllers/MainController.cpp30
-rw-r--r--Swift/Controllers/MainController.h2
-rw-r--r--Swift/Controllers/UIInterfaces/LoginWindow.h4
-rw-r--r--Swift/QtUI/QtLoginWindow.cpp15
-rw-r--r--Swift/QtUI/QtLoginWindow.h3
5 files changed, 44 insertions, 10 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;
};
}
diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp
index ff2a50b..a73da52 100644
--- a/Swift/QtUI/QtLoginWindow.cpp
+++ b/Swift/QtUI/QtLoginWindow.cpp
@@ -98,6 +98,9 @@ QtLoginWindow::QtLoginWindow(UIEventStream* uiEventStream) : QMainWindow() {
layout->addStretch();
remember_ = new QCheckBox(tr("Remember Password?"), this);
layout->addWidget(remember_);
+ loginAutomatically_ = new QCheckBox(tr("Login Automatically?"), this);
+ layout->addWidget(loginAutomatically_);
+
connect(loginButton_, SIGNAL(clicked()), SLOT(loginClicked()));
stack_->addWidget(wrapperWidget);
#ifdef SWIFTEN_PLATFORM_MACOSX
@@ -218,10 +221,16 @@ void QtLoginWindow::loggedOut() {
setEnabled(true);
}
+void QtLoginWindow::setIsLoggingIn(bool loggingIn) {
+ setEnabled(!loggingIn);
+}
+
void QtLoginWindow::loginClicked() {
- setEnabled(false);
- message_->setText("");
- onLoginRequest(Q2PSTRING(username_->currentText()), Q2PSTRING(password_->text()), Q2PSTRING(certificateFile_), remember_->isChecked());
+ onLoginRequest(Q2PSTRING(username_->currentText()), Q2PSTRING(password_->text()), Q2PSTRING(certificateFile_), remember_->isChecked(), loginAutomatically_->isChecked());
+}
+
+void QtLoginWindow::setLoginAutomatically(bool loginAutomatically) {
+ loginAutomatically_->setChecked(loginAutomatically);
}
void QtLoginWindow::handleCertficateChecked(bool checked) {
diff --git a/Swift/QtUI/QtLoginWindow.h b/Swift/QtUI/QtLoginWindow.h
index 69327e9..b609b64 100644
--- a/Swift/QtUI/QtLoginWindow.h
+++ b/Swift/QtUI/QtLoginWindow.h
@@ -28,6 +28,8 @@ namespace Swift {
virtual void loggedOut();
virtual void setMessage(const String& message);
virtual void addAvailableAccount(const String& defaultJID, const String& defaultPassword, const String& defaultCertificate);
+ virtual void setLoginAutomatically(bool loginAutomatically);
+ virtual void setIsLoggingIn(bool loggingIn);
static QRect defaultPosition();
void setGentleGeometry(const QRect&);
void selectUser(const String& user);
@@ -56,6 +58,7 @@ namespace Swift {
QLineEdit* password_;
QPushButton* loginButton_;
QCheckBox* remember_;
+ QCheckBox* loginAutomatically_;
QStackedWidget* stack_;
QLabel* message_;
QString certificateFile_;