aboutsummaryrefslogtreecommitdiff
path: root/lib/events/stateevent.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/events/stateevent.h')
-rw-r--r--lib/events/stateevent.h158
1 files changed, 83 insertions, 75 deletions
diff --git a/lib/events/stateevent.h b/lib/events/stateevent.h
index 3f54f7bf..1a02646b 100644
--- a/lib/events/stateevent.h
+++ b/lib/events/stateevent.h
@@ -1,119 +1,127 @@
/******************************************************************************
-* Copyright (C) 2018 Kitsune Ral <kitsune-ral@users.sf.net>
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2.1 of the License, or (at your option) any later version.
-*
-* This library 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
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-*/
+ * Copyright (C) 2018 Kitsune Ral <kitsune-ral@users.sf.net>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
#pragma once
#include "roomevent.h"
namespace QMatrixClient {
- class StateEventBase: public RoomEvent
+ class StateEventBase : public RoomEvent
{
public:
- using factory_t = EventFactory<StateEventBase>;
+ using factory_t = EventFactory<StateEventBase>;
- using RoomEvent::RoomEvent;
- ~StateEventBase() override = default;
+ using RoomEvent::RoomEvent;
+ ~StateEventBase() override = default;
- bool isStateEvent() const override { return true; }
- QString replacedState() const;
- void dumpTo(QDebug dbg) const override;
+ bool isStateEvent() const override { return true; }
+ QString replacedState() const;
+ void dumpTo(QDebug dbg) const override;
- virtual bool repeatsState() const;
+ virtual bool repeatsState() const;
};
using StateEventPtr = event_ptr_tt<StateEventBase>;
using StateEvents = EventsArray<StateEventBase>;
- template <>
- inline bool is<StateEventBase>(const Event& e) { return e.isStateEvent(); }
+ template <> inline bool is<StateEventBase>(const Event& e)
+ {
+ return e.isStateEvent();
+ }
/**
* A combination of event type and state key uniquely identifies a piece
* of state in Matrix.
- * \sa https://matrix.org/docs/spec/client_server/unstable.html#types-of-room-events
+ * \sa
+ * https://matrix.org/docs/spec/client_server/unstable.html#types-of-room-events
*/
using StateEventKey = QPair<QString, QString>;
- template <typename ContentT>
- struct Prev
- {
+ template <typename ContentT> struct Prev {
template <typename... ContentParamTs>
explicit Prev(const QJsonObject& unsignedJson,
ContentParamTs&&... contentParams)
- : senderId(unsignedJson.value("prev_sender"_ls).toString())
- , content(unsignedJson.value(PrevContentKeyL).toObject(),
- std::forward<ContentParamTs>(contentParams)...)
- { }
+ : senderId(unsignedJson.value("prev_sender"_ls).toString()),
+ content(unsignedJson.value(PrevContentKeyL).toObject(),
+ std::forward<ContentParamTs>(contentParams)...)
+ {
+ }
QString senderId;
ContentT content;
};
- template <typename ContentT>
- class StateEvent: public StateEventBase
+ template <typename ContentT> class StateEvent : public StateEventBase
{
public:
- using content_type = ContentT;
+ using content_type = ContentT;
- template <typename... ContentParamTs>
- explicit StateEvent(Type type, const QJsonObject& fullJson,
- ContentParamTs&&... contentParams)
- : StateEventBase(type, fullJson)
- , _content(contentJson(),
- std::forward<ContentParamTs>(contentParams)...)
- {
- const auto& unsignedData = unsignedJson();
- if (unsignedData.contains(PrevContentKeyL))
- _prev = std::make_unique<Prev<ContentT>>(unsignedData,
- std::forward<ContentParamTs>(contentParams)...);
- }
- template <typename... ContentParamTs>
- explicit StateEvent(Type type, event_mtype_t matrixType,
- ContentParamTs&&... contentParams)
- : StateEventBase(type, matrixType)
- , _content(std::forward<ContentParamTs>(contentParams)...)
- {
- editJson().insert(ContentKey, _content.toJson());
- }
+ template <typename... ContentParamTs>
+ explicit StateEvent(Type type, const QJsonObject& fullJson,
+ ContentParamTs&&... contentParams)
+ : StateEventBase(type, fullJson),
+ _content(contentJson(),
+ std::forward<ContentParamTs>(contentParams)...)
+ {
+ const auto& unsignedData = unsignedJson();
+ if (unsignedData.contains(PrevContentKeyL))
+ _prev = std::make_unique<Prev<ContentT>>(
+ unsignedData,
+ std::forward<ContentParamTs>(contentParams)...);
+ }
+ template <typename... ContentParamTs>
+ explicit StateEvent(Type type, event_mtype_t matrixType,
+ ContentParamTs&&... contentParams)
+ : StateEventBase(type, matrixType),
+ _content(std::forward<ContentParamTs>(contentParams)...)
+ {
+ editJson().insert(ContentKey, _content.toJson());
+ }
- const ContentT& content() const { return _content; }
- template <typename VisitorT>
- void editContent(VisitorT&& visitor)
- {
- visitor(_content);
- editJson()[ContentKeyL] = _content.toJson();
- }
- [[deprecated("Use prevContent instead")]]
- const ContentT* prev_content() const { return prevContent(); }
- const ContentT* prevContent() const
- { return _prev ? &_prev->content : nullptr; }
- QString prevSenderId() const
- { return _prev ? _prev->senderId : QString(); }
+ const ContentT& content() const { return _content; }
+ template <typename VisitorT> void editContent(VisitorT&& visitor)
+ {
+ visitor(_content);
+ editJson()[ContentKeyL] = _content.toJson();
+ }
+ [[deprecated("Use prevContent instead")]] const ContentT*
+ prev_content() const
+ {
+ return prevContent();
+ }
+ const ContentT* prevContent() const
+ {
+ return _prev ? &_prev->content : nullptr;
+ }
+ QString prevSenderId() const
+ {
+ return _prev ? _prev->senderId : QString();
+ }
private:
- ContentT _content;
- std::unique_ptr<Prev<ContentT>> _prev;
+ ContentT _content;
+ std::unique_ptr<Prev<ContentT>> _prev;
};
} // namespace QMatrixClient
namespace std {
- template <> struct hash<QMatrixClient::StateEventKey>
- {
- size_t operator()(const QMatrixClient::StateEventKey& k) const Q_DECL_NOEXCEPT
+ template <> struct hash<QMatrixClient::StateEventKey> {
+ size_t
+ operator()(const QMatrixClient::StateEventKey& k) const Q_DECL_NOEXCEPT
{
return qHash(k);
}