+void CoreSession::saveSessionState() const {
+ QVariantMap res;
+ QVariantList conn;
+ foreach(NetworkConnection *net, _connections.values()) {
+ QVariantMap m;
+ m["NetworkId"] = QVariant::fromValue<NetworkId>(net->networkId());
+ m["State"] = net->state();
+ conn << m;
+ }
+ res["CoreBuild"] = Global::quasselBuild;
+ res["ConnectedNetworks"] = conn;
+ CoreUserSettings s(user());
+ s.setSessionState(res);
+}
+
+void CoreSession::restoreSessionState() {
+ CoreUserSettings s(user());
+ uint build = s.sessionState().toMap()["CoreBuild"].toUInt();
+ if(build < 362) {
+ qWarning() << qPrintable(tr("Session state does not exist or is too old!"));
+ return;
+ }
+ QVariantList conn = s.sessionState().toMap()["ConnectedNetworks"].toList();
+ foreach(QVariant v, conn) {
+ NetworkId id = v.toMap()["NetworkId"].value<NetworkId>();
+ if(_networks.keys().contains(id)) connectToNetwork(id, v.toMap()["State"]);
+ }
+}
+
+void CoreSession::updateBufferInfo(UserId uid, const BufferInfo &bufinfo) {
+ if(uid == user()) emit bufferInfoUpdated(bufinfo);
+}
+
+// FIXME remove
+void CoreSession::connectToNetwork(QString netname, const QVariant &previousState) {
+ Network *net = 0;
+ foreach(Network *n, _networks.values()) {
+ if(n->networkName() == netname) {
+ net = n; break;
+ }
+ }
+ if(!net) {
+ qWarning() << "Connect to unknown network requested, ignoring!";
+ return;
+ }
+ connectToNetwork(net->networkId(), previousState);
+}
+
+void CoreSession::connectToNetwork(NetworkId id, const QVariant &previousState) {
+ Network *net = network(id);
+ if(!net) {
+ qWarning() << "Connect to unknown network requested! net:" << id << "user:" << user();
+ return;
+ }
+
+ NetworkConnection *conn = networkConnection(id);
+ if(!conn) {
+ conn = new NetworkConnection(net, this, previousState);
+ _connections[id] = conn;
+ attachNetworkConnection(conn);
+ }
+ conn->connectToIrc();
+}
+
+void CoreSession::attachNetworkConnection(NetworkConnection *conn) {
+ connect(conn, SIGNAL(connected(NetworkId)), this, SLOT(networkConnected(NetworkId)));
+ connect(conn, SIGNAL(disconnected(NetworkId)), this, SLOT(networkDisconnected(NetworkId)));
+
+ // I guess we don't need these anymore, client-side can just connect the network's signals directly
+ //signalProxy()->attachSignal(conn, SIGNAL(connected(NetworkId)), SIGNAL(networkConnected(NetworkId)));
+ //signalProxy()->attachSignal(conn, SIGNAL(disconnected(NetworkId)), SIGNAL(networkDisconnected(NetworkId)));
+
+ connect(conn, SIGNAL(displayMsg(Message::Type, BufferInfo::Type, QString, QString, QString, quint8)),
+ this, SLOT(recvMessageFromServer(Message::Type, BufferInfo::Type, QString, QString, QString, quint8)));
+ connect(conn, SIGNAL(displayStatusMsg(QString)), this, SLOT(recvStatusMsgFromServer(QString)));
+
+}
+
+void CoreSession::disconnectFromNetwork(NetworkId id) {
+ if(!_connections.contains(id)) return;
+ _connections[id]->disconnectFromIrc();
+}
+
+void CoreSession::networkStateRequested() {
+}
+
+void CoreSession::addClient(QObject *dev) { // this is QObject* so we can use it in signal connections
+ QIODevice *device = qobject_cast<QIODevice *>(dev);
+ if(!device) {
+ qWarning() << "Invoking CoreSession::addClient with a QObject that is not a QIODevice!";
+ } else {
+ signalProxy()->addPeer(device);
+ QVariantMap reply;
+ reply["MsgType"] = "SessionInit";
+ reply["SessionState"] = sessionState();
+ SignalProxy::writeDataToDevice(device, reply);
+ }