68 lines
1.5 KiB
C++
68 lines
1.5 KiB
C++
#ifndef CHATMESSAGE_HPP
|
|
#define CHATMESSAGE_HPP
|
|
|
|
// #include "messagetype.hpp"
|
|
#include "ircmessagetype.hpp"
|
|
|
|
#include <QObject>
|
|
#include <QList>
|
|
|
|
#include <unordered_map>
|
|
|
|
class ChatMessage
|
|
{
|
|
Q_GADGET
|
|
public:
|
|
static ChatMessage* Parse(QString message);
|
|
QString rawMessage() const;
|
|
const std::unordered_map<QString, QString>* tags() const;
|
|
QString sender() const;
|
|
const QList<QString>* 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<QString, QString> tags,
|
|
QString sender, QList<QString> parameters, QString prefix,
|
|
IrcMessageType type);
|
|
const QString _rawMessage;
|
|
const std::unordered_map<QString, QString> _tags;
|
|
const QString _sender;
|
|
const QList<QString> _parameters;
|
|
const QString _prefix;
|
|
const IrcMessageType _type;
|
|
static std::unordered_map<QString, QString> 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
|