From c45a002f4e8d5a1faa9fb6804e85d875862210db Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Sun, 4 Jan 2009 17:35:42 +0100 Subject: [PATCH] The Monolithic build behaves now like a regular IRC client. 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 | 2 ++ src/client/clientsyncer.cpp | 30 ++++++++++++++++++++++++++++-- src/client/clientsyncer.h | 4 ++-- src/qtui/coreconnectdlg.cpp | 14 ++++---------- src/qtui/coreconnectdlg.h | 4 ++-- src/qtui/mainwin.cpp | 14 +++++++++++++- src/qtui/mainwin.h | 1 + src/qtui/monoapplication.cpp | 5 ++--- src/qtui/monoapplication.h | 2 +- 9 files changed, 55 insertions(+), 21 deletions(-) diff --git a/src/client/client.h b/src/client/client.h index fb5247d8..050f3e9a 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -120,6 +120,8 @@ public: 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(); diff --git a/src/client/clientsyncer.cpp b/src/client/clientsyncer.cpp index a8e08ef2..0c6993b8 100644 --- a/src/client/clientsyncer.cpp +++ b/src/client/clientsyncer.cpp @@ -167,9 +167,35 @@ void ClientSyncer::coreSocketConnected() { SignalProxy::writeDataToDevice(socket, clientInit); } -void ClientSyncer::useInternalCore(AccountId internalAccountId) { +void ClientSyncer::useInternalCore() { + AccountId internalAccountId; + + CoreAccountSettings accountSettings; + QList 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(internalAccountId); - emit startInternalCore(); + emit startInternalCore(this); emit connectToInternalCore(Client::instance()->signalProxy()); } diff --git a/src/client/clientsyncer.h b/src/client/clientsyncer.h index 7f07de39..389f69bd 100644 --- a/src/client/clientsyncer.h +++ b/src/client/clientsyncer.h @@ -63,14 +63,14 @@ signals: 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 useInternalCore(AccountId internalAccountId); + void useInternalCore(); private slots: void coreSocketError(QAbstractSocket::SocketError); diff --git a/src/qtui/coreconnectdlg.cpp b/src/qtui/coreconnectdlg.cpp index c30005b7..c63446a2 100644 --- a/src/qtui/coreconnectdlg.cpp +++ b/src/qtui/coreconnectdlg.cpp @@ -50,8 +50,9 @@ CoreConnectDlg::CoreConnectDlg(bool autoconnect, QWidget *parent) 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; @@ -219,14 +220,7 @@ void CoreConnectDlg::on_accountButtonBox_accepted() { } 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); } diff --git a/src/qtui/coreconnectdlg.h b/src/qtui/coreconnectdlg.h index 3fb8b99e..aa3bae00 100644 --- a/src/qtui/coreconnectdlg.h +++ b/src/qtui/coreconnectdlg.h @@ -38,8 +38,8 @@ public: CoreConnectDlg(bool = false, QWidget *parent = 0); ~CoreConnectDlg(); -signals: - void newClientSyncer(ClientSyncer *); +// signals: +// void newClientSyncer(ClientSyncer *); private slots: /*** Phase Null: Accounts ***/ diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 431dacd7..4957c90c 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -41,6 +41,7 @@ #include "chatmonitorview.h" #include "chatview.h" #include "client.h" +#include "clientsyncer.h" #include "clientbacklogmanager.h" #include "coreinfodlg.h" #include "coreconnectdlg.h" @@ -175,7 +176,11 @@ void MainWin::init() { 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() { @@ -618,6 +623,13 @@ void MainWin::setDisconnectedState() { 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(); } diff --git a/src/qtui/mainwin.h b/src/qtui/mainwin.h index a20a8afc..bfac91de 100644 --- a/src/qtui/mainwin.h +++ b/src/qtui/mainwin.h @@ -96,6 +96,7 @@ class MainWin 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(); diff --git a/src/qtui/monoapplication.cpp b/src/qtui/monoapplication.cpp index a63ec558..6173526c 100644 --- a/src/qtui/monoapplication.cpp +++ b/src/qtui/monoapplication.cpp @@ -53,16 +53,15 @@ MonolithicApplication::~MonolithicApplication() { } 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(); - ClientSyncer *syncer = static_cast(sender()); connect(syncer, SIGNAL(connectToInternalCore(SignalProxy *)), core, SLOT(setupInternalClientSession(SignalProxy *))); connect(core, SIGNAL(sessionState(const QVariant &)), syncer, SLOT(internalSessionStateReceived(const QVariant &))); } diff --git a/src/qtui/monoapplication.h b/src/qtui/monoapplication.h index 9b49403a..15854a20 100644 --- a/src/qtui/monoapplication.h +++ b/src/qtui/monoapplication.h @@ -36,7 +36,7 @@ public: private slots: void newClientSyncer(ClientSyncer *syncer); - void startInternalCore(); + void startInternalCore(ClientSyncer *syncer); private: CoreApplicationInternal *_internal; -- 2.20.1