The Monolithic build behaves now like a regular IRC client.
authorMarcus Eggenberger <egs@quassel-irc.org>
Sun, 4 Jan 2009 16:35:42 +0000 (17:35 +0100)
committerMarcus Eggenberger <egs@quassel-irc.org>
Sun, 4 Jan 2009 16:35:49 +0000 (17:35 +0100)
This is to make Quassel suitable for Kubuntu.
You currently cannot connect to a remote core with the monolithic
client. We investigate proper methods to make this possible again
without being uintuitive.

src/client/client.h
src/client/clientsyncer.cpp
src/client/clientsyncer.h
src/qtui/coreconnectdlg.cpp
src/qtui/coreconnectdlg.h
src/qtui/mainwin.cpp
src/qtui/mainwin.h
src/qtui/monoapplication.cpp
src/qtui/monoapplication.h

index fb5247d..050f3e9 100644 (file)
@@ -120,6 +120,8 @@ public:
   static void logMessage(QtMsgType type, const char *msg);
   static inline const QString &debugLog() { return instance()->_debugLogBuffer; }
 
   static void logMessage(QtMsgType type, const char *msg);
   static inline const QString &debugLog() { return instance()->_debugLogBuffer; }
 
+  static inline void registerClientSyncer(ClientSyncer *syncer) { emit instance()->newClientSyncer(syncer); }
+
 signals:
   void sendInput(BufferInfo, QString message);
   void requestNetworkStates();
 signals:
   void sendInput(BufferInfo, QString message);
   void requestNetworkStates();
index a8e08ef..0c6993b 100644 (file)
@@ -167,9 +167,35 @@ void ClientSyncer::coreSocketConnected() {
   SignalProxy::writeDataToDevice(socket, clientInit);
 }
 
   SignalProxy::writeDataToDevice(socket, clientInit);
 }
 
-void ClientSyncer::useInternalCore(AccountId internalAccountId) {
+void ClientSyncer::useInternalCore() {
+  AccountId internalAccountId;
+
+  CoreAccountSettings accountSettings;
+  QList<AccountId> knownAccounts = accountSettings.knownAccounts();
+  foreach(AccountId id, knownAccounts) {
+    if(!id.isValid())
+      continue;
+    QVariantMap data = accountSettings.retrieveAccountData(id);
+    if(data.contains("InternalAccount") && data["InternalAccount"].toBool()) {
+      internalAccountId = id;
+      break;
+    }
+  }
+
+  if(!internalAccountId.isValid()) {
+    for(AccountId i = 1;; i++) {
+      if(!knownAccounts.contains(i)) {
+       internalAccountId = i;
+       break;
+      }
+    }
+    QVariantMap data;
+    data["InternalAccount"] = true;
+    accountSettings.storeAccountData(internalAccountId, data);
+  }
+
   coreConnectionInfo["AccountId"] = QVariant::fromValue<AccountId>(internalAccountId);
   coreConnectionInfo["AccountId"] = QVariant::fromValue<AccountId>(internalAccountId);
-  emit startInternalCore();
+  emit startInternalCore(this);
   emit connectToInternalCore(Client::instance()->signalProxy());
 }
 
   emit connectToInternalCore(Client::instance()->signalProxy());
 }
 
index 7f07de3..389f69b 100644 (file)
@@ -63,14 +63,14 @@ signals:
 
   void encrypted(bool);
 
 
   void encrypted(bool);
 
-  void startInternalCore();
+  void startInternalCore(ClientSyncer *syncer);
   void connectToInternalCore(SignalProxy *proxy);
 
 public slots:
   void connectToCore(const QVariantMap &);
   void loginToCore(const QString &user, const QString &passwd);
   void disconnectFromCore();
   void connectToInternalCore(SignalProxy *proxy);
 
 public slots:
   void connectToCore(const QVariantMap &);
   void loginToCore(const QString &user, const QString &passwd);
   void disconnectFromCore();
-  void useInternalCore(AccountId internalAccountId);
+  void useInternalCore();
 
 private slots:
   void coreSocketError(QAbstractSocket::SocketError);
 
 private slots:
   void coreSocketError(QAbstractSocket::SocketError);
index c30005b..c63446a 100644 (file)
@@ -50,8 +50,9 @@ CoreConnectDlg::CoreConnectDlg(bool autoconnect, QWidget *parent)
   setWindowFlags(Qt::Sheet);
 
   clientSyncer = new ClientSyncer(this);
   setWindowFlags(Qt::Sheet);
 
   clientSyncer = new ClientSyncer(this);
-  connect(this, SIGNAL(newClientSyncer(ClientSyncer *)), Client::instance(), SIGNAL(newClientSyncer(ClientSyncer *)));
-  emit newClientSyncer(clientSyncer); // announce the new client syncer via the client.
+  Client::registerClientSyncer(clientSyncer);
+//   connect(this, SIGNAL(newClientSyncer(ClientSyncer *)), Client::instance(), SIGNAL(newClientSyncer(ClientSyncer *)));
+//   emit newClientSyncer(clientSyncer); // announce the new client syncer via the client.
 
   wizard = 0;
 
 
   wizard = 0;
 
@@ -219,14 +220,7 @@ void CoreConnectDlg::on_accountButtonBox_accepted() {
 }
 
 void CoreConnectDlg::on_useInternalCore_clicked() {
 }
 
 void CoreConnectDlg::on_useInternalCore_clicked() {
-  if(!_internalAccountId.isValid()) {
-    _internalAccountId = findFreeAccountId();
-    QVariantMap data;
-    data["InternalAccount"] = true;
-    CoreAccountSettings accountSettings;
-    accountSettings.storeAccountData(_internalAccountId, data);
-  }
-  clientSyncer->useInternalCore(_internalAccountId);
+  clientSyncer->useInternalCore();
   ui.loginButtonBox->setStandardButtons(QDialogButtonBox::Cancel);
 }
 
   ui.loginButtonBox->setStandardButtons(QDialogButtonBox::Cancel);
 }
 
index 3fb8b99..aa3bae0 100644 (file)
@@ -38,8 +38,8 @@ public:
   CoreConnectDlg(bool = false, QWidget *parent = 0);
   ~CoreConnectDlg();
 
   CoreConnectDlg(bool = false, QWidget *parent = 0);
   ~CoreConnectDlg();
 
-signals:
-  void newClientSyncer(ClientSyncer *);
+// signals:
+//   void newClientSyncer(ClientSyncer *);
 
 private slots:
   /*** Phase Null: Accounts ***/
 
 private slots:
   /*** Phase Null: Accounts ***/
index 431dacd..4957c90 100644 (file)
@@ -41,6 +41,7 @@
 #include "chatmonitorview.h"
 #include "chatview.h"
 #include "client.h"
 #include "chatmonitorview.h"
 #include "chatview.h"
 #include "client.h"
+#include "clientsyncer.h"
 #include "clientbacklogmanager.h"
 #include "coreinfodlg.h"
 #include "coreconnectdlg.h"
 #include "clientbacklogmanager.h"
 #include "coreinfodlg.h"
 #include "coreconnectdlg.h"
@@ -175,7 +176,11 @@ void MainWin::init() {
   setDisconnectedState();  // Disable menus and stuff
 
   show();
   setDisconnectedState();  // Disable menus and stuff
 
   show();
-  showCoreConnectionDlg(true); // autoconnect if appropriate
+  if(Quassel::runMode() != Quassel::Monolithic) {
+    showCoreConnectionDlg(true); // autoconnect if appropriate
+  } else {
+    startInternalCore();
+  }
 }
 
 MainWin::~MainWin() {
 }
 
 MainWin::~MainWin() {
@@ -618,6 +623,13 @@ void MainWin::setDisconnectedState() {
   updateIcon();
 }
 
   updateIcon();
 }
 
+void MainWin::startInternalCore() {
+  ClientSyncer *syncer = new ClientSyncer();
+  Client::registerClientSyncer(syncer);
+  connect(syncer, SIGNAL(syncFinished()), syncer, SLOT(deleteLater()), Qt::QueuedConnection);
+  syncer->useInternalCore();
+}
+
 void MainWin::showCoreConnectionDlg(bool autoConnect) {
   CoreConnectDlg(autoConnect, this).exec();
 }
 void MainWin::showCoreConnectionDlg(bool autoConnect) {
   CoreConnectDlg(autoConnect, this).exec();
 }
index a20a8af..bfac91d 100644 (file)
@@ -96,6 +96,7 @@ class MainWin
     void messagesInserted(const QModelIndex &parent, int start, int end);
     void showAboutDlg();
     void showChannelList(NetworkId netId = NetworkId());
     void messagesInserted(const QModelIndex &parent, int start, int end);
     void showAboutDlg();
     void showChannelList(NetworkId netId = NetworkId());
+    void startInternalCore();
     void showCoreConnectionDlg(bool autoConnect = false);
     void showCoreInfoDlg();
     void showSettingsDlg();
     void showCoreConnectionDlg(bool autoConnect = false);
     void showCoreInfoDlg();
     void showSettingsDlg();
index a63ec55..6173526 100644 (file)
@@ -53,16 +53,15 @@ MonolithicApplication::~MonolithicApplication() {
 }
 
 void MonolithicApplication::newClientSyncer(ClientSyncer *syncer) {
 }
 
 void MonolithicApplication::newClientSyncer(ClientSyncer *syncer) {
-  connect(syncer, SIGNAL(startInternalCore()), this, SLOT(startInternalCore()));
+  connect(syncer, SIGNAL(startInternalCore(ClientSyncer *)), this, SLOT(startInternalCore(ClientSyncer *)));
 }
 
 }
 
-void MonolithicApplication::startInternalCore() {
+void MonolithicApplication::startInternalCore(ClientSyncer *syncer) {
   if(!_internalInitDone) {
     _internal->init();
     _internalInitDone = true;
   }
   Core *core = Core::instance();
   if(!_internalInitDone) {
     _internal->init();
     _internalInitDone = true;
   }
   Core *core = Core::instance();
-  ClientSyncer *syncer = static_cast<ClientSyncer *>(sender());
   connect(syncer, SIGNAL(connectToInternalCore(SignalProxy *)), core, SLOT(setupInternalClientSession(SignalProxy *)));
   connect(core, SIGNAL(sessionState(const QVariant &)), syncer, SLOT(internalSessionStateReceived(const QVariant &)));
 }
   connect(syncer, SIGNAL(connectToInternalCore(SignalProxy *)), core, SLOT(setupInternalClientSession(SignalProxy *)));
   connect(core, SIGNAL(sessionState(const QVariant &)), syncer, SLOT(internalSessionStateReceived(const QVariant &)));
 }
index 9b49403..15854a2 100644 (file)
@@ -36,7 +36,7 @@ public:
 
 private slots:
   void newClientSyncer(ClientSyncer *syncer);
 
 private slots:
   void newClientSyncer(ClientSyncer *syncer);
-  void startInternalCore();
+  void startInternalCore(ClientSyncer *syncer);
 
 private:
   CoreApplicationInternal *_internal;
 
 private:
   CoreApplicationInternal *_internal;