X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcoresession.cpp;h=8e667380e3633d5bf65962ecde9b359e47adc3fb;hb=9d12f8189a0dfd8ac76e41aea86ac56bdf907fde;hp=2677559f47fc742e3664875c0c17fe3b010bbcf0;hpb=28e33cd3255a838a045303bed073f4f9c40a3af4;p=quassel.git diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 2677559f..8e667380 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -76,10 +76,10 @@ CoreSession::CoreSession(UserId uid, bool restoreState, QObject *parent) : QObje CoreSession::~CoreSession() { saveSessionState(); foreach(NetworkConnection *conn, _connections.values()) { - conn->deleteLater(); + delete conn; } foreach(Network *net, _networks.values()) { - net->deleteLater(); + delete net; } } @@ -128,9 +128,10 @@ void CoreSession::loadSettings() { createIdentity(i); } + // FIXME switch to a pure DB storage foreach(NetworkId id, s.networkIds()) { NetworkInfo info = s.networkInfo(id); - createNetwork(info, true); + createNetwork(info); } // FIXME Migrate old settings if available... @@ -155,7 +156,7 @@ void CoreSession::loadSettings() { slist << server; } info.serverList = slist; - createNetwork(info, true); + createNetwork(info); } } } @@ -265,7 +266,7 @@ SignalProxy *CoreSession::signalProxy() const { // FIXME we need a sane way for creating buffers! void CoreSession::networkConnected(NetworkId networkid) { - Core::bufferInfo(user(), networkConnection(networkid)->networkName()); // create status buffer + Core::bufferInfo(user(), networkid); // create status buffer } void CoreSession::networkDisconnected(NetworkId networkid) { @@ -280,7 +281,7 @@ void CoreSession::networkDisconnected(NetworkId networkid) { void CoreSession::msgFromClient(BufferInfo bufinfo, QString msg) { NetworkConnection *conn = networkConnection(bufinfo.networkId()); if(conn) { - conn->userInput(bufinfo.buffer(), msg); + conn->userInput(bufinfo.bufferName(), msg); } else { qWarning() << "Trying to send to unconnected network!"; } @@ -289,15 +290,11 @@ void CoreSession::msgFromClient(BufferInfo bufinfo, QString msg) { // ALL messages coming pass through these functions before going to the GUI. // So this is the perfect place for storing the backlog and log stuff. void CoreSession::recvMessageFromServer(Message::Type type, QString target, QString text, QString sender, quint8 flags) { - NetworkConnection *s = qobject_cast(this->sender()); - Q_ASSERT(s); - BufferInfo buf; - if((flags & Message::PrivMsg) && !(flags & Message::Self)) { - buf = Core::bufferInfo(user(), s->networkName(), nickFromMask(sender)); - } else { - buf = Core::bufferInfo(user(), s->networkName(), target); - } - Message msg(buf, type, text, sender, flags); + NetworkConnection *netCon = qobject_cast(this->sender()); + Q_ASSERT(netCon); + + BufferInfo bufferInfo = Core::bufferInfo(user(), netCon->networkId(), target); + Message msg(bufferInfo, type, text, sender, flags); msg.setMsgId(Core::storeMessage(msg)); Q_ASSERT(msg.msgId() != 0); emit displayMsg(msg); @@ -417,17 +414,18 @@ void CoreSession::removeIdentity(IdentityId id) { /*** Network Handling ***/ -void CoreSession::createNetwork(const NetworkInfo &_info, bool useId) { - NetworkInfo info = _info; +void CoreSession::createNetwork(const NetworkInfo &info_) { + NetworkInfo info = info_; int id; - if(useId && info.networkId > 0) id = info.networkId.toInt(); - else { - for(id = 1; id <= _networks.count(); id++) { - if(!_networks.keys().contains(id)) break; - } - //qDebug() << "found free id" << i; - info.networkId = id; - } + + if(!info.networkId.isValid()) + Core::createNetworkId(user(), info); + + Q_ASSERT(info.networkId.isValid()); + + id = info.networkId.toInt(); + Q_ASSERT(!_networks.contains(id)); + Network *net = new Network(id, this); connect(net, SIGNAL(connectRequested(NetworkId)), this, SLOT(connectToNetwork(NetworkId))); connect(net, SIGNAL(disconnectRequested(NetworkId)), this, SLOT(disconnectFromNetwork(NetworkId)));