2020-07-04 15:15:59 +02:00
|
|
|
#include "messages/MessageBuilder.hpp"
|
|
|
|
|
|
|
|
#include "common/Aliases.hpp"
|
|
|
|
#include "common/Outcome.hpp"
|
2021-06-20 15:55:35 +02:00
|
|
|
#include "messages/MessageColor.hpp"
|
2022-05-28 11:55:48 +02:00
|
|
|
#include "providers/twitch/TwitchBadge.hpp"
|
2020-07-04 15:15:59 +02:00
|
|
|
|
|
|
|
#include <IrcMessage>
|
|
|
|
#include <QColor>
|
2021-05-08 15:57:00 +02:00
|
|
|
#include <QUrl>
|
2020-07-04 15:15:59 +02:00
|
|
|
|
|
|
|
namespace chatterino {
|
|
|
|
|
|
|
|
class SharedMessageBuilder : public MessageBuilder
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
SharedMessageBuilder() = delete;
|
|
|
|
|
|
|
|
explicit SharedMessageBuilder(Channel *_channel,
|
|
|
|
const Communi::IrcPrivateMessage *_ircMessage,
|
|
|
|
const MessageParseArgs &_args);
|
|
|
|
|
|
|
|
explicit SharedMessageBuilder(Channel *_channel,
|
|
|
|
const Communi::IrcMessage *_ircMessage,
|
|
|
|
const MessageParseArgs &_args,
|
|
|
|
QString content, bool isAction);
|
|
|
|
|
|
|
|
QString userName;
|
|
|
|
|
|
|
|
[[nodiscard]] virtual bool isIgnored() const;
|
|
|
|
|
|
|
|
// triggerHighlights triggers any alerts or sounds parsed by parseHighlights
|
|
|
|
virtual void triggerHighlights();
|
|
|
|
virtual MessagePtr build() = 0;
|
|
|
|
|
2022-05-28 11:55:48 +02:00
|
|
|
static std::pair<QString, QString> slashKeyValue(const QString &kvStr);
|
|
|
|
|
|
|
|
// Parses "badges" tag which contains a comma separated list of key-value elements
|
|
|
|
static std::vector<Badge> parseBadgeTag(const QVariantMap &tags);
|
|
|
|
|
2022-11-20 17:28:29 +01:00
|
|
|
static QString stylizeUsername(const QString &username,
|
|
|
|
const Message &message);
|
|
|
|
|
2020-07-04 15:15:59 +02:00
|
|
|
protected:
|
|
|
|
virtual void parse();
|
|
|
|
|
|
|
|
virtual void parseUsernameColor();
|
|
|
|
|
|
|
|
virtual void parseUsername();
|
|
|
|
|
|
|
|
virtual Outcome tryAppendEmote(const EmoteName &name)
|
|
|
|
{
|
|
|
|
return Failure;
|
|
|
|
}
|
|
|
|
|
|
|
|
// parseHighlights only updates the visual state of the message, but leaves the playing of alerts and sounds to the triggerHighlights function
|
|
|
|
virtual void parseHighlights();
|
|
|
|
|
|
|
|
void appendChannelName();
|
|
|
|
|
|
|
|
Channel *channel;
|
|
|
|
const Communi::IrcMessage *ircMessage;
|
|
|
|
MessageParseArgs args;
|
|
|
|
const QVariantMap tags;
|
|
|
|
QString originalMessage_;
|
|
|
|
|
|
|
|
const bool action_{};
|
|
|
|
|
2021-06-20 15:55:35 +02:00
|
|
|
QColor usernameColor_ = {153, 153, 153};
|
2020-07-04 15:15:59 +02:00
|
|
|
|
|
|
|
bool highlightAlert_ = false;
|
|
|
|
bool highlightSound_ = false;
|
|
|
|
|
|
|
|
QUrl highlightSoundUrl_;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace chatterino
|