#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"
_bufferSyncer(new BufferSyncer(this)),
_backlogManager(new CoreBacklogManager(this)),
_bufferViewManager(new CoreBufferViewManager(_signalProxy, this)),
+ _ircListHelper(new CoreIrcListHelper(this)),
scriptEngine(new QScriptEngine(this))
{
// init BacklogManager;
p->synchronize(_backlogManager);
-
+
+ // init IrcListHelper;
+ p->synchronize(ircListHelper());
+
// 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() {
// 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));
if(!info.networkId.isValid())
Core::createNetwork(user(), info);
- Q_ASSERT(info.networkId.isValid());
+ 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();
- 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)));
- net->setNetworkInfo(info);
- net->setProxy(signalProxy());
- _networks[id] = net;
- signalProxy()->synchronize(net);
- emit networkCreated(id);
+ 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!";
}
if(bufferInfo.type() == BufferInfo::ChannelBuffer) {
- Network *net = network(bufferInfo.networkId());
- Q_ASSERT(net);
+ CoreNetwork *net = network(bufferInfo.networkId());
+ if(!net) {
+ qWarning() << "CoreSession::removeBufferRequested(): Received BufferInfo with unknown networkId!";
+ return;
+ }
IrcChannel *chan = net->ircChannel(bufferInfo.bufferName());
if(chan) {
qWarning() << "CoreSession::removeBufferRequested(): Unable to remove Buffer for joined Channel:" << bufferInfo.bufferName();