+ p->attachSlot(SIGNAL(requestConnect(QString)), this, SLOT(connectToNetwork(QString)));
+ p->attachSlot(SIGNAL(disconnectFromNetwork(NetworkId)), this, SLOT(disconnectFromNetwork(NetworkId))); // FIXME
+ p->attachSlot(SIGNAL(sendInput(BufferInfo, QString)), this, SLOT(msgFromClient(BufferInfo, QString)));
+ p->attachSlot(SIGNAL(requestBacklog(BufferInfo, QVariant, QVariant)), this, SLOT(sendBacklog(BufferInfo, QVariant, QVariant)));
+ p->attachSignal(this, SIGNAL(displayMsg(Message)));
+ p->attachSignal(this, SIGNAL(displayStatusMsg(QString, QString)));
+ p->attachSignal(this, SIGNAL(backlogData(BufferInfo, QVariantList, bool)));
+ 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, QDateTime> lastSeenHash = Core::bufferLastSeenDates(user());
+ //foreach(BufferId id, lastSeenHash.keys()) _bufferSyncer->requestSetLastSeen(id, lastSeenHash[id]);
+ // FIXME connect(_bufferSyncer, SIGNAL(lastSeenSet(BufferId, const QDateTime &)), this, SLOT(storeBufferLastSeen(BufferId, const QDateTime &)));
+ p->synchronize(_bufferSyncer);
+
+ // 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());
+