#include "core.h"
#include "coresession.h"
#include "networkconnection.h"
+#include "userinputhandler.h"
#include "signalproxy.h"
#include "buffersyncer.h"
#include "corebacklogmanager.h"
#include "corebufferviewmanager.h"
+#include "coreirclisthelper.h"
#include "storage.h"
-#include "network.h"
+#include "corenetwork.h"
#include "ircuser.h"
#include "ircchannel.h"
#include "identity.h"
: QObject(parent),
_user(uid),
_signalProxy(new SignalProxy(SignalProxy::Server, 0, this)),
+ _aliasManager(this),
_bufferSyncer(new BufferSyncer(this)),
_backlogManager(new CoreBacklogManager(this)),
_bufferViewManager(new CoreBufferViewManager(_signalProxy, this)),
+ _ircListHelper(new CoreIrcListHelper(this)),
+ _coreInfo(this),
scriptEngine(new QScriptEngine(this))
{
p->synchronize(_bufferSyncer);
- // init BacklogManager;
+ // init alias manager
+ p->synchronize(&aliasManager());
+
+ // init BacklogManager
p->synchronize(_backlogManager);
-
+
+ // init IrcListHelper
+ p->synchronize(ircListHelper());
+
+ // init CoreInfo
+ p->synchronize(&_coreInfo);
+
// Restore session state
if(restoreState) restoreSessionState();
foreach(NetworkConnection *conn, _connections.values()) {
delete conn;
}
- foreach(Network *net, _networks.values()) {
+ foreach(CoreNetwork *net, _networks.values()) {
delete net;
}
}
return _user;
}
-Network *CoreSession::network(NetworkId id) const {
+CoreNetwork *CoreSession::network(NetworkId id) const {
if(_networks.contains(id)) return _networks[id];
return 0;
}
}
void CoreSession::connectToNetwork(NetworkId id) {
- Network *net = network(id);
+ CoreNetwork *net = network(id);
if(!net) {
qWarning() << "Connect to unknown network requested! net:" << id << "user:" << user();
return;
//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(displayMsg(Message::Type, BufferInfo::Type, QString, QString, QString, Message::Flags)),
+ this, SLOT(recvMessageFromServer(Message::Type, BufferInfo::Type, QString, QString, QString, Message::Flags)));
connect(conn, SIGNAL(displayStatusMsg(QString)), this, SLOT(recvStatusMsgFromServer(QString)));
connect(conn, SIGNAL(nickChanged(const NetworkId &, const QString &, const QString &)),
}
void CoreSession::disconnectFromNetwork(NetworkId id) {
- if(!_connections.contains(id)) return;
- _connections[id]->disconnectFromIrc();
+ if(!_connections.contains(id))
+ return;
+
+ //_connections[id]->disconnectFromIrc();
+ _connections[id]->userInputHandler()->handleQuit(BufferInfo(), QString());
}
void CoreSession::networkStateRequested() {
// no checks for validity check - privateslot...
QTcpSocket *socket = qobject_cast<QTcpSocket *>(iodev);
if(socket)
- qDebug() << qPrintable(tr("Client %1 disconnected (UserId: %2).").arg(socket->peerAddress().toString()).arg(user().toInt()));
+ qDebug() << qPrintable(tr("Client")) << qPrintable(socket->peerAddress().toString()) << qPrintable(tr("disconnected (UserId: %1).").arg(user().toInt()));
else
qDebug() << "Local client disconnedted.";
disconnect(socket, 0, this, 0);
// 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, BufferInfo::Type bufferType, QString target, QString text, QString sender, quint8 flags) {
+void CoreSession::recvMessageFromServer(Message::Type type, BufferInfo::Type bufferType,
+ QString target, QString text, QString sender, Message::Flags flags) {
NetworkConnection *netCon = qobject_cast<NetworkConnection*>(this->sender());
Q_ASSERT(netCon);
-
+
BufferInfo bufferInfo = Core::bufferInfo(user(), netCon->networkId(), bufferType, target);
Message msg(bufferInfo, type, text, sender, flags);
msg.setMsgId(Core::storeMessage(msg));
id = info.networkId.toInt();
if(!_networks.contains(id)) {
- Network *net = new Network(id, this);
+ 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);
}
}
+// FIXME: move to CoreNetwork
void CoreSession::updateNetwork(const NetworkInfo &info) {
if(!_networks.contains(info.networkId)) {
qWarning() << "Update request for unknown network received!";
// this can happen if the network was reconnecting while being removed
_connections.take(id)->deleteLater();
}
+ QList<BufferId> removedBuffers = Core::requestBufferIdsForNetwork(user(), id);
Network *net = _networks.take(id);
if(net && Core::removeNetwork(user(), id)) {
+ foreach(BufferId bufferId, removedBuffers) {
+ _bufferSyncer->removeBuffer(bufferId);
+ }
emit networkRemoved(id);
net->deleteLater();
}
}
if(bufferInfo.type() == BufferInfo::ChannelBuffer) {
- Network *net = network(bufferInfo.networkId());
+ CoreNetwork *net = network(bufferInfo.networkId());
if(!net) {
qWarning() << "CoreSession::removeBufferRequested(): Received BufferInfo with unknown networkId!";
return;