X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcoresession.cpp;h=a05b6bacb78936a769e89d6b999370bae82942cd;hp=3bc6f3c4523d8631fcd3eb303647162a312b48fa;hb=6e3574a163f07c28d44276318f2d9f92e169f491;hpb=cc6e7c08709c4e761e2fd9c2e322751015497003 diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 3bc6f3c4..a05b6bac 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -20,7 +20,7 @@ #include "coresession.h" -#include +#include #include "core.h" #include "corebacklogmanager.h" @@ -76,10 +76,10 @@ CoreSession::CoreSession(UserId uid, bool restoreState, bool strictIdentEnabled, , _sessionEventProcessor(new CoreSessionEventProcessor(this)) , _ctcpParser(new CtcpParser(this)) , _ircParser(new IrcParser(this)) - , scriptEngine(new QScriptEngine(this)) , _processMessages(false) , _ignoreListManager(this) , _highlightRuleManager(this) + , _metricsServer(Core::instance()->metricsServer()) { SignalProxy* p = signalProxy(); p->setHeartBeatInterval(30); @@ -113,12 +113,11 @@ CoreSession::CoreSession(UserId uid, bool restoreState, bool strictIdentEnabled, QVariantMap data; data["quasselVersion"] = Quassel::buildInfo().fancyVersionString; data["quasselBuildDate"] = Quassel::buildInfo().commitDate; // "BuildDate" for compatibility - data["startTime"] = Core::instance()->startTime(); + data["startTime"] = Core::startTime(); data["sessionConnectedClients"] = 0; _coreInfo->setCoreData(data); loadSettings(); - initScriptEngine(); eventManager()->registerObject(ircParser(), EventManager::NormalPriority); eventManager()->registerObject(sessionEventProcessor(), EventManager::HighPriority); // needs to process events *before* the stringifier! @@ -130,7 +129,7 @@ CoreSession::CoreSession(UserId uid, bool restoreState, bool strictIdentEnabled, eventManager()->registerObject(ctcpParser(), EventManager::LowPriority, "send"); // periodically save our session state - connect(Core::instance()->syncTimer(), &QTimer::timeout, this, &CoreSession::saveSessionState); + connect(Core::syncTimer(), &QTimer::timeout, this, &CoreSession::saveSessionState); p->synchronize(_bufferSyncer); p->synchronize(&aliasManager()); @@ -149,6 +148,10 @@ CoreSession::CoreSession(UserId uid, bool restoreState, bool strictIdentEnabled, restoreSessionState(); emit initialized(); + + if (_metricsServer) { + _metricsServer->addSession(user(), Core::instance()->strictSysIdent(_user)); + } } void CoreSession::shutdown() @@ -169,6 +172,10 @@ void CoreSession::shutdown() // Nothing to do, suicide so the core can shut down deleteLater(); } + + if (_metricsServer) { + _metricsServer->removeSession(user()); + } } void CoreSession::onNetworkDisconnected(NetworkId networkId) @@ -200,11 +207,11 @@ void CoreSession::loadSettings() // migrate to db QList ids = s.identityIds(); - QList networkInfos = Core::networks(user()); - foreach (IdentityId id, ids) { + std::vector networkInfos = Core::networks(user()); + for (IdentityId id : ids) { CoreIdentity identity(s.identity(id)); IdentityId newId = Core::createIdentity(user(), identity); - QList::iterator networkIter = networkInfos.begin(); + auto networkIter = networkInfos.begin(); while (networkIter != networkInfos.end()) { if (networkIter->identity == id) { networkIter->identity = newId; @@ -219,11 +226,11 @@ void CoreSession::loadSettings() } // end of migration - foreach (CoreIdentity identity, Core::identities(user())) { + for (const CoreIdentity& identity : Core::identities(user())) { createIdentity(identity); } - foreach (NetworkInfo info, Core::networks(user())) { + for (const NetworkInfo& info : Core::networks(user())) { createNetwork(info); } } @@ -237,10 +244,8 @@ void CoreSession::saveSessionState() const void CoreSession::restoreSessionState() { - QList nets = Core::connectedNetworks(user()); - CoreNetwork* net = nullptr; - foreach (NetworkId id, nets) { - net = network(id); + for (NetworkId id : Core::connectedNetworks(user())) { + auto net = network(id); Q_ASSERT(net); net->connectToIrc(); } @@ -255,6 +260,10 @@ void CoreSession::addClient(RemotePeer* peer) _coreInfo->setConnectedClientData(signalProxy()->peerCount(), signalProxy()->peerData()); signalProxy()->setTargetPeer(nullptr); + + if (_metricsServer) { + _metricsServer->addClient(user()); + } } void CoreSession::addClient(InternalPeer* peer) @@ -269,6 +278,10 @@ void CoreSession::removeClient(Peer* peer) if (p) qInfo() << qPrintable(tr("Client")) << p->description() << qPrintable(tr("disconnected (UserId: %1).").arg(user().toInt())); _coreInfo->setConnectedClientData(signalProxy()->peerCount(), signalProxy()->peerData()); + + if (_metricsServer) { + _metricsServer->removeClient(user()); + } } QHash CoreSession::persistentChannels(NetworkId id) const @@ -300,31 +313,23 @@ 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(NetworkId networkId, - Message::Type type, - BufferInfo::Type bufferType, - const QString& target, - const QString& text_, - const QString& sender, - Message::Flags flags) +void CoreSession::recvMessageFromServer(RawMessage msg) { // U+FDD0 and U+FDD1 are special characters for Qt's text engine, specifically they mark the boundaries of // text frames in a QTextDocument. This might lead to problems in widgets displaying QTextDocuments (such as // KDE's notifications), hence we remove those just to be safe. - QString text = text_; - text.remove(QChar(0xfdd0)).remove(QChar(0xfdd1)); - RawMessage rawMsg(networkId, type, bufferType, target, text, sender, flags); + msg.text.remove(QChar(0xfdd0)).remove(QChar(0xfdd1)); // check for HardStrictness ignore - CoreNetwork* currentNetwork = network(networkId); + CoreNetwork* currentNetwork = network(msg.networkId); QString networkName = currentNetwork ? currentNetwork->networkName() : QString(""); - if (_ignoreListManager.match(rawMsg, networkName) == IgnoreListManager::HardStrictness) + if (_ignoreListManager.match(msg, networkName) == IgnoreListManager::HardStrictness) return; - if (currentNetwork && _highlightRuleManager.match(rawMsg, currentNetwork->myNick(), currentNetwork->identityPtr()->nicks())) - rawMsg.flags |= Message::Flag::Highlight; + if (currentNetwork && _highlightRuleManager.match(msg, currentNetwork->myNick(), currentNetwork->identityPtr()->nicks())) + msg.flags |= Message::Flag::Highlight; - _messageQueue << rawMsg; + _messageQueue << std::move(msg); if (!_processMessages) { _processMessages = true; QCoreApplication::postEvent(this, new ProcessMessagesEvent()); @@ -335,21 +340,24 @@ void CoreSession::recvStatusMsgFromServer(QString msg) { auto* net = qobject_cast(sender()); Q_ASSERT(net); - emit displayStatusMsg(net->networkName(), msg); + emit displayStatusMsg(net->networkName(), std::move(msg)); } void CoreSession::processMessageEvent(MessageEvent* event) { - recvMessageFromServer(event->networkId(), - event->msgType(), - event->bufferType(), - event->target().isNull() ? "" : event->target(), - event->text().isNull() ? "" : event->text(), - event->sender().isNull() ? "" : event->sender(), - event->msgFlags()); + recvMessageFromServer(RawMessage{ + event->timestamp(), + event->networkId(), + event->msgType(), + event->bufferType(), + event->target().isNull() ? "" : event->target(), + event->text().isNull() ? "" : event->text(), + event->sender().isNull() ? "" : event->sender(), + event->msgFlags() + }); } -QList CoreSession::buffers() const +std::vector CoreSession::buffers() const { return Core::requestBuffers(user()); } @@ -373,7 +381,8 @@ void CoreSession::processMessages() Q_ASSERT(!createBuffer); bufferInfo = Core::bufferInfo(user(), rawMsg.networkId, BufferInfo::StatusBuffer, ""); } - Message msg(bufferInfo, + Message msg(rawMsg.timestamp, + bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, @@ -404,7 +413,8 @@ void CoreSession::processMessages() } bufferInfoCache[rawMsg.networkId][rawMsg.target] = bufferInfo; } - Message msg(bufferInfo, + Message msg(rawMsg.timestamp, + bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, @@ -427,7 +437,8 @@ void CoreSession::processMessages() // add the StatusBuffer to the Cache in case there are more Messages for the original target bufferInfoCache[rawMsg.networkId][rawMsg.target] = bufferInfo; } - Message msg(bufferInfo, + Message msg(rawMsg.timestamp, + bufferInfo, rawMsg.type, rawMsg.text, rawMsg.sender, @@ -502,31 +513,19 @@ Protocol::SessionState CoreSession::sessionState() const QVariantList networkIds; QVariantList identities; - foreach (const BufferInfo& id, buffers()) + for (const BufferInfo& id : buffers()) { bufferInfos << QVariant::fromValue(id); - foreach (const NetworkId& id, _networks.keys()) + } + for (const NetworkId& id : _networks.keys()) { networkIds << QVariant::fromValue(id); - foreach (const Identity* i, _identities.values()) + } + for (const Identity* i : _identities.values()) { identities << QVariant::fromValue(*i); + } return Protocol::SessionState(identities, bufferInfos, networkIds); } -void CoreSession::initScriptEngine() -{ - signalProxy()->attachSlot(SIGNAL(scriptRequest(QString)), this, &CoreSession::scriptRequest); - signalProxy()->attachSignal(this, &CoreSession::scriptResult); - - // FIXME - // QScriptValue storage_ = scriptEngine->newQObject(storage); - // scriptEngine->globalObject().setProperty("storage", storage_); -} - -void CoreSession::scriptRequest(QString script) -{ - emit scriptResult(scriptEngine->evaluate(script).toString()); -} - /*** Identity Handling ***/ void CoreSession::createIdentity(const Identity& identity, const QVariantMap& additional) { @@ -609,7 +608,7 @@ void CoreSession::createNetwork(const NetworkInfo& info_, const QStringList& per if (!_networks.contains(id)) { // create persistent chans QRegExp rx(R"(\s*(\S+)(?:\s*(\S+))?\s*)"); - foreach (QString channel, persistentChans) { + for (const QString& channel : persistentChans) { if (!rx.exactMatch(channel)) { qWarning() << QString("Invalid persistent channel declaration: %1").arg(channel); continue; @@ -658,7 +657,6 @@ void CoreSession::removeNetwork(NetworkId id) void CoreSession::destroyNetwork(NetworkId id) { - QList removedBuffers = Core::requestBufferIdsForNetwork(user(), id); Network* net = _networks.take(id); if (net && Core::removeNetwork(user(), id)) { // make sure that all unprocessed RawMessages from this network are removed @@ -672,7 +670,7 @@ void CoreSession::destroyNetwork(NetworkId id) } } // remove buffers from syncer - foreach (BufferId bufferId, removedBuffers) { + for (BufferId bufferId : Core::requestBufferIdsForNetwork(user(), id)) { _bufferSyncer->removeBuffer(bufferId); } emit networkRemoved(id);