aboutsummaryrefslogtreecommitdiff
path: root/lib/events/roompowerlevelsevent.cpp
blob: 072f7a953fc38c6b804987a31997d560b39dbf2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "roompowerlevelsevent.h"

#include <QJsonDocument>

using namespace Quotient;

inline QHash<QString, int> qVariantHashToQHash(const QVariantHash& vHash) {
    QHash<QString, int> hash;

    QVariantHash::const_iterator i = vHash.constBegin();

    while (i != vHash.constEnd()) {
        hash.insert(i.key(), i.value().toInt());
        ++i;
    }

    return hash;
}

inline QJsonObject qHashToJson(const QHash<QString, int>& hash) {
    QJsonObject json;

    QHash<QString, int>::const_iterator i = hash.constBegin();

    while (i != hash.constEnd()) {
        json.insert(i.key(), i.value());
        ++i;
    }

    return json;
}

PowerLevelsEventContent::PowerLevelsEventContent(const QJsonObject& json) :
    invite(json["invite"_ls].toInt(50)),
    kick(json["kick"_ls].toInt(50)),
    ban(json["ban"_ls].toInt(50)),
    redact(json["redact"_ls].toInt(50)),
    events(qVariantHashToQHash(json["events"_ls].toVariant().toHash())),
    eventsDefault(json["events_default"_ls].toInt(0)),
    stateDefault(json["state_default"_ls].toInt(0)),
    users(qVariantHashToQHash(json["users"_ls].toVariant().toHash())),
    usersDefault(json["users_default"_ls].toInt(0)),
    notifications(Notifications{json["notifications"_ls]["room"_ls].toInt(50)})
{
}

void PowerLevelsEventContent::fillJson(QJsonObject* o) const {
    o->insert(QStringLiteral("invite"), invite);
    o->insert(QStringLiteral("kick"), kick);
    o->insert(QStringLiteral("ban"), ban);
    o->insert(QStringLiteral("redact"), redact);
    o->insert(QStringLiteral("events"), qHashToJson(events));
    o->insert(QStringLiteral("events_default"), eventsDefault);
    o->insert(QStringLiteral("state_default"), stateDefault);
    o->insert(QStringLiteral("users"), qHashToJson(users));
    o->insert(QStringLiteral("users_default"), usersDefault);
    o->insert(QStringLiteral("notifications"), QJsonObject{{"room", notifications.room}});
}

int RoomPowerLevelsEvent::powerLevelForEvent(const QString &eventId) {
    auto e = events();

    if (e.contains(eventId)) {
        return e[eventId];
    }

    return eventsDefault();
}

int RoomPowerLevelsEvent::powerLevelForUser(const QString &userId) {
    auto u = users();

    if (u.contains(userId)) {
        return u[userId];
    }

    return usersDefault();
}