Use SyncableObject::requestUpdate() for updating Identities
[quassel.git] / src / core / coresession.cpp
index 73369a9..efdad6e 100644 (file)
@@ -56,7 +56,7 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent)
 
   SignalProxy *p = signalProxy();
   connect(p, SIGNAL(peerRemoved(QIODevice *)), this, SLOT(removeClient(QIODevice *)));
-  
+
   //p->attachSlot(SIGNAL(disconnectFromNetwork(NetworkId)), this, SLOT(disconnectFromNetwork(NetworkId))); // FIXME
   p->attachSlot(SIGNAL(sendInput(BufferInfo, QString)), this, SLOT(msgFromClient(BufferInfo, QString)));
   p->attachSignal(this, SIGNAL(displayMsg(Message)));
@@ -66,7 +66,6 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent)
   p->attachSignal(this, SIGNAL(identityCreated(const Identity &)));
   p->attachSignal(this, SIGNAL(identityRemoved(IdentityId)));
   p->attachSlot(SIGNAL(createIdentity(const Identity &)), this, SLOT(createIdentity(const Identity &)));
-  p->attachSlot(SIGNAL(updateIdentity(const Identity &)), this, SLOT(updateIdentity(const Identity &)));
   p->attachSlot(SIGNAL(removeIdentity(IdentityId)), this, SLOT(removeIdentity(IdentityId)));
 
   p->attachSignal(this, SIGNAL(networkCreated(NetworkId)));
@@ -82,7 +81,7 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent)
   QHash<BufferId, MsgId> lastSeenHash = Core::bufferLastSeenMsgIds(user());
   foreach(BufferId id, lastSeenHash.keys())
     _bufferSyncer->requestSetLastSeenMsg(id, lastSeenHash[id]);
-  
+
   connect(_bufferSyncer, SIGNAL(lastSeenMsgSet(BufferId, MsgId)), this, SLOT(storeBufferLastSeenMsg(BufferId, MsgId)));
   connect(_bufferSyncer, SIGNAL(removeBufferRequested(BufferId)), this, SLOT(removeBufferRequested(BufferId)));
   connect(this, SIGNAL(bufferRemoved(BufferId)), _bufferSyncer, SLOT(removeBuffer(BufferId)));
@@ -92,16 +91,16 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent)
 
   // init alias manager
   p->synchronize(&aliasManager());
-  
+
   // init BacklogManager
   p->synchronize(_backlogManager);
 
   // init IrcListHelper
   p->synchronize(ircListHelper());
-  
+
   // init CoreInfo
   p->synchronize(&_coreInfo);
-  
+
   // Restore session state
   if(restoreState) restoreSessionState();
 
@@ -153,6 +152,7 @@ void CoreSession::loadSettings() {
       delete i;
       continue;
     }
+    connect(i, SIGNAL(updated(const QVariantMap &)), this, SLOT(identityUpdated(const QVariantMap &)));
     _identities[i->id()] = i;
     signalProxy()->synchronize(i);
   }
@@ -222,7 +222,7 @@ void CoreSession::attachNetworkConnection(NetworkConnection *conn) {
 void CoreSession::disconnectFromNetwork(NetworkId id) {
   if(!_connections.contains(id))
     return;
-  
+
   //_connections[id]->disconnectFromIrc();
   _connections[id]->userInputHandler()->handleQuit(BufferInfo(), QString());
 }
@@ -382,20 +382,10 @@ void CoreSession::createIdentity(const Identity &id) {
   signalProxy()->synchronize(newId);
   CoreUserSettings s(user());
   s.storeIdentity(*newId);
+  connect(newId, SIGNAL(updated(const QVariantMap &)), this, SLOT(identityUpdated(const QVariantMap &)));
   emit identityCreated(*newId);
 }
 
-void CoreSession::updateIdentity(const Identity &id) {
-  if(!_identities.contains(id.id())) {
-    quWarning() << "Update request for unknown identity received!";
-    return;
-  }
-  _identities[id.id()]->update(id);
-
-  CoreUserSettings s(user());
-  s.storeIdentity(id);
-}
-
 void CoreSession::removeIdentity(IdentityId id) {
   Identity *i = _identities.take(id);
   if(i) {
@@ -406,6 +396,16 @@ void CoreSession::removeIdentity(IdentityId id) {
   }
 }
 
+void CoreSession::identityUpdated(const QVariantMap &data) {
+  IdentityId id = data.value("identityId", 0).value<IdentityId>();
+  if(!id.isValid() || !_identities.contains(id)) {
+    quWarning() << "Update request for unknown identity received!";
+    return;
+  }
+  CoreUserSettings s(user());
+  s.storeIdentity(*_identities.value(id));
+}
+
 /*** Network Handling ***/
 
 void CoreSession::createNetwork(const NetworkInfo &info_) {
@@ -484,12 +484,12 @@ void CoreSession::removeBufferRequested(BufferId bufferId) {
     quWarning() << "CoreSession::removeBufferRequested(): invalid BufferId:" << bufferId << "for User:" << user();
     return;
   }
-  
+
   if(bufferInfo.type() == BufferInfo::StatusBuffer) {
     quWarning() << "CoreSession::removeBufferRequested(): Status Buffers cannot be removed!";
     return;
   }
-  
+
   if(bufferInfo.type() == BufferInfo::ChannelBuffer) {
     CoreNetwork *net = network(bufferInfo.networkId());
     if(!net) {