Make selections in bufferviews (mostly) synchronous again.
[quassel.git] / core / core.cpp
index b1815d9..a3dcd26 100644 (file)
@@ -56,8 +56,11 @@ void Core::init() {
   connect(&server, SIGNAL(newConnection()), this, SLOT(incomingConnection()));
   //startListening(); // FIXME
   if(Global::runMode == Global::Monolithic) {  // TODO Make GUI user configurable
-    guiUser = storage->validateUser("Default", "password");
-    if(!guiUser) guiUser = storage->addUser("Default", "password");
+    try {
+      guiUser = storage->validateUser("Default", "password");
+    } catch(Storage::AuthError) {
+      guiUser = storage->addUser("Default", "password");
+    }
     Q_ASSERT(guiUser);
     Global::setGuiUser(guiUser);
     createSession(guiUser);
@@ -91,7 +94,7 @@ CoreSession *Core::session(UserId uid) {
   else return 0;
 }
 
-CoreSession *Core::guiSession() {
+CoreSession *Core::localSession() {
   Core *core = instance();
   if(core->guiUser && core->sessions.contains(core->guiUser)) return core->sessions[core->guiUser];
   else return 0;
@@ -138,10 +141,10 @@ void Core::clientHasData() {
   while(readDataFromDevice(socket, bsize, item)) {
     if(validClients.contains(socket)) {
       QList<QVariant> sigdata = item.toList();
-      if((GUISignal)sigdata[0].toInt() == GS_UPDATE_GLOBAL_DATA) {
+      if((ClientSignal)sigdata[0].toInt() == GS_UPDATE_GLOBAL_DATA) {
         processClientUpdate(socket, sigdata[1].toString(), sigdata[2]);
       } else {
-        sessions[validClients[socket]]->processSignal((GUISignal)sigdata[0].toInt(), sigdata[1], sigdata[2], sigdata[3]);
+        sessions[validClients[socket]]->processSignal((ClientSignal)sigdata[0].toInt(), sigdata[1], sigdata[2], sigdata[3]);
       }
     } else {
       // we need to auth the client
@@ -253,8 +256,8 @@ void Core::recvProxySignal(CoreSignal sig, QVariant arg1, QVariant arg2, QVarian
 
 CoreSession::CoreSession(UserId uid, Storage *_storage) : user(uid), storage(_storage) {
   coreProxy = new CoreProxy();
-  connect(coreProxy, SIGNAL(send(CoreSignal, QVariant, QVariant, QVariant)), this, SIGNAL(proxySignal(CoreSignal, QVariant, QVariant, QVariant)));
 
+  connect(coreProxy, SIGNAL(send(CoreSignal, QVariant, QVariant, QVariant)), this, SIGNAL(proxySignal(CoreSignal, QVariant, QVariant, QVariant)));
   connect(coreProxy, SIGNAL(requestServerStates()), this, SIGNAL(serverStateRequested()));
   connect(coreProxy, SIGNAL(gsRequestConnect(QStringList)), this, SLOT(connectToIrc(QStringList)));
   connect(coreProxy, SIGNAL(gsUserInput(BufferId, QString)), this, SLOT(msgFromGui(BufferId, QString)));
@@ -267,7 +270,6 @@ CoreSession::CoreSession(UserId uid, Storage *_storage) : user(uid), storage(_st
   connect(storage, SIGNAL(bufferIdUpdated(BufferId)), coreProxy, SLOT(csUpdateBufferId(BufferId)));
   connect(Global::instance(), SIGNAL(dataUpdatedRemotely(UserId, QString)), this, SLOT(globalDataUpdated(UserId, QString)));
   connect(Global::instance(), SIGNAL(dataPutLocally(UserId, QString)), this, SLOT(globalDataUpdated(UserId, QString)));
-
 }
 
 CoreSession::~CoreSession() {
@@ -278,7 +280,7 @@ UserId CoreSession::userId() {
   return user;
 }
 
-void CoreSession::processSignal(GUISignal sig, QVariant arg1, QVariant arg2, QVariant arg3) {
+void CoreSession::processSignal(ClientSignal sig, QVariant arg1, QVariant arg2, QVariant arg3) {
   coreProxy->recv(sig, arg1, arg2, arg3);
 }
 
@@ -299,6 +301,10 @@ void CoreSession::connectToIrc(QStringList networks) {
       connect(this, SIGNAL(connectToIrc(QString)), server, SLOT(connectToIrc(QString)));
       connect(this, SIGNAL(disconnectFromIrc(QString)), server, SLOT(disconnectFromIrc(QString)));
       connect(this, SIGNAL(msgFromGui(QString, QString, QString)), server, SLOT(userInput(QString, QString, QString)));
+
+      connect(server, SIGNAL(connected(QString)), this, SLOT(serverConnected(QString)));
+      connect(server, SIGNAL(disconnected(QString)), this, SLOT(serverDisconnected(QString)));
+
       connect(server, SIGNAL(serverState(QString, VarMap)), coreProxy, SLOT(csServerState(QString, VarMap)));
       //connect(server, SIGNAL(displayMsg(Message)), this, SLOT(recvMessageFromServer(Message)));
       connect(server, SIGNAL(displayMsg(Message::Type, QString, QString, QString, quint8)), this, SLOT(recvMessageFromServer(Message::Type, QString, QString, QString, quint8)));
@@ -313,7 +319,7 @@ void CoreSession::connectToIrc(QStringList networks) {
       connect(server, SIGNAL(queryRequested(QString, QString)), coreProxy, SLOT(csQueryRequested(QString, QString)));
       // TODO add error handling
       connect(server, SIGNAL(connected(QString)), coreProxy, SLOT(csServerConnected(QString)));
-      connect(server, SIGNAL(disconnected(QString)), this, SLOT(serverDisconnected(QString)));
+      connect(server, SIGNAL(disconnected(QString)), coreProxy, SLOT(csServerDisconnected(QString)));
 
       server->start();
       servers[net] = server;
@@ -322,6 +328,10 @@ void CoreSession::connectToIrc(QStringList networks) {
   }
 }
 
+void CoreSession::serverConnected(QString net) {
+  storage->getBufferId(userId(), net); // create status buffer
+}
+
 void CoreSession::serverDisconnected(QString net) {
   delete servers[net];
   servers.remove(net);