aboutsummaryrefslogtreecommitdiff
path: root/lib/events/event.cpp
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2018-05-03 21:23:28 +0900
committerKitsune Ral <Kitsune-Ral@users.sf.net>2018-05-03 22:47:43 +0900
commit564d518c086f2aeab0f0466b7cd1915e20edc7da (patch)
treef7e704855739b80728e51eb8187a932b3df78b73 /lib/events/event.cpp
parentd304c1b9ac7a86096899b459eba8e36ed310b6ce (diff)
downloadlibquotient-564d518c086f2aeab0f0466b7cd1915e20edc7da.tar.gz
libquotient-564d518c086f2aeab0f0466b7cd1915e20edc7da.zip
GetRoomEventsJob (replaces RoomMessagesJob) + refactoring
1. Updates in this commit (see further) allow to generate and build GetRoomEventsJob from message_pagination.yaml; this job completely preempts RoomMessagesJob. 2. EventsBatch<> is no more a thing; there's EventsArray<> to replace it but it's loaded from a JSON array rather than an event batch (a JSON array inside another JSON object). SyncJob that used it extensively has been moved to "conventional" containers (Events, RoomEvents and the newly introduced StateEvents). RoomMessagesJob that also used EventsBatch<> is decommissioned (see above). 3. RoomEventsRange is now an alias for Range<RoomEvents>, defined in util.h (otherwise almost the same). 4. Connection::getMessages() is no more. Use Room::getPreviousContent() and Connection::callApi<GetRooMEventsJob>() instead. 5. Moving things around in Room, since SyncJob now supplies state events in more specific StateEvents, rather than RoomEvents.
Diffstat (limited to 'lib/events/event.cpp')
-rw-r--r--lib/events/event.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/lib/events/event.cpp b/lib/events/event.cpp
index 193250de..57049671 100644
--- a/lib/events/event.cpp
+++ b/lib/events/event.cpp
@@ -160,14 +160,13 @@ void RoomEvent::addId(const QString& id)
template <>
RoomEventPtr _impl::doMakeEvent(const QJsonObject& obj)
{
- return RoomEventPtr { makeIfMatches<RoomEvent,
- RoomMessageEvent, RoomNameEvent, RoomAliasesEvent,
- RoomCanonicalAliasEvent, RoomMemberEvent, RoomTopicEvent,
- RoomAvatarEvent, EncryptionEvent, RedactionEvent>
- (obj, obj["type"].toString()) };
-}
+ // Check more specific event types first
+ if (auto e = doMakeEvent<StateEventBase>(obj))
+ return e;
-StateEventBase::~StateEventBase() = default;
+ return makeIfMatches<RoomEvent,
+ RoomMessageEvent, RedactionEvent>(obj, obj["type"].toString());
+}
bool StateEventBase::repeatsState() const
{
@@ -176,3 +175,13 @@ bool StateEventBase::repeatsState() const
.toObject().value("prev_content");
return contentJson == prevContentJson;
}
+
+template<>
+StateEventPtr _impl::doMakeEvent<StateEventBase>(const QJsonObject& obj)
+{
+ return makeIfMatches<StateEventBase,
+ RoomNameEvent, RoomAliasesEvent,
+ RoomCanonicalAliasEvent, RoomMemberEvent, RoomTopicEvent,
+ RoomAvatarEvent, EncryptionEvent>(obj, obj["type"].toString());
+
+}