aboutsummaryrefslogtreecommitdiff
path: root/lib/events/roommemberevent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/events/roommemberevent.cpp')
-rw-r--r--lib/events/roommemberevent.cpp83
1 files changed, 53 insertions, 30 deletions
diff --git a/lib/events/roommemberevent.cpp b/lib/events/roommemberevent.cpp
index 6da76526..3193a54d 100644
--- a/lib/events/roommemberevent.cpp
+++ b/lib/events/roommemberevent.cpp
@@ -13,7 +13,7 @@
*
* 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
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "roommemberevent.h"
@@ -23,68 +23,91 @@
#include <array>
-static const std::array<QString, 5> membershipStrings = { {
- QStringLiteral("invite"), QStringLiteral("join"),
- QStringLiteral("knock"), QStringLiteral("leave"),
- QStringLiteral("ban")
-} };
+static const std::array<QString, 5> membershipStrings = {
+ { QStringLiteral("invite"), QStringLiteral("join"), QStringLiteral("knock"),
+ QStringLiteral("leave"), QStringLiteral("ban") }
+};
-namespace QMatrixClient {
- template <>
- struct JsonConverter<MembershipType>
+namespace Quotient {
+template <>
+struct JsonConverter<MembershipType> {
+ static MembershipType load(const QJsonValue& jv)
{
- static MembershipType load(const QJsonValue& jv)
- {
- const auto& membershipString = jv.toString();
- for (auto it = membershipStrings.begin();
- it != membershipStrings.end(); ++it)
- if (membershipString == *it)
- return MembershipType(it - membershipStrings.begin());
+ const auto& membershipString = jv.toString();
+ for (auto it = membershipStrings.begin(); it != membershipStrings.end();
+ ++it)
+ if (membershipString == *it)
+ return MembershipType(it - membershipStrings.begin());
+ if (!membershipString.isEmpty())
qCWarning(EVENTS) << "Unknown MembershipType: " << membershipString;
- return MembershipType::Undefined;
- }
- };
-}
+ return MembershipType::Undefined;
+ }
+};
+} // namespace Quotient
-using namespace QMatrixClient;
+using namespace Quotient;
MemberEventContent::MemberEventContent(const QJsonObject& json)
: membership(fromJson<MembershipType>(json["membership"_ls]))
, isDirect(json["is_direct"_ls].toBool())
, displayName(sanitized(json["displayname"_ls].toString()))
, avatarUrl(json["avatar_url"_ls].toString())
-{ }
+ , reason(json["reason"_ls].toString())
+{}
void MemberEventContent::fillJson(QJsonObject* o) const
{
Q_ASSERT(o);
Q_ASSERT_X(membership != MembershipType::Undefined, __FUNCTION__,
- "The key 'membership' must be explicit in MemberEventContent");
+ "The key 'membership' must be explicit in MemberEventContent");
if (membership != MembershipType::Undefined)
o->insert(QStringLiteral("membership"), membershipStrings[membership]);
o->insert(QStringLiteral("displayname"), displayName);
if (avatarUrl.isValid())
o->insert(QStringLiteral("avatar_url"), avatarUrl.toString());
+ if (!reason.isEmpty())
+ o->insert(QStringLiteral("reason"), reason);
+}
+
+bool RoomMemberEvent::changesMembership() const
+{
+ return !prevContent() || prevContent()->membership != membership();
}
bool RoomMemberEvent::isInvite() const
{
- return membership() == MembershipType::Invite &&
- (!prevContent() || prevContent()->membership != membership());
+ return membership() == MembershipType::Invite && changesMembership();
+}
+
+bool RoomMemberEvent::isRejectedInvite() const
+{
+ return membership() == MembershipType::Leave && prevContent()
+ && prevContent()->membership == MembershipType::Invite;
}
bool RoomMemberEvent::isJoin() const
{
- return membership() == MembershipType::Join &&
- (!prevContent() || prevContent()->membership != membership());
+ return membership() == MembershipType::Join && changesMembership();
}
bool RoomMemberEvent::isLeave() const
{
- return membership() == MembershipType::Leave &&
- prevContent() && prevContent()->membership != membership() &&
- prevContent()->membership != MembershipType::Ban;
+ return membership() == MembershipType::Leave && prevContent()
+ && prevContent()->membership != membership()
+ && prevContent()->membership != MembershipType::Ban
+ && prevContent()->membership != MembershipType::Invite;
+}
+
+bool RoomMemberEvent::isBan() const
+{
+ return membership() == MembershipType::Ban && changesMembership();
+}
+
+bool RoomMemberEvent::isUnban() const
+{
+ return membership() == MembershipType::Leave && prevContent()
+ && prevContent()->membership == MembershipType::Ban;
}
bool RoomMemberEvent::isRename() const