refactored MessageBuilder
This commit is contained in:
@@ -3,21 +3,36 @@
|
||||
#include "messages/Message.hpp"
|
||||
|
||||
#include <QRegularExpression>
|
||||
|
||||
#include <ctime>
|
||||
|
||||
namespace chatterino {
|
||||
|
||||
struct MessageBuilder {
|
||||
struct SystemMessageTag {
|
||||
};
|
||||
struct TimeoutMessageTag {
|
||||
};
|
||||
const SystemMessageTag systemMessage{};
|
||||
const TimeoutMessageTag timeoutMessage{};
|
||||
|
||||
MessagePtr makeSystemMessage(const QString &text);
|
||||
|
||||
class MessageBuilder
|
||||
{
|
||||
public:
|
||||
MessageBuilder();
|
||||
MessageBuilder(const QString &text);
|
||||
MessageBuilder(SystemMessageTag, const QString &text);
|
||||
MessageBuilder(TimeoutMessageTag, const QString &username,
|
||||
const QString &durationInSeconds, const QString &reason,
|
||||
bool multipleTimes);
|
||||
MessageBuilder(const BanAction &action, uint32_t count = 1);
|
||||
MessageBuilder(const UnbanAction &action);
|
||||
|
||||
MessagePtr getMessage();
|
||||
Message *operator->();
|
||||
Message &message();
|
||||
MessagePtr release();
|
||||
|
||||
void setHighlight(bool value);
|
||||
void append(MessageElement *element);
|
||||
void appendTimestamp();
|
||||
void appendTimestamp(const QTime &time);
|
||||
void append(std::unique_ptr<MessageElement> element);
|
||||
QString matchLink(const QString &string);
|
||||
|
||||
template <typename T, typename... Args>
|
||||
@@ -26,13 +41,14 @@ public:
|
||||
static_assert(std::is_base_of<MessageElement, T>::value,
|
||||
"T must extend MessageElement");
|
||||
|
||||
T *element = new T(std::forward<Args>(args)...);
|
||||
this->append(element);
|
||||
return element;
|
||||
auto unique = std::make_unique<T>(std::forward<Args>(args)...);
|
||||
auto pointer = unique.get();
|
||||
this->append(std::move(unique));
|
||||
return pointer;
|
||||
}
|
||||
|
||||
protected:
|
||||
MessagePtr message_;
|
||||
private:
|
||||
std::unique_ptr<Message> message_;
|
||||
};
|
||||
|
||||
} // namespace chatterino
|
||||
|
||||
Reference in New Issue
Block a user