Big, big, major commit this time:
[quassel.git] / main / main_gui.cpp
index 10bc53e..bf6ed14 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "quassel.h"
 #include "guiproxy.h"
+#include "util.h"
 
 #include "mainwin.h"
 
@@ -33,25 +34,68 @@ int main(int argc, char **argv) {
   QApplication::setApplicationName("Quassel IRC");
   QApplication::setOrganizationName("The Quassel Team");
 
-  Quassel::runMode = Quassel::GUIOnly;
-  quassel = new Quassel();
+  Global::runMode = Global::GUIOnly;
+  global = new Global();
   guiProxy = new GUIProxy();
 
   MainWin mainWin;
-  mainWin.show();
   int exitCode = app.exec();
   delete guiProxy;
-  delete quassel;
+  delete global;
 }
 
-void GUIProxy::send(GUISignal sig, QVariant arg1, QVariant arg2, QVariant arg3) {
+GUIProxy::GUIProxy() {
+  if(guiProxy) qFatal("Trying to instantiate more than one CoreProxy object!");
+
+  blockSize = 0;
+
+  connect(&socket, SIGNAL(readyRead()), this, SLOT(serverHasData()));
+  connect(&socket, SIGNAL(connected()), this, SIGNAL(coreConnected()));
+  connect(&socket, SIGNAL(disconnected()), this, SIGNAL(coreDisconnected()));
+  connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(serverError(QAbstractSocket::SocketError)));
 
+  connect(global, SIGNAL(dataPutLocally(QString)), this, SLOT(updateCoreData(QString)));
+  connect(this, SIGNAL(csUpdateGlobalData(QString, QVariant)), global, SLOT(updateData(QString, QVariant)));
+
+}
 
+void GUIProxy::connectToCore(QString host, quint16 port) {
+  socket.connectToHost(host, port);
+  //VarMap initmsg;
+  //initmsg["GUIProtocol"] = GUI_PROTOCOL;
+  //send(GS_CLIENT_INIT, QVariant(initmsg));
+}
 
+void GUIProxy::disconnectFromCore() {
+  socket.close();
 }
 
-void GUIProxy::recv(CoreSignal sig, QVariant arg1, QVariant arg2, QVariant arg3) {
+void GUIProxy::serverError(QAbstractSocket::SocketError) {
+  emit coreConnectionError(socket.errorString());
+}
 
+void GUIProxy::serverHasData() {
+  QVariant item;
+  while(readDataFromDevice(&socket, blockSize, item)) {
+    emit recvPartialItem(1,1);
+    QList<QVariant> sigdata = item.toList();
+    Q_ASSERT(sigdata.size() == 4);
+    recv((CoreSignal)sigdata[0].toInt(), sigdata[1], sigdata[2], sigdata[3]);
+    blockSize = 0;
+  }
+  if(blockSize > 0) {
+    emit recvPartialItem(socket.bytesAvailable(), blockSize);
+  }
+}
 
+void GUIProxy::send(GUISignal sig, QVariant arg1, QVariant arg2, QVariant arg3) {
+  QList<QVariant> sigdata;
+  sigdata.append(sig); sigdata.append(arg1); sigdata.append(arg2); sigdata.append(arg3);
+  //qDebug() << "Sending signal: " << sigdata;
+  writeDataToDevice(&socket, QVariant(sigdata));
+}
 
+void GUIProxy::updateCoreData(QString key) {
+  QVariant data = global->getData(key);
+  send(GS_UPDATE_GLOBAL_DATA, key, data);
 }