+ //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)));
+ p->attachSignal(this, SIGNAL(displayStatusMsg(QString, QString)));
+ p->attachSignal(this, SIGNAL(bufferInfoUpdated(BufferInfo)));
+
+ 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)));
+ p->attachSignal(this, SIGNAL(networkRemoved(NetworkId)));
+ p->attachSlot(SIGNAL(createNetwork(const NetworkInfo &)), this, SLOT(createNetwork(const NetworkInfo &)));
+ p->attachSlot(SIGNAL(updateNetwork(const NetworkInfo &)), this, SLOT(updateNetwork(const NetworkInfo &)));
+ p->attachSlot(SIGNAL(removeNetwork(NetworkId)), this, SLOT(removeNetwork(NetworkId)));
+
+ loadSettings();
+ initScriptEngine();
+
+ // init BufferSyncer
+ 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)));
+ connect(this, SIGNAL(bufferRenamed(BufferId, QString)), _bufferSyncer, SLOT(renameBuffer(BufferId, QString)));
+ p->synchronize(_bufferSyncer);
+
+
+ // init BacklogManager;
+ p->synchronize(_backlogManager);
+
+ // Restore session state
+ if(restoreState) restoreSessionState();
+
+ emit initialized();
+}
+
+CoreSession::~CoreSession() {
+ saveSessionState();
+ foreach(NetworkConnection *conn, _connections.values()) {
+ delete conn;
+ }
+ foreach(Network *net, _networks.values()) {
+ delete net;
+ }
+}
+
+UserId CoreSession::user() const {
+ return _user;
+}
+
+Network *CoreSession::network(NetworkId id) const {
+ if(_networks.contains(id)) return _networks[id];
+ return 0;
+}
+
+NetworkConnection *CoreSession::networkConnection(NetworkId id) const {
+ if(_connections.contains(id)) return _connections[id];
+ return 0;
+}
+
+Identity *CoreSession::identity(IdentityId id) const {
+ if(_identities.contains(id)) return _identities[id];
+ return 0;
+}
+
+void CoreSession::loadSettings() {
+ CoreUserSettings s(user());
+