mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-13 19:49:51 +01:00
Add logging to experimental IRC (#2996)
Co-authored-by: xHeaveny <69117321+xHeaveny@users.noreply.github.com> Co-authored-by: pajlada <rasmus.karlsson@pajlada.com>
This commit is contained in:
parent
0ab53d62ea
commit
bbadbc4b33
|
@ -84,6 +84,7 @@
|
|||
- Minor: Made join and part message have links to usercards. (#3358)
|
||||
- Minor: Show picked outcome in prediction badges. (#3357)
|
||||
- Minor: Add support for Emoji in IRC (#3354)
|
||||
- Minor: Added logging to experimental IRC (#2996)
|
||||
- Minor: Moved `/live` logs to its own subdirectory. (Logs from before this change will still be available in `Channels -> live`). (#3393)
|
||||
- Minor: Added clear button to settings search bar. (#3403)
|
||||
- Minor: Added autocompletion for default Twitch commands starting with the dot (e.g. `.mods` which does the same as `/mods`). (#3144)
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
#include "Application.hpp"
|
||||
#include "messages/Message.hpp"
|
||||
#include "messages/MessageBuilder.hpp"
|
||||
#include "providers/irc/IrcChannel2.hpp"
|
||||
#include "providers/irc/IrcServer.hpp"
|
||||
#include "providers/twitch/IrcMessageHandler.hpp"
|
||||
#include "singletons/Emotes.hpp"
|
||||
#include "singletons/Logging.hpp"
|
||||
|
@ -81,11 +83,20 @@ void Channel::addMessage(MessagePtr message,
|
|||
auto app = getApp();
|
||||
MessagePtr deleted;
|
||||
|
||||
// FOURTF: change this when adding more providers
|
||||
if (this->isTwitchChannel() &&
|
||||
(!overridingFlags || !overridingFlags->has(MessageFlag::DoNotLog)))
|
||||
if (!overridingFlags || !overridingFlags->has(MessageFlag::DoNotLog))
|
||||
{
|
||||
app->logging->addMessage(this->name_, message);
|
||||
QString channelPlatform("other");
|
||||
if (this->type_ == Type::Irc)
|
||||
{
|
||||
auto irc = static_cast<IrcChannel *>(this);
|
||||
channelPlatform =
|
||||
QString("irc-%1").arg(irc->server()->userFriendlyIdentifier());
|
||||
}
|
||||
else if (this->isTwitchChannel())
|
||||
{
|
||||
channelPlatform = "twitch";
|
||||
}
|
||||
app->logging->addMessage(this->name_, message, channelPlatform);
|
||||
}
|
||||
|
||||
if (this->messages_.pushBack(message, deleted))
|
||||
|
|
|
@ -58,6 +58,11 @@ const QString &IrcServer::nick()
|
|||
return this->data_->nick.isEmpty() ? this->data_->user : this->data_->nick;
|
||||
}
|
||||
|
||||
const QString &IrcServer::userFriendlyIdentifier()
|
||||
{
|
||||
return this->data_->host;
|
||||
}
|
||||
|
||||
void IrcServer::initializeConnectionSignals(IrcConnection *connection,
|
||||
ConnectionType type)
|
||||
{
|
||||
|
|
|
@ -18,6 +18,7 @@ public:
|
|||
int id();
|
||||
const QString &user();
|
||||
const QString &nick();
|
||||
const QString &userFriendlyIdentifier();
|
||||
|
||||
// AbstractIrcServer interface
|
||||
protected:
|
||||
|
|
|
@ -3,11 +3,14 @@
|
|||
#include "Application.hpp"
|
||||
#include "singletons/Paths.hpp"
|
||||
#include "singletons/Settings.hpp"
|
||||
#include "singletons/helper/LoggingChannel.hpp"
|
||||
|
||||
#include <QDir>
|
||||
#include <QStandardPaths>
|
||||
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
|
@ -15,24 +18,35 @@ void Logging::initialize(Settings &settings, Paths &paths)
|
|||
{
|
||||
}
|
||||
|
||||
void Logging::addMessage(const QString &channelName, MessagePtr message)
|
||||
void Logging::addMessage(const QString &channelName, MessagePtr message,
|
||||
const QString &platformName)
|
||||
{
|
||||
if (!getSettings()->enableLogging)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto it = this->loggingChannels_.find(channelName);
|
||||
if (it == this->loggingChannels_.end())
|
||||
auto platIt = this->loggingChannels_.find(platformName);
|
||||
if (platIt == this->loggingChannels_.end())
|
||||
{
|
||||
auto channel = new LoggingChannel(channelName);
|
||||
auto channel = new LoggingChannel(channelName, platformName);
|
||||
channel->addMessage(message);
|
||||
this->loggingChannels_.emplace(
|
||||
channelName, std::unique_ptr<LoggingChannel>(std::move(channel)));
|
||||
auto map = std::map<QString, std::unique_ptr<LoggingChannel>>();
|
||||
this->loggingChannels_[platformName] = std::move(map);
|
||||
auto &ref = this->loggingChannels_.at(platformName);
|
||||
ref.emplace(channelName, std::move(channel));
|
||||
return;
|
||||
}
|
||||
auto chanIt = platIt->second.find(channelName);
|
||||
if (chanIt == platIt->second.end())
|
||||
{
|
||||
auto channel = new LoggingChannel(channelName, platformName);
|
||||
channel->addMessage(message);
|
||||
platIt->second.emplace(channelName, std::move(channel));
|
||||
}
|
||||
else
|
||||
{
|
||||
it->second->addMessage(message);
|
||||
chanIt->second->addMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,10 +20,15 @@ public:
|
|||
|
||||
virtual void initialize(Settings &settings, Paths &paths) override;
|
||||
|
||||
void addMessage(const QString &channelName, MessagePtr message);
|
||||
void addMessage(const QString &channelName, MessagePtr message,
|
||||
const QString &platformName);
|
||||
|
||||
private:
|
||||
std::map<QString, std::unique_ptr<LoggingChannel>> loggingChannels_;
|
||||
using PlatformName = QString;
|
||||
using ChannelName = QString;
|
||||
std::map<PlatformName,
|
||||
std::map<ChannelName, std::unique_ptr<LoggingChannel>>>
|
||||
loggingChannels_;
|
||||
};
|
||||
|
||||
} // namespace chatterino
|
||||
|
|
|
@ -13,8 +13,10 @@ namespace chatterino {
|
|||
|
||||
QByteArray endline("\n");
|
||||
|
||||
LoggingChannel::LoggingChannel(const QString &_channelName)
|
||||
LoggingChannel::LoggingChannel(const QString &_channelName,
|
||||
const QString &_platform)
|
||||
: channelName(_channelName)
|
||||
, platform(_platform)
|
||||
{
|
||||
if (this->channelName.startsWith("/whispers"))
|
||||
{
|
||||
|
@ -34,8 +36,9 @@ LoggingChannel::LoggingChannel(const QString &_channelName)
|
|||
QStringLiteral("Channels") + QDir::separator() + channelName;
|
||||
}
|
||||
|
||||
// FOURTF: change this when adding more providers
|
||||
this->subDirectory = "Twitch/" + this->subDirectory;
|
||||
// enforce capitalized platform names
|
||||
this->subDirectory = platform[0].toUpper() + platform.mid(1).toLower() +
|
||||
QDir::separator() + this->subDirectory;
|
||||
|
||||
getSettings()->logPath.connect([this](const QString &logPath, auto) {
|
||||
this->baseDirectory =
|
||||
|
|
|
@ -15,7 +15,8 @@ class Logging;
|
|||
|
||||
class LoggingChannel : boost::noncopyable
|
||||
{
|
||||
explicit LoggingChannel(const QString &_channelName);
|
||||
explicit LoggingChannel(const QString &_channelName,
|
||||
const QString &platform);
|
||||
|
||||
public:
|
||||
~LoggingChannel();
|
||||
|
@ -34,6 +35,7 @@ private:
|
|||
QString generateDateString(const QDateTime &now);
|
||||
|
||||
const QString channelName;
|
||||
const QString platform;
|
||||
QString baseDirectory;
|
||||
QString subDirectory;
|
||||
|
||||
|
|
Loading…
Reference in a new issue