Resurrect CoreConnectDlg
[quassel.git] / src / client / coreconnection.cpp
index b2c040e..863f1bd 100644 (file)
@@ -25,6 +25,7 @@
 #endif
 
 #include "client.h"
+#include "clientsettings.h"
 #include "coreaccountmodel.h"
 #include "identity.h"
 #include "network.h"
@@ -45,10 +46,6 @@ CoreConnection::CoreConnection(CoreAccountModel *model, QObject *parent)
 
 }
 
-void CoreConnection::start() {
-  connectToCore(1);
-}
-
 void CoreConnection::init() {
   connect(Client::signalProxy(), SIGNAL(disconnected()), SLOT(coreSocketDisconnected()));
 }
@@ -237,18 +234,40 @@ void CoreConnection::disconnectFromCore() {
 }
 
 void CoreConnection::reconnectToCore() {
-
+  if(currentAccount().isValid())
+    connectToCore(currentAccount().accountId());
 }
 
-void CoreConnection::connectToCore(AccountId accId) {
-  resetConnection();
+bool CoreConnection::connectToCore(AccountId accId) {
+  if(isConnected())
+    return false;
+
+  CoreAccountSettings s;
+
+  if(!accId.isValid()) {
+    // check our settings and figure out what to do
+    if(!s.autoConnectOnStartup())
+      return false;
+    if(s.autoConnectToFixedAccount())
+      accId = s.autoConnectAccount();
+    else
+      accId = s.lastAccount();
+    if(!accId.isValid())
+      return false;
+  }
   _account = accountModel()->account(accId);
-
   if(!_account.accountId().isValid()) {
-    emit connectionError(tr("Invalid core account, cannot connect!"));
-    return;
+    return false;
   }
 
+  s.setLastAccount(accId);
+  connectToCurrentAccount();
+  return true;
+}
+
+void CoreConnection::connectToCurrentAccount() {
+  resetConnection();
+
   Q_ASSERT(!_socket);
 #ifdef HAVE_SSL
   QSslSocket *sock = new QSslSocket(Client::instance());