summary refs log tree commit diff
path: root/src/EventAccessors.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/EventAccessors.cpp')
-rw-r--r--src/EventAccessors.cpp86
1 files changed, 84 insertions, 2 deletions
diff --git a/src/EventAccessors.cpp b/src/EventAccessors.cpp

index a8ba9e22..8cb09a1d 100644 --- a/src/EventAccessors.cpp +++ b/src/EventAccessors.cpp
@@ -11,6 +11,7 @@ #include <type_traits> namespace { + struct IsStateEvent { template<class T> @@ -38,6 +39,15 @@ struct EventMsgType } }; +struct EventType +{ + template<class T> + mtx::events::EventType operator()(const mtx::events::Event<T> &e) + { + return e.type; + } +}; + struct CallType { template<class T> @@ -313,8 +323,13 @@ mtx::accessors::sender(const mtx::events::collections::TimelineEvents &event) QDateTime mtx::accessors::origin_server_ts(const mtx::events::collections::TimelineEvents &event) { - return QDateTime::fromMSecsSinceEpoch( - std::visit([](const auto &e) { return e.origin_server_ts; }, event)); + return QDateTime::fromMSecsSinceEpoch(origin_server_ts_ms(event)); +} + +std::uint64_t +mtx::accessors::origin_server_ts_ms(const mtx::events::collections::TimelineEvents &event) +{ + return std::visit([](const auto &e) { return e.origin_server_ts; }, event); } std::string @@ -323,6 +338,11 @@ mtx::accessors::filename(const mtx::events::collections::TimelineEvents &event) return std::visit(EventFilename{}, event); } +mtx::events::EventType +mtx::accessors::event_type(const mtx::events::collections::TimelineEvents &event) +{ + return std::visit(EventType{}, event); +} mtx::events::MessageType mtx::accessors::msg_type(const mtx::events::collections::TimelineEvents &event) { @@ -464,7 +484,69 @@ mtx::accessors::serialize_event(const mtx::events::collections::TimelineEvents & } bool +mtx::accessors::is_state_event(const mtx::events::collections::StateEvents &event) +{ + return std::visit(IsStateEvent{}, event); +} + +bool mtx::accessors::is_state_event(const mtx::events::collections::TimelineEvents &event) { return std::visit(IsStateEvent{}, event); } + +template<typename T> +static constexpr auto +isMessage(const mtx::events::RoomEvent<T> &e) + -> std::enable_if_t<std::is_same<decltype(e.content.msgtype), std::string>::value, bool> +{ + return true; +} + +template<typename T> +static constexpr auto +isMessage(const mtx::events::Event<T> &) +{ + return false; +} + +template<typename T> +static constexpr auto +isMessage(const mtx::events::EncryptedEvent<T> &) +{ + return true; +} + +static constexpr auto +isMessage(const mtx::events::RoomEvent<mtx::events::voip::CallInvite> &) +{ + return true; +} + +static constexpr auto +isMessage(const mtx::events::RoomEvent<mtx::events::voip::CallAnswer> &) +{ + return true; +} +static constexpr auto +isMessage(const mtx::events::RoomEvent<mtx::events::voip::CallHangUp> &) +{ + return true; +} + +static constexpr auto +isMessage(const mtx::events::RoomEvent<mtx::events::voip::CallReject> &) +{ + return true; +} +static constexpr auto +isMessage(const mtx::events::RoomEvent<mtx::events::voip::CallSelectAnswer> &) +{ + return true; +} + +bool +mtx::accessors::is_message(const mtx::events::collections::TimelineEvents &event) +{ + return std::visit([](const auto &e) { return isMessage(e); }, event); +}