#ifndef CHATMESSAGE_HPP #define CHATMESSAGE_HPP // #include "messagetype.hpp" #include "ircmessagetype.hpp" #include #include #include class ChatMessage { Q_GADGET public: static ChatMessage* Parse(QString message); QString rawMessage() const; const std::unordered_map* tags() const; QString sender() const; const QList* parameters() const; QString prefix() const; IrcMessageType type() const; // explicit ChatMessage(QObject *parent = nullptr); protected: explicit ChatMessage(QString message); signals: private: ChatMessage(QString rawMessage, std::unordered_map tags, QString sender, QList parameters, QString prefix, IrcMessageType type); const QString _rawMessage; const std::unordered_map _tags; const QString _sender; const QList _parameters; const QString _prefix; const IrcMessageType _type; static std::unordered_map parseTags(QString tagStr); }; class PrivmsgView { public: PrivmsgView(const ChatMessage* msg); QString message() const; QString user() const; static constexpr IrcMessageType Expected = IrcMessageType::PRIVMSG; private: const ChatMessage* const parent; }; class PingView { public: PingView(const ChatMessage* msg); QString toPong() const; static constexpr IrcMessageType Expected = IrcMessageType::PING; private: const ChatMessage* const parent; }; #endif // CHATMESSAGE_HPP