aboutsummaryrefslogtreecommitdiff
path: root/lib/room.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/room.cpp')
-rw-r--r--lib/room.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/lib/room.cpp b/lib/room.cpp
index f8f195e1..2ec5a591 100644
--- a/lib/room.cpp
+++ b/lib/room.cpp
@@ -26,7 +26,7 @@
#include "jobs/generated/redaction.h"
#include "jobs/generated/account-data.h"
#include "jobs/generated/message_pagination.h"
-#include "jobs/setroomstatejob.h"
+#include "jobs/generated/room_state.h"
#include "events/simplestateevents.h"
#include "events/roomavatarevent.h"
#include "events/roommemberevent.h"
@@ -199,6 +199,20 @@ class Room::Private
void markMessagesAsRead(rev_iter_t upToMarker);
+ template <typename EvT>
+ auto requestSetState(const QString& stateKey, const EvT& event)
+ {
+ return connection->callApi<SetRoomStateWithKeyJob>(
+ id, EvT::typeId(), stateKey, event.toJson());
+ }
+
+ template <typename EvT>
+ auto requestSetState(const EvT& event)
+ {
+ return connection->callApi<SetRoomStateJob>(
+ id, EvT::typeId(), event.toJson());
+ }
+
/**
* @brief Apply redaction to the timeline
*
@@ -1110,19 +1124,17 @@ void Room::postMessage(const RoomMessageEvent& event)
void Room::setName(const QString& newName)
{
- connection()->callApi<SetRoomStateJob>(id(), RoomNameEvent(newName));
+ d->requestSetState(RoomNameEvent(newName));
}
void Room::setCanonicalAlias(const QString& newAlias)
{
- connection()->callApi<SetRoomStateJob>(id(),
- RoomCanonicalAliasEvent(newAlias));
+ d->requestSetState(RoomCanonicalAliasEvent(newAlias));
}
void Room::setTopic(const QString& newTopic)
{
- RoomTopicEvent evt(newTopic);
- connection()->callApi<SetRoomStateJob>(id(), evt);
+ d->requestSetState(RoomTopicEvent(newTopic));
}
void Room::getPreviousContent(int limit)
@@ -1153,6 +1165,11 @@ LeaveRoomJob* Room::leaveRoom()
return connection()->callApi<LeaveRoomJob>(id());
}
+SetRoomStateWithKeyJob*Room::setMemberState(const QString& memberId, const RoomMemberEvent& event) const
+{
+ return d->requestSetState(memberId, event);
+}
+
void Room::kickMember(const QString& memberId, const QString& reason)
{
connection()->callApi<KickJob>(id(), memberId, reason);