From 01922b87be01cd5c9844d2a273acd9a71aee8e96 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Mon, 20 Oct 2008 18:29:59 +0200 Subject: [PATCH] First working version of internal core connection. Disconnecting is not possible for now. Currently the clientsyncer needs to link against corelib - ouch. --- src/client/clientsyncer.cpp | 20 ++++++ src/client/clientsyncer.h | 5 ++ src/core/core.h | 3 + src/core/sessionthread.cpp | 2 + src/qtui/coreconnectdlg.cpp | 5 ++ src/qtui/coreconnectdlg.h | 115 +++++++++++++++++----------------- src/qtui/ui/coreconnectdlg.ui | 25 +++++--- 7 files changed, 109 insertions(+), 66 deletions(-) diff --git a/src/client/clientsyncer.cpp b/src/client/clientsyncer.cpp index 2b532705..a5a64d74 100644 --- a/src/client/clientsyncer.cpp +++ b/src/client/clientsyncer.cpp @@ -33,6 +33,10 @@ #include "quassel.h" #include "signalproxy.h" +//#ifdef BUILD_MONO +#include "core.h" +//#endif + ClientSyncer::ClientSyncer(QObject *parent) : QObject(parent) { @@ -40,6 +44,11 @@ ClientSyncer::ClientSyncer(QObject *parent) blockSize = 0; connect(Client::signalProxy(), SIGNAL(disconnected()), this, SLOT(coreSocketDisconnected())); + + //#ifdef BUILD_MONO + connect(this, SIGNAL(connectToInternalCore(SignalProxy *)), Core::instance(), SLOT(setupInternalClientSession(SignalProxy *))); + connect(Core::instance(), SIGNAL(sessionState(const QVariant &)), this, SLOT(internalSessionStateReceived(const QVariant &))); + //#endif } ClientSyncer::~ClientSyncer() { @@ -169,6 +178,10 @@ void ClientSyncer::coreSocketConnected() { SignalProxy::writeDataToDevice(socket, clientInit); } +void ClientSyncer::useInternalCore() { + emit connectToInternalCore(Client::instance()->signalProxy()); +} + void ClientSyncer::coreSocketDisconnected() { emit socketDisconnected(); Client::instance()->disconnectFromCore(); @@ -240,6 +253,13 @@ void ClientSyncer::loginToCore(const QString &user, const QString &passwd) { SignalProxy::writeDataToDevice(socket, clientLogin); } +void ClientSyncer::internalSessionStateReceived(const QVariant &packedState) { + QVariantMap state = packedState.toMap(); + emit sessionProgress(1, 1); + // Client::instance()->setConnectedToCore(socket, AccountId()); + syncToCore(state); +} + void ClientSyncer::sessionStateReceived(const QVariantMap &state) { emit sessionProgress(1, 1); disconnect(this, SIGNAL(recvPartialItem(quint32, quint32)), this, SIGNAL(sessionProgress(quint32, quint32))); diff --git a/src/client/clientsyncer.h b/src/client/clientsyncer.h index b77b234b..16c516d7 100644 --- a/src/client/clientsyncer.h +++ b/src/client/clientsyncer.h @@ -33,6 +33,7 @@ class IrcUser; class IrcChannel; +class SignalProxy; class ClientSyncer : public QObject { Q_OBJECT @@ -60,10 +61,13 @@ signals: void encrypted(bool); + void connectToInternalCore(SignalProxy *proxy); + public slots: void connectToCore(const QVariantMap &); void loginToCore(const QString &user, const QString &passwd); void disconnectFromCore(); + void useInternalCore(); private slots: void coreSocketError(QAbstractSocket::SocketError); @@ -78,6 +82,7 @@ private slots: void checkSyncState(); void syncToCore(const QVariantMap &sessionState); + void internalSessionStateReceived(const QVariant &packedState); void sessionStateReceived(const QVariantMap &state); void doCoreSetup(const QVariant &setupData); diff --git a/src/core/core.h b/src/core/core.h index 26a22db9..c38129a6 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -294,6 +294,9 @@ class Core : public QObject { //! Sent when a BufferInfo is updated in storage. void bufferInfoUpdated(UserId user, const BufferInfo &info); + //! Relay From CoreSession::sessionState(const QVariant &). Used for internal connection only + void sessionState(const QVariant &); + private slots: bool startListening(); void stopListening(); diff --git a/src/core/sessionthread.cpp b/src/core/sessionthread.cpp index cee4c8db..6a17bd9f 100644 --- a/src/core/sessionthread.cpp +++ b/src/core/sessionthread.cpp @@ -23,6 +23,7 @@ #include "sessionthread.h" #include "signalproxy.h" #include "coresession.h" +#include "core.h" SessionThread::SessionThread(UserId uid, bool restoreState, QObject *parent) : QThread(parent), @@ -98,6 +99,7 @@ void SessionThread::run() { _session = new CoreSession(user(), _restoreState); connect(this, SIGNAL(addRemoteClient(QIODevice *)), _session, SLOT(addClient(QIODevice *))); connect(this, SIGNAL(addInternalClient(SignalProxy *)), _session, SLOT(addClient(SignalProxy *))); + connect(_session, SIGNAL(sessionState(const QVariant &)), Core::instance(), SIGNAL(sessionState(const QVariant &))); emit initialized(); exec(); delete _session; diff --git a/src/qtui/coreconnectdlg.cpp b/src/qtui/coreconnectdlg.cpp index 3f6d1208..a7e39396 100644 --- a/src/qtui/coreconnectdlg.cpp +++ b/src/qtui/coreconnectdlg.cpp @@ -211,6 +211,11 @@ void CoreConnectDlg::on_accountButtonBox_accepted() { connectToCore(); } +void CoreConnectDlg::on_useInternalCore_clicked() { + clientSyncer->useInternalCore(); + startSync(); +} + /***************************************************** * Connecting to the Core ****************************************************/ diff --git a/src/qtui/coreconnectdlg.h b/src/qtui/coreconnectdlg.h index 99e33790..ff980d32 100644 --- a/src/qtui/coreconnectdlg.h +++ b/src/qtui/coreconnectdlg.h @@ -34,90 +34,91 @@ class CoreConfigWizard; class CoreConnectDlg : public QDialog { Q_OBJECT - public: - CoreConnectDlg(bool = false, QWidget *parent = 0); - ~CoreConnectDlg(); +public: + CoreConnectDlg(bool = false, QWidget *parent = 0); + ~CoreConnectDlg(); - private slots: +private slots: - /*** Phase Null: Accounts ***/ - void restartPhaseNull(); + /*** Phase Null: Accounts ***/ + void restartPhaseNull(); - void on_accountList_itemSelectionChanged(); - void on_autoConnect_clicked(bool); + void on_accountList_itemSelectionChanged(); + void on_autoConnect_clicked(bool); - void on_addAccount_clicked(); - void on_editAccount_clicked(); - void on_deleteAccount_clicked(); + void on_addAccount_clicked(); + void on_editAccount_clicked(); + void on_deleteAccount_clicked(); + void on_useInternalCore_clicked(); - void on_accountList_itemDoubleClicked(QListWidgetItem *item); - void on_accountButtonBox_accepted(); + void on_accountList_itemDoubleClicked(QListWidgetItem *item); + void on_accountButtonBox_accepted(); - void setAccountWidgetStates(); + void setAccountWidgetStates(); - /*** Phase One: Connection ***/ - void connectToCore(); + /*** Phase One: Connection ***/ + void connectToCore(); - void initPhaseError(const QString &error); - void initPhaseMsg(const QString &msg); - void initPhaseSocketState(QAbstractSocket::SocketState); - void encrypted(bool); + void initPhaseError(const QString &error); + void initPhaseMsg(const QString &msg); + void initPhaseSocketState(QAbstractSocket::SocketState); + void encrypted(bool); - /*** Phase Two: Login ***/ - void startLogin(); - void doLogin(); - void doLogin(const QVariantMap &loginData); - void loginFailed(const QString &); - void startCoreConfig(const QVariantList &backends); - void configWizardAccepted(); - void configWizardRejected(); - void on_launchCoreConfigWizard_clicked(); + /*** Phase Two: Login ***/ + void startLogin(); + void doLogin(); + void doLogin(const QVariantMap &loginData); + void loginFailed(const QString &); + void startCoreConfig(const QVariantList &backends); + void configWizardAccepted(); + void configWizardRejected(); + void on_launchCoreConfigWizard_clicked(); - void setLoginWidgetStates(); + void setLoginWidgetStates(); - /*** Phase Three: Sync ***/ - void startSync(); - void syncFinished(); + /*** Phase Three: Sync ***/ + void startSync(); + void syncFinished(); - void coreSessionProgress(quint32, quint32); - void coreNetworksProgress(quint32, quint32); + void coreSessionProgress(quint32, quint32); + void coreNetworksProgress(quint32, quint32); - private: - Ui::CoreConnectDlg ui; +private: + Ui::CoreConnectDlg ui; - AccountId autoConnectAccount; - QHash accounts; - QVariantMap accountData; - AccountId account; + AccountId autoConnectAccount; + QHash accounts; + QVariantMap accountData; + AccountId account; - bool doingAutoConnect; + bool doingAutoConnect; - QVariantList storageBackends; + QVariantList storageBackends; - ClientSyncer *clientSyncer; - CoreConfigWizard *wizard; + ClientSyncer *clientSyncer; + CoreConfigWizard *wizard; }; class CoreAccountEditDlg : public QDialog { Q_OBJECT - public: - CoreAccountEditDlg(AccountId id, const QVariantMap &data, const QStringList &existing = QStringList(), QWidget *parent = 0); +public: + CoreAccountEditDlg(AccountId id, const QVariantMap &data, const QStringList &existing = QStringList(), QWidget *parent = 0); - QVariantMap accountData(); + QVariantMap accountData(); - private slots: - void on_host_textChanged(const QString &); - void on_accountName_textChanged(const QString &); - void on_useRemote_toggled(bool); +private slots: + void on_host_textChanged(const QString &); + void on_accountName_textChanged(const QString &); + void on_useRemote_toggled(bool); - void setWidgetStates(); + void setWidgetStates(); - private: - Ui::CoreAccountEditDlg ui; +private: + Ui::CoreAccountEditDlg ui; - QStringList existing; - QVariantMap account; + QStringList existing; + QVariantMap account; }; #endif diff --git a/src/qtui/ui/coreconnectdlg.ui b/src/qtui/ui/coreconnectdlg.ui index 9b628843..574609ec 100644 --- a/src/qtui/ui/coreconnectdlg.ui +++ b/src/qtui/ui/coreconnectdlg.ui @@ -19,7 +19,7 @@ Connect to Quassel Core - + :/16x16/actions/network-disconnect:/16x16/actions/network-disconnect @@ -32,7 +32,7 @@ - 2 + 0 @@ -40,7 +40,7 @@ 0 0 539 - 331 + 332 @@ -65,7 +65,7 @@ Edit... - + :/16x16/actions/oxygen/16x16/actions/document-properties.png:/16x16/actions/oxygen/16x16/actions/document-properties.png @@ -76,7 +76,7 @@ Add... - + :/16x16/actions/oxygen/16x16/actions/list-add.png:/16x16/actions/oxygen/16x16/actions/list-add.png @@ -87,7 +87,7 @@ Delete - + :/16x16/actions/oxygen/16x16/actions/list-remove.png:/16x16/actions/oxygen/16x16/actions/list-remove.png @@ -105,6 +105,13 @@ + + + + use internal core + + + @@ -169,7 +176,7 @@ - :/22x22/actions/network-disconnect + :/22x22/actions/network-disconnect @@ -227,7 +234,7 @@ space - :/22x22/actions/oxygen/22x22/actions/document-encrypt.png + :/22x22/actions/oxygen/22x22/actions/document-encrypt.png @@ -250,7 +257,7 @@ space 0 0 501 - 145 + 146 -- 2.20.1