[irc] Partially fix IRC colors (#1594)
Doesn't fix #1379 but it is a big step forward. Needs some "real life" testing, but should be good.
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
#include "providers/irc/IrcMessageBuilder.hpp"
|
||||
|
||||
#include "Application.hpp"
|
||||
#include "controllers/accounts/AccountController.hpp"
|
||||
#include "controllers/ignores/IgnoreController.hpp"
|
||||
#include "controllers/ignores/IgnorePhrase.hpp"
|
||||
#include "messages/Message.hpp"
|
||||
#include "providers/chatterino/ChatterinoBadges.hpp"
|
||||
#include "singletons/Emotes.hpp"
|
||||
#include "singletons/Resources.hpp"
|
||||
#include "singletons/Settings.hpp"
|
||||
#include "singletons/Theme.hpp"
|
||||
#include "singletons/WindowManager.hpp"
|
||||
#include "util/IrcHelpers.hpp"
|
||||
#include "widgets/Window.hpp"
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
IrcMessageBuilder::IrcMessageBuilder(
|
||||
Channel *_channel, const Communi::IrcPrivateMessage *_ircMessage,
|
||||
const MessageParseArgs &_args)
|
||||
: SharedMessageBuilder(_channel, _ircMessage, _args)
|
||||
{
|
||||
this->usernameColor_ = getApp()->themes->messages.textColors.system;
|
||||
}
|
||||
|
||||
IrcMessageBuilder::IrcMessageBuilder(Channel *_channel,
|
||||
const Communi::IrcMessage *_ircMessage,
|
||||
const MessageParseArgs &_args,
|
||||
QString content, bool isAction)
|
||||
: SharedMessageBuilder(_channel, _ircMessage, _args, content, isAction)
|
||||
{
|
||||
assert(false);
|
||||
this->usernameColor_ = getApp()->themes->messages.textColors.system;
|
||||
}
|
||||
|
||||
MessagePtr IrcMessageBuilder::build()
|
||||
{
|
||||
// PARSE
|
||||
this->parse();
|
||||
|
||||
// PUSH ELEMENTS
|
||||
this->appendChannelName();
|
||||
|
||||
this->emplace<TimestampElement>();
|
||||
|
||||
this->appendUsername();
|
||||
|
||||
// words
|
||||
this->addWords(this->originalMessage_.split(' '));
|
||||
|
||||
this->message().messageText = this->originalMessage_;
|
||||
this->message().searchText = this->message().localizedName + " " +
|
||||
this->userName + ": " + this->originalMessage_;
|
||||
|
||||
// highlights
|
||||
this->parseHighlights();
|
||||
|
||||
// highlighting incoming whispers if requested per setting
|
||||
if (this->args.isReceivedWhisper && getSettings()->highlightInlineWhispers)
|
||||
{
|
||||
this->message().flags.set(MessageFlag::HighlightedWhisper, true);
|
||||
}
|
||||
|
||||
return this->release();
|
||||
}
|
||||
|
||||
void IrcMessageBuilder::addWords(const QStringList &words)
|
||||
{
|
||||
this->emplace<IrcTextElement>(words.join(' '), MessageElementFlag::Text);
|
||||
}
|
||||
|
||||
void IrcMessageBuilder::appendUsername()
|
||||
{
|
||||
auto app = getApp();
|
||||
|
||||
QString username = this->userName;
|
||||
this->message().loginName = username;
|
||||
|
||||
// The full string that will be rendered in the chat widget
|
||||
QString usernameText = username;
|
||||
|
||||
if (!this->action_)
|
||||
{
|
||||
usernameText += ":";
|
||||
}
|
||||
|
||||
this->emplace<TextElement>(usernameText, MessageElementFlag::Username,
|
||||
this->usernameColor_, FontStyle::ChatMediumBold)
|
||||
->setLink({Link::UserInfo, this->message().displayName});
|
||||
}
|
||||
|
||||
} // namespace chatterino
|
||||
@@ -0,0 +1,41 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/Aliases.hpp"
|
||||
#include "common/Outcome.hpp"
|
||||
#include "messages/SharedMessageBuilder.hpp"
|
||||
#include "providers/twitch/TwitchBadge.hpp"
|
||||
|
||||
#include <IrcMessage>
|
||||
#include <QString>
|
||||
#include <QVariant>
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
struct Emote;
|
||||
using EmotePtr = std::shared_ptr<const Emote>;
|
||||
|
||||
class Channel;
|
||||
class TwitchChannel;
|
||||
|
||||
class IrcMessageBuilder : public SharedMessageBuilder
|
||||
{
|
||||
public:
|
||||
IrcMessageBuilder() = delete;
|
||||
|
||||
explicit IrcMessageBuilder(Channel *_channel,
|
||||
const Communi::IrcPrivateMessage *_ircMessage,
|
||||
const MessageParseArgs &_args);
|
||||
explicit IrcMessageBuilder(Channel *_channel,
|
||||
const Communi::IrcMessage *_ircMessage,
|
||||
const MessageParseArgs &_args, QString content,
|
||||
bool isAction);
|
||||
|
||||
MessagePtr build() override;
|
||||
|
||||
private:
|
||||
void appendUsername();
|
||||
|
||||
void addWords(const QStringList &words);
|
||||
};
|
||||
|
||||
} // namespace chatterino
|
||||
@@ -4,9 +4,9 @@
|
||||
#include <cstdlib>
|
||||
|
||||
#include "messages/Message.hpp"
|
||||
#include "messages/MessageBuilder.hpp"
|
||||
#include "providers/irc/Irc2.hpp"
|
||||
#include "providers/irc/IrcChannel2.hpp"
|
||||
#include "providers/irc/IrcMessageBuilder.hpp"
|
||||
#include "singletons/Settings.hpp"
|
||||
#include "util/QObjectRef.hpp"
|
||||
|
||||
@@ -86,6 +86,7 @@ void IrcServer::initializeConnectionSignals(IrcConnection *connection,
|
||||
|
||||
QObject::connect(connection, &Communi::IrcConnection::noticeMessageReceived,
|
||||
this, [this](Communi::IrcNoticeMessage *message) {
|
||||
// XD PAJLADA
|
||||
MessageBuilder builder;
|
||||
|
||||
builder.emplace<TimestampElement>();
|
||||
@@ -176,15 +177,18 @@ void IrcServer::privateMessageReceived(Communi::IrcPrivateMessage *message)
|
||||
|
||||
if (auto channel = this->getChannelOrEmpty(target); !channel->isEmpty())
|
||||
{
|
||||
MessageBuilder builder;
|
||||
MessageParseArgs args;
|
||||
IrcMessageBuilder builder(channel.get(), message, args);
|
||||
|
||||
builder.emplace<TimestampElement>();
|
||||
builder.emplace<TextElement>(message->nick() + ":",
|
||||
MessageElementFlag::Username);
|
||||
builder.emplace<TextElement>(message->content(),
|
||||
MessageElementFlag::Text);
|
||||
|
||||
channel->addMessage(builder.release());
|
||||
if (!builder.isIgnored())
|
||||
{
|
||||
builder.triggerHighlights();
|
||||
channel->addMessage(builder.build());
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "message ignored :rage:";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,8 +209,7 @@ void IrcServer::readConnectionMessageReceived(Communi::IrcMessage *message)
|
||||
{
|
||||
if (message->nick() == this->data_->nick)
|
||||
{
|
||||
shared->addMessage(
|
||||
MessageBuilder(systemMessage, "joined").release());
|
||||
shared->addMessage(makeSystemMessage("joined"));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -230,8 +233,7 @@ void IrcServer::readConnectionMessageReceived(Communi::IrcMessage *message)
|
||||
{
|
||||
if (message->nick() == this->data_->nick)
|
||||
{
|
||||
shared->addMessage(
|
||||
MessageBuilder(systemMessage, "parted").release());
|
||||
shared->addMessage(makeSystemMessage("parted"));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user