refactored MessageBuilder
This commit is contained in:
+143
-15
@@ -4,43 +4,171 @@
|
||||
#include "singletons/Emotes.hpp"
|
||||
#include "singletons/Resources.hpp"
|
||||
#include "singletons/Theme.hpp"
|
||||
#include "util/FormatTime.hpp"
|
||||
#include "util/IrcHelpers.hpp"
|
||||
|
||||
#include <QDateTime>
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
MessagePtr makeSystemMessage(const QString &text)
|
||||
{
|
||||
return MessageBuilder(systemMessage, text).release();
|
||||
}
|
||||
|
||||
MessageBuilder::MessageBuilder()
|
||||
: message_(new Message)
|
||||
: message_(std::make_unique<Message>())
|
||||
{
|
||||
}
|
||||
|
||||
MessagePtr MessageBuilder::getMessage()
|
||||
MessageBuilder::MessageBuilder(const QString &text)
|
||||
: MessageBuilder()
|
||||
{
|
||||
return this->message_;
|
||||
this->emplace<TimestampElement>();
|
||||
this->emplace<TextElement>(text, MessageElement::Text,
|
||||
MessageColor::System);
|
||||
this->message().searchText = text;
|
||||
}
|
||||
|
||||
void MessageBuilder::append(MessageElement *element)
|
||||
MessageBuilder::MessageBuilder(SystemMessageTag, const QString &text)
|
||||
: MessageBuilder()
|
||||
{
|
||||
this->message_->addElement(element);
|
||||
this->emplace<TimestampElement>();
|
||||
this->emplace<TextElement>(text, MessageElement::Text,
|
||||
MessageColor::System);
|
||||
this->message().flags |= Message::System;
|
||||
this->message().flags |= Message::DoNotTriggerNotification;
|
||||
this->message().searchText = text;
|
||||
}
|
||||
|
||||
void MessageBuilder::appendTimestamp()
|
||||
MessageBuilder::MessageBuilder(TimeoutMessageTag, const QString &username,
|
||||
const QString &durationInSeconds,
|
||||
const QString &reason, bool multipleTimes)
|
||||
: MessageBuilder()
|
||||
{
|
||||
this->appendTimestamp(QTime::currentTime());
|
||||
}
|
||||
QString text;
|
||||
|
||||
void MessageBuilder::setHighlight(bool value)
|
||||
{
|
||||
if (value) {
|
||||
this->message_->flags |= Message::Highlighted;
|
||||
text.append(username);
|
||||
if (!durationInSeconds.isEmpty()) {
|
||||
text.append(" has been timed out");
|
||||
|
||||
// TODO: Implement who timed the user out
|
||||
|
||||
text.append(" for ");
|
||||
bool ok = true;
|
||||
int timeoutSeconds = durationInSeconds.toInt(&ok);
|
||||
if (ok) {
|
||||
text.append(formatTime(timeoutSeconds));
|
||||
}
|
||||
} else {
|
||||
this->message_->flags &= ~Message::Highlighted;
|
||||
text.append(" has been permanently banned");
|
||||
}
|
||||
|
||||
if (reason.length() > 0) {
|
||||
text.append(": \"");
|
||||
text.append(parseTagString(reason));
|
||||
text.append("\"");
|
||||
}
|
||||
text.append(".");
|
||||
|
||||
if (multipleTimes) {
|
||||
text.append(" (multiple times)");
|
||||
}
|
||||
|
||||
this->message().flags.EnableFlag(Message::System);
|
||||
this->message().flags.EnableFlag(Message::Timeout);
|
||||
this->message().flags.EnableFlag(Message::DoNotTriggerNotification);
|
||||
this->message().timeoutUser = username;
|
||||
}
|
||||
|
||||
void MessageBuilder::appendTimestamp(const QTime &time)
|
||||
MessageBuilder::MessageBuilder(const BanAction &action, uint32_t count)
|
||||
{
|
||||
this->append(new TimestampElement(time));
|
||||
this->emplace<TimestampElement>();
|
||||
this->message().flags.EnableFlag(Message::System);
|
||||
this->message().flags.EnableFlag(Message::Timeout);
|
||||
this->message().timeoutUser = action.target.name;
|
||||
this->message().count = count;
|
||||
|
||||
QString text;
|
||||
|
||||
if (action.isBan()) {
|
||||
if (action.reason.isEmpty()) {
|
||||
text = QString("%1 banned %2.") //
|
||||
.arg(action.source.name)
|
||||
.arg(action.target.name);
|
||||
} else {
|
||||
text = QString("%1 banned %2: \"%3\".") //
|
||||
.arg(action.source.name)
|
||||
.arg(action.target.name)
|
||||
.arg(action.reason);
|
||||
}
|
||||
} else {
|
||||
if (action.reason.isEmpty()) {
|
||||
text = QString("%1 timed out %2 for %3.") //
|
||||
.arg(action.source.name)
|
||||
.arg(action.target.name)
|
||||
.arg(formatTime(action.duration));
|
||||
} else {
|
||||
text = QString("%1 timed out %2 for %3: \"%4\".") //
|
||||
.arg(action.source.name)
|
||||
.arg(action.target.name)
|
||||
.arg(formatTime(action.duration))
|
||||
.arg(action.reason);
|
||||
}
|
||||
|
||||
if (count > 1) {
|
||||
text.append(QString(" (%1 times)").arg(count));
|
||||
}
|
||||
}
|
||||
|
||||
this->emplace<TextElement>(text, MessageElement::Text,
|
||||
MessageColor::System);
|
||||
this->message().searchText = text;
|
||||
}
|
||||
|
||||
MessageBuilder::MessageBuilder(const UnbanAction &action)
|
||||
{
|
||||
this->emplace<TimestampElement>();
|
||||
this->message().flags.EnableFlag(Message::System);
|
||||
this->message().flags.EnableFlag(Message::Untimeout);
|
||||
|
||||
this->message().timeoutUser = action.target.name;
|
||||
|
||||
QString text;
|
||||
|
||||
if (action.wasBan()) {
|
||||
text = QString("%1 unbanned %2.") //
|
||||
.arg(action.source.name)
|
||||
.arg(action.target.name);
|
||||
} else {
|
||||
text = QString("%1 untimedout %2.") //
|
||||
.arg(action.source.name)
|
||||
.arg(action.target.name);
|
||||
}
|
||||
|
||||
this->emplace<TextElement>(text, MessageElement::Text,
|
||||
MessageColor::System);
|
||||
this->message().searchText = text;
|
||||
}
|
||||
|
||||
Message *MessageBuilder::operator->()
|
||||
{
|
||||
return this->message_.get();
|
||||
}
|
||||
|
||||
Message &MessageBuilder::message()
|
||||
{
|
||||
return *this->message_;
|
||||
}
|
||||
|
||||
MessagePtr MessageBuilder::release()
|
||||
{
|
||||
return MessagePtr(this->message_.release());
|
||||
}
|
||||
|
||||
void MessageBuilder::append(std::unique_ptr<MessageElement> element)
|
||||
{
|
||||
this->message().elements.push_back(std::move(element));
|
||||
}
|
||||
|
||||
QString MessageBuilder::matchLink(const QString &string)
|
||||
|
||||
Reference in New Issue
Block a user