X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcoresession.cpp;h=2b484b39b5284854a37be6938ff2be01e50e4f88;hp=874de76d22a6ffa899bf15382f8f2669a3759c34;hb=f9fc50a5e043668a2525a6c0903ea339d4ba05b7;hpb=cf28e7152c5d940aec586be1b29fbf8ddc99f087 diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 874de76d..2b484b39 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-07 by the Quassel IRC Team * + * Copyright (C) 2005-08 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -19,18 +19,18 @@ ***************************************************************************/ #include "coresession.h" -#include "server.h" +#include "networkconnection.h" #include "signalproxy.h" #include "storage.h" -#include "networkinfo.h" +#include "network.h" #include "ircuser.h" #include "ircchannel.h" #include "identity.h" #include "util.h" -#include "sessionsettings.h" +#include "coreusersettings.h" #include @@ -44,44 +44,32 @@ CoreSession::CoreSession(UserId uid, Storage *_storage, QObject *parent) SignalProxy *p = signalProxy(); - SessionSettings s(user); - sessionData = s.sessionData(); qDebug() << sessionData; - /* - QSettings s; // FIXME don't use QSettings anymore - mutex.lock(); - s.beginGroup(QString("SessionData/%1").arg(user)); - foreach(QString key, s.allKeys()) { qDebug() << key; - sessionData[key] = s.value(key); - } - s.endGroup(); - mutex.unlock(); // FIXME remove - */ - /* temporarily disabled - s.beginGroup(QString("Identities/%1").arg(user)); - foreach(QString id, s.childKeys()) { - Identity *i = new Identity(s.value(id).value(), this); - if(i->id() < 1) { - qDebug() << QString("Invalid identity!"); + CoreUserSettings s(user); + sessionData = s.sessionData(); + + foreach(IdentityId id, s.identityIds()) { + Identity *i = new Identity(s.identity(id), this); + if(!i->isValid()) { + qWarning() << QString("Invalid identity! Removing..."); + s.removeIdentity(id); + delete i; continue; } if(_identities.contains(i->id())) { - qDebug() << "Duplicate identity, ignoring!"; + qWarning() << "Duplicate identity, ignoring!"; + delete i; continue; } - qDebug() << "loaded identity" << id; _identities[i->id()] = i; } - s.endGroup(); - mutex.unlock(); if(!_identities.count()) { Identity i(1); i.setToDefaults(); - //_identities[i->id()] = i; - createOrUpdateIdentity(i); + i.setIdentityName(tr("Default Identity")); + createIdentity(i); } - */ - p->attachSlot(SIGNAL(requestNetworkStates()), this, SLOT(serverStateRequested())); + p->attachSlot(SIGNAL(requestNetworkStates()), this, SLOT(networkStateRequested())); p->attachSlot(SIGNAL(requestConnect(QString)), this, SLOT(connectToNetwork(QString))); p->attachSlot(SIGNAL(sendInput(BufferInfo, QString)), this, SLOT(msgFromGui(BufferInfo, QString))); p->attachSlot(SIGNAL(requestBacklog(BufferInfo, QVariant, QVariant)), this, SLOT(sendBacklog(BufferInfo, QVariant, QVariant))); @@ -95,8 +83,8 @@ CoreSession::CoreSession(UserId uid, Storage *_storage, QObject *parent) p->attachSignal(this, SIGNAL(identityCreated(const Identity &))); p->attachSignal(this, SIGNAL(identityRemoved(IdentityId))); - p->attachSlot(SIGNAL(createIdentity(const Identity &)), this, SLOT(createOrUpdateIdentity(const Identity &))); - p->attachSlot(SIGNAL(updateIdentity(const Identity &)), this, SLOT(createOrUpdateIdentity(const Identity &))); + 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))); initScriptEngine(); @@ -116,11 +104,11 @@ UserId CoreSession::userId() const { QVariant CoreSession::state() const { QVariantMap res; QList conn; - foreach(Server *server, servers.values()) { - if(server->isConnected()) { + foreach(NetworkConnection *net, connections.values()) { + if(net->isConnected()) { QVariantMap m; - m["Network"] = server->networkName(); - m["State"] = server->state(); + m["Network"] = net->networkName(); + m["State"] = net->state(); conn << m; } } @@ -142,7 +130,7 @@ void CoreSession::restoreState(const QVariant &previousState) { void CoreSession::storeSessionData(const QString &key, const QVariant &data) { - SessionSettings s(user); + CoreUserSettings s(user); mutex.lock(); s.setSessionValue(key, data); sessionData[key] = data; @@ -161,39 +149,39 @@ QVariant CoreSession::retrieveSessionData(const QString &key, const QVariant &de } // FIXME switch to NetworkIDs -void CoreSession::connectToNetwork(QString network, const QVariant &previousState) { - uint networkid = getNetworkId(network); +void CoreSession::connectToNetwork(QString networkname, const QVariant &previousState) { + uint networkid = getNetworkId(networkname); if(networkid == 0) { - qWarning() << "unable to connect to Network" << network << "(User:" << userId() << "): unable to determine NetworkId"; + qWarning() << "unable to connect to Network" << networkname << "(User:" << userId() << "): unable to determine NetworkId"; return; } - if(!servers.contains(networkid)) { - Server *server = new Server(userId(), networkid, network, previousState); - servers[networkid] = server; - attachServer(server); - server->start(); + if(!connections.contains(networkid)) { + NetworkConnection *connection = new NetworkConnection(userId(), networkid, networkname, previousState); + connections[networkid] = connection; + attachNetworkConnection(connection); + connection->start(); } - emit connectToIrc(network); + emit connectToIrc(networkname); } -void CoreSession::attachServer(Server *server) { - connect(this, SIGNAL(connectToIrc(QString)), server, SLOT(connectToIrc(QString))); - connect(this, SIGNAL(disconnectFromIrc(QString)), server, SLOT(disconnectFromIrc(QString))); - connect(this, SIGNAL(msgFromGui(uint, QString, QString)), server, SLOT(userInput(uint, QString, QString))); +void CoreSession::attachNetworkConnection(NetworkConnection *network) { + connect(this, SIGNAL(connectToIrc(QString)), network, SLOT(connectToIrc(QString))); + connect(this, SIGNAL(disconnectFromIrc(QString)), network, SLOT(disconnectFromIrc(QString))); + connect(this, SIGNAL(msgFromGui(uint, QString, QString)), network, SLOT(userInput(uint, QString, QString))); - connect(server, SIGNAL(connected(uint)), this, SLOT(serverConnected(uint))); - connect(server, SIGNAL(disconnected(uint)), this, SLOT(serverDisconnected(uint))); - connect(server, SIGNAL(displayMsg(Message::Type, QString, QString, QString, quint8)), this, SLOT(recvMessageFromServer(Message::Type, QString, QString, QString, quint8))); - connect(server, SIGNAL(displayStatusMsg(QString)), this, SLOT(recvStatusMsgFromServer(QString))); + connect(network, SIGNAL(connected(uint)), this, SLOT(networkConnected(uint))); + connect(network, SIGNAL(disconnected(uint)), this, SLOT(networkDisconnected(uint))); + connect(network, SIGNAL(displayMsg(Message::Type, QString, QString, QString, quint8)), this, SLOT(recvMessageFromServer(Message::Type, QString, QString, QString, quint8))); + connect(network, SIGNAL(displayStatusMsg(QString)), this, SLOT(recvStatusMsgFromServer(QString))); // connect serversignals to proxy - signalProxy()->attachSignal(server, SIGNAL(serverState(QString, QVariantMap)), SIGNAL(networkState(QString, QVariantMap))); - signalProxy()->attachSignal(server, SIGNAL(connected(uint)), SIGNAL(networkConnected(uint))); - signalProxy()->attachSignal(server, SIGNAL(disconnected(uint)), SIGNAL(networkDisconnected(uint))); + signalProxy()->attachSignal(network, SIGNAL(networkState(QString, QVariantMap)), SIGNAL(networkState(QString, QVariantMap))); + signalProxy()->attachSignal(network, SIGNAL(connected(uint)), SIGNAL(networkConnected(uint))); + signalProxy()->attachSignal(network, SIGNAL(disconnected(uint)), SIGNAL(networkDisconnected(uint))); // TODO add error handling } -void CoreSession::serverStateRequested() { +void CoreSession::networkStateRequested() { } void CoreSession::addClient(QIODevice *device) { @@ -204,14 +192,14 @@ SignalProxy *CoreSession::signalProxy() const { return _signalProxy; } -void CoreSession::serverConnected(uint networkid) { - storage->getBufferInfo(userId(), servers[networkid]->networkName()); // create status buffer +void CoreSession::networkConnected(uint networkid) { + storage->getBufferInfo(userId(), connections[networkid]->networkName()); // create status buffer } -void CoreSession::serverDisconnected(uint networkid) { - Q_ASSERT(servers.contains(networkid)); - servers.take(networkid)->deleteLater(); - Q_ASSERT(!servers.contains(networkid)); +void CoreSession::networkDisconnected(uint networkid) { + Q_ASSERT(connections.contains(networkid)); + connections.take(networkid)->deleteLater(); + Q_ASSERT(!connections.contains(networkid)); } void CoreSession::msgFromGui(BufferInfo bufid, QString msg) { @@ -221,7 +209,7 @@ void CoreSession::msgFromGui(BufferInfo bufid, 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) { - Server *s = qobject_cast(this->sender()); + NetworkConnection *s = qobject_cast(this->sender()); Q_ASSERT(s); BufferInfo buf; if((flags & Message::PrivMsg) && !(flags & Message::Self)) { @@ -236,7 +224,7 @@ void CoreSession::recvMessageFromServer(Message::Type type, QString target, QStr } void CoreSession::recvStatusMsgFromServer(QString msg) { - Server *s = qobject_cast(sender()); + NetworkConnection *s = qobject_cast(sender()); Q_ASSERT(s); emit displayStatusMsg(s->networkName(), msg); } @@ -264,7 +252,7 @@ QVariant CoreSession::sessionState() { mutex.unlock(); QVariantList networks; - foreach(NetworkId networkid, servers.keys()) + foreach(NetworkId networkid, connections.keys()) networks.append(QVariant(networkid)); v["Networks"] = QVariant(networks); @@ -309,28 +297,40 @@ void CoreSession::initScriptEngine() { void CoreSession::scriptRequest(QString script) { emit scriptResult(scriptEngine->evaluate(script).toString()); } +#include +void CoreSession::createIdentity(const Identity &id) { + // find free ID + int i; + for(i = 1; i <= _identities.count(); i++) { + if(!_identities.keys().contains(i)) break; + } + //qDebug() << "found free id" << i; + Identity *newId = new Identity(id, this); + newId->setId(i); + _identities[i] = newId; + signalProxy()->synchronize(newId); + CoreUserSettings s(user); + s.storeIdentity(*newId); + emit identityCreated(*newId); +} -void CoreSession::createOrUpdateIdentity(const Identity &id) { +void CoreSession::updateIdentity(const Identity &id) { if(!_identities.contains(id.id())) { - // create new - _identities[id.id()] = new Identity(id, this); - signalProxy()->synchronize(_identities[id.id()]); - emit identityCreated(id.id()); - } else { - // update - _identities[id.id()]->update(id); + qWarning() << "Update request for unknown identity received!"; + return; } - Q_ASSERT(false); // FIX QSettings first! - QSettings s; // FIXME don't use QSettings - s.beginGroup(QString("Identities/%1").arg(user)); - s.setValue(QString::number(id.id()), QVariant::fromValue(*_identities[id.id()])); - s.endGroup(); + _identities[id.id()]->update(id); + + CoreUserSettings s(user); + s.storeIdentity(id); } void CoreSession::removeIdentity(IdentityId id) { Identity *i = _identities.take(id); if(i) { emit identityRemoved(id); + CoreUserSettings s(user); + s.removeIdentity(id); i->deleteLater(); } }