From 4ea76503fbe7674e526b2429accaae46ea17b9e8 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Wed, 3 May 2017 01:55:47 +0300 Subject: Add base Event class --- include/events/Event.h | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 include/events/Event.h (limited to 'include') diff --git a/include/events/Event.h b/include/events/Event.h new file mode 100644 index 00000000..25b340bb --- /dev/null +++ b/include/events/Event.h @@ -0,0 +1,89 @@ +/* + * nheko Copyright (C) 2017 Konstantinos Sideris + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef MATRIX_EVENT_H +#define MATRIX_EVENT_H + +#include + +#include "Deserializable.h" + +enum EventType { + /// m.room.aliases + RoomAliases, + /// m.room.avatar + RoomAvatar, + /// m.room.canonical_alias + RoomCanonicalAlias, + /// m.room.create + RoomCreate, + /// m.room.history_visibility + RoomHistoryVisibility, + /// m.room.join_rules + RoomJoinRules, + /// m.room.member + RoomMember, + /// m.room.name + RoomName, + /// m.room.power_levels + RoomPowerLevels, + /// m.room.topic + RoomTopic, + // Unsupported event + Unsupported, +}; + +EventType extractEventType(const QJsonObject &data); + +template +class Event : public Deserializable +{ +public: + inline Content content() const; + inline EventType eventType() const; + + void deserialize(const QJsonValue &data) override; + +private: + Content content_; + EventType type_; +}; + +template +inline Content Event::content() const +{ + return content_; +} + +template +inline EventType Event::eventType() const +{ + return type_; +} + +template +void Event::deserialize(const QJsonValue &data) +{ + if (!data.isObject()) + throw DeserializationException("Event is not a JSON object"); + + auto object = data.toObject(); + + content_.deserialize(object.value("content")); +} + +#endif // MATRIX_EVENT_H -- cgit 1.5.1