starting the internal core on demand
authorMarcus Eggenberger <egs@quassel-irc.org>
Mon, 20 Oct 2008 22:09:08 +0000 (00:09 +0200)
committerMarcus Eggenberger <egs@quassel-irc.org>
Tue, 21 Oct 2008 16:52:52 +0000 (18:52 +0200)
client no longer depends on core... *sigh*

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

index a5a64d7..655875f 100644 (file)
 #include "quassel.h"
 #include "signalproxy.h"
 
-//#ifdef BUILD_MONO
-#include "core.h"
-//#endif
-
 ClientSyncer::ClientSyncer(QObject *parent)
   : QObject(parent)
 {
@@ -44,11 +40,6 @@ 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() {
index a7e3939..6903d93 100644 (file)
@@ -28,6 +28,7 @@
 #include "clientsyncer.h"
 #include "coreconfigwizard.h"
 #include "iconloader.h"
+#include "monoapplication.h"
 
 CoreConnectDlg::CoreConnectDlg(bool autoconnect, QWidget *parent)
   : QDialog(parent)
@@ -43,6 +44,7 @@ CoreConnectDlg::CoreConnectDlg(bool autoconnect, QWidget *parent)
   setWindowFlags(Qt::Sheet);
 
   clientSyncer = new ClientSyncer(this);
+
   wizard = 0;
 
   doingAutoConnect = false;
@@ -212,6 +214,13 @@ void CoreConnectDlg::on_accountButtonBox_accepted() {
 }
 
 void CoreConnectDlg::on_useInternalCore_clicked() {
+  // FIXME: this needs to be a qobject_cast - therefore MonolithicApplication needs to be a proper QObject... :/
+  MonolithicApplication *monoApp = static_cast<MonolithicApplication *>(QApplication::instance());
+  if(monoApp) {
+    qDebug() << "starting core...";
+    monoApp->startInternalCore();
+    monoApp->connectClientSyncer(clientSyncer);
+  }
   clientSyncer->useInternalCore();
   startSync();
 }
index aebe619..97688f2 100644 (file)
 #include "monoapplication.h"
 #include "coreapplication.h"
 #include "client.h"
+#include "clientsyncer.h"
+#include "core.h"
 #include "qtui.h"
 
-MonolithicApplication::MonolithicApplication(int &argc, char **argv) : QtUiApplication(argc, argv) {
+MonolithicApplication::MonolithicApplication(int &argc, char **argv)
+  : QtUiApplication(argc, argv)
+{
+  _internal = new CoreApplicationInternal(); // needed for parser options
   setRunMode(Monolithic);
-  _internal = new CoreApplicationInternal();
-
 }
 
 bool MonolithicApplication::init() {
-  if(Quassel::init() && _internal->init()) {
+  if(Quassel::init()) {
     return QtUiApplication::init();
   }
   return false;
@@ -39,6 +42,15 @@ bool MonolithicApplication::init() {
 MonolithicApplication::~MonolithicApplication() {
   // Client needs to be destroyed first
   Client::destroy();
-
   delete _internal;
 }
+
+bool MonolithicApplication::startInternalCore() {
+  return _internal->init();
+}
+
+void MonolithicApplication::connectClientSyncer(ClientSyncer *syncer) {
+  Core *core = Core::instance();
+  connect(syncer, SIGNAL(connectToInternalCore(SignalProxy *)), core, SLOT(setupInternalClientSession(SignalProxy *)));
+  connect(core, SIGNAL(sessionState(const QVariant &)), syncer, SLOT(internalSessionStateReceived(const QVariant &)));
+}
index 59d3747..4050342 100644 (file)
 
 #include "qtuiapplication.h"
 
+class ClientSyncer;
 class CoreApplicationInternal;
 
 class MonolithicApplication : public QtUiApplication {
+public:
+  MonolithicApplication(int &, char **);
+  ~MonolithicApplication();
 
-  public:
-    MonolithicApplication(int &, char **);
-    ~MonolithicApplication();
+  bool init();
+  bool startInternalCore();
+  void connectClientSyncer(ClientSyncer *syncer);
 
-    bool init();
-
-  private:
-    CoreApplicationInternal *_internal;
+private:
+  CoreApplicationInternal *_internal;
 };
 
 #endif