mirror of https://github.com/Nheko-Reborn/nheko
parent
b064df8b45
commit
4ea76503fb
@ -0,0 +1,89 @@ |
|||||||
|
/*
|
||||||
|
* nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> |
||||||
|
* |
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#ifndef MATRIX_EVENT_H |
||||||
|
#define MATRIX_EVENT_H |
||||||
|
|
||||||
|
#include <QJsonValue> |
||||||
|
|
||||||
|
#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 Content> |
||||||
|
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 <class Content> |
||||||
|
inline Content Event<Content>::content() const |
||||||
|
{ |
||||||
|
return content_; |
||||||
|
} |
||||||
|
|
||||||
|
template <class Content> |
||||||
|
inline EventType Event<Content>::eventType() const |
||||||
|
{ |
||||||
|
return type_; |
||||||
|
} |
||||||
|
|
||||||
|
template <class Content> |
||||||
|
void Event<Content>::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
|
@ -0,0 +1,61 @@ |
|||||||
|
/*
|
||||||
|
* nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> |
||||||
|
* |
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/ |
||||||
|
|
||||||
|
#include "Event.h" |
||||||
|
|
||||||
|
#include "AliasesEventContent.h" |
||||||
|
#include "AvatarEventContent.h" |
||||||
|
#include "CanonicalAliasEventContent.h" |
||||||
|
#include "CreateEventContent.h" |
||||||
|
#include "Deserializable.h" |
||||||
|
#include "HistoryVisibilityEventContent.h" |
||||||
|
#include "JoinRulesEventContent.h" |
||||||
|
#include "MemberEventContent.h" |
||||||
|
#include "NameEventContent.h" |
||||||
|
#include "PowerLevelsEventContent.h" |
||||||
|
#include "TopicEventContent.h" |
||||||
|
|
||||||
|
EventType extractEventType(const QJsonObject &object) |
||||||
|
{ |
||||||
|
if (!object.contains("type")) |
||||||
|
throw DeserializationException("Missing event type"); |
||||||
|
|
||||||
|
auto type = object.value("type").toString(); |
||||||
|
|
||||||
|
if (type == "m.room.aliases") |
||||||
|
return EventType::RoomAliases; |
||||||
|
else if (type == "m.room.avatar") |
||||||
|
return EventType::RoomAvatar; |
||||||
|
else if (type == "m.room.canonical_alias") |
||||||
|
return EventType::RoomCanonicalAlias; |
||||||
|
else if (type == "m.room.create") |
||||||
|
return EventType::RoomCreate; |
||||||
|
else if (type == "m.room.history_visibility") |
||||||
|
return EventType::RoomHistoryVisibility; |
||||||
|
else if (type == "m.room.join_rules") |
||||||
|
return EventType::RoomJoinRules; |
||||||
|
else if (type == "m.room.member") |
||||||
|
return EventType::RoomMember; |
||||||
|
else if (type == "m.room.name") |
||||||
|
return EventType::RoomName; |
||||||
|
else if (type == "m.room.power_levels") |
||||||
|
return EventType::RoomPowerLevels; |
||||||
|
else if (type == "m.room.topic") |
||||||
|
return EventType::RoomTopic; |
||||||
|
else |
||||||
|
return EventType::Unsupported; |
||||||
|
} |
Loading…
Reference in new issue