forked from mirror/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