Chatterino
FilterRecord.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
8 
9 #include <QRegularExpression>
10 #include <QString>
11 #include <QUuid>
12 #include <pajlada/serialize.hpp>
13 
14 #include <memory>
15 
16 namespace chatterino {
17 
19 {
20 public:
21  bool operator==(const FilterRecord &other) const
22  {
23  return std::tie(this->name_, this->filter_, this->id_) ==
24  std::tie(other.name_, other.filter_, other.id_);
25  }
26 
27  FilterRecord(const QString &name, const QString &filter)
28  : name_(name)
29  , filter_(filter)
30  , id_(QUuid::createUuid())
31  , parser_(std::make_unique<filterparser::FilterParser>(filter))
32  {
33  }
34 
35  FilterRecord(const QString &name, const QString &filter, const QUuid &id)
36  : name_(name)
37  , filter_(filter)
38  , id_(id)
39  , parser_(std::make_unique<filterparser::FilterParser>(filter))
40  {
41  }
42 
43  const QString &getName() const
44  {
45  return this->name_;
46  }
47 
48  const QString &getFilter() const
49  {
50  return this->filter_;
51  }
52 
53  const QUuid &getId() const
54  {
55  return this->id_;
56  }
57 
58  bool valid() const
59  {
60  return this->parser_->valid();
61  }
62 
63  bool filter(const filterparser::ContextMap &context) const
64  {
65  return this->parser_->execute(context);
66  }
67 
68 private:
69  QString name_;
70  QString filter_;
71  QUuid id_;
72 
73  std::unique_ptr<filterparser::FilterParser> parser_;
74 };
75 
76 using FilterRecordPtr = std::shared_ptr<FilterRecord>;
77 
78 } // namespace chatterino
79 
80 namespace pajlada {
81 
82 template <>
83 struct Serialize<chatterino::FilterRecordPtr> {
84  static rapidjson::Value get(const chatterino::FilterRecordPtr &value,
85  rapidjson::Document::AllocatorType &a)
86  {
87  rapidjson::Value ret(rapidjson::kObjectType);
88 
89  chatterino::rj::set(ret, "name", value->getName(), a);
90  chatterino::rj::set(ret, "filter", value->getFilter(), a);
91  chatterino::rj::set(ret, "id",
92  value->getId().toString(QUuid::WithoutBraces), a);
93 
94  return ret;
95  }
96 };
97 
98 template <>
99 struct Deserialize<chatterino::FilterRecordPtr> {
100  static chatterino::FilterRecordPtr get(const rapidjson::Value &value,
101  bool *error = nullptr)
102  {
103  if (!value.IsObject())
104  {
105  PAJLADA_REPORT_ERROR(error)
106  return std::make_shared<chatterino::FilterRecord>(QString(),
107  QString());
108  }
109 
110  QString _name, _filter, _id;
111 
112  chatterino::rj::getSafe(value, "name", _name);
113  chatterino::rj::getSafe(value, "filter", _filter);
114  chatterino::rj::getSafe(value, "id", _id);
115 
116  return std::make_shared<chatterino::FilterRecord>(
117  _name, _filter, QUuid::fromString(_id));
118  }
119 };
120 
121 } // namespace pajlada
bool valid() const
Definition: FilterRecord.hpp:58
const QString & getName() const
Definition: FilterRecord.hpp:43
Definition: FilterParser.cpp:8
bool filter(const filterparser::ContextMap &context) const
Definition: FilterRecord.hpp:63
Definition: SeventvEventAPISubscription.hpp:67
const QUuid & getId() const
Definition: FilterRecord.hpp:53
std::shared_ptr< FilterRecord > FilterRecordPtr
Definition: FilterRecord.hpp:76
Definition: Application.cpp:48
QMap< QString, QVariant > ContextMap
Definition: Types.hpp:10
void set(rapidjson::Value &obj, const char *key, const Type &value, rapidjson::Document::AllocatorType &a)
Definition: RapidjsonHelpers.hpp:22
Definition: Command.hpp:25
bool getSafe(const rapidjson::Value &obj, const char *key, Type &out)
Definition: RapidjsonHelpers.hpp:73
QString name
Definition: Credentials.cpp:94
FilterRecord(const QString &name, const QString &filter)
Definition: FilterRecord.hpp:27
const QString & getFilter() const
Definition: FilterRecord.hpp:48
FilterRecord(const QString &name, const QString &filter, const QUuid &id)
Definition: FilterRecord.hpp:35
Definition: FilterRecord.hpp:18
bool operator==(const FilterRecord &other) const
Definition: FilterRecord.hpp:21