+void CoreSession::removeIdentity(IdentityId id) {
+ Identity *i = _identities.take(id);
+ if(i) {
+ emit identityRemoved(id);
+ CoreUserSettings s(user());
+ s.removeIdentity(id);
+ i->deleteLater();
+ }
+}
+
+/*** Network Handling ***/
+
+void CoreSession::createNetwork(const NetworkInfo &info_) {
+ NetworkInfo info = info_;
+ int id;
+
+ if(!info.networkId.isValid())
+ Core::createNetwork(user(), info);
+
+ if(!info.networkId.isValid()) {
+ qWarning() << qPrintable(tr("CoreSession::createNetwork(): Got invalid networkId from Core when trying to create network %1!").arg(info.networkName));
+ return;
+ }
+
+ id = info.networkId.toInt();
+ if(!_networks.contains(id)) {
+ CoreNetwork *net = new CoreNetwork(id, this);
+ connect(net, SIGNAL(connectRequested(NetworkId)), this, SLOT(connectToNetwork(NetworkId)));
+ connect(net, SIGNAL(disconnectRequested(NetworkId)), this, SLOT(disconnectFromNetwork(NetworkId)));
+ net->setNetworkInfo(info);
+ net->setProxy(signalProxy());
+ _networks[id] = net;
+ signalProxy()->synchronize(net);
+ emit networkCreated(id);
+ } else {
+ qWarning() << qPrintable(tr("CoreSession::createNetwork(): Trying to create a network that already exists, updating instead!"));
+ updateNetwork(info);
+ }
+}
+
+// FIXME: move to CoreNetwork
+void CoreSession::updateNetwork(const NetworkInfo &info) {
+ if(!_networks.contains(info.networkId)) {
+ qWarning() << "Update request for unknown network received!";
+ return;
+ }
+ _networks[info.networkId]->setNetworkInfo(info);
+ Core::updateNetwork(user(), info);
+}
+
+void CoreSession::removeNetwork(NetworkId id) {
+ // Make sure the network is disconnected!
+ NetworkConnection *conn = _connections.value(id, 0);
+ if(conn) {
+ if(conn->connectionState() != Network::Disconnected) {
+ connect(conn, SIGNAL(disconnected(NetworkId)), this, SLOT(destroyNetwork(NetworkId)));
+ conn->disconnectFromIrc();
+ } else {
+ _connections.take(id)->deleteLater(); // TODO make this saner
+ destroyNetwork(id);
+ }