refactored MessageBuilder

This commit is contained in:
fourtf
2018-08-07 01:35:24 +02:00
parent f71ff08e68
commit c26422aec1
29 changed files with 964 additions and 970 deletions
+28 -12
View File
@@ -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