mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-25 20:48:52 +03:00
Support rendering policy rules
This commit is contained in:
parent
14c7e82846
commit
11fa4821aa
6 changed files with 126 additions and 2 deletions
|
@ -581,7 +581,7 @@ if(USE_BUNDLED_MTXCLIENT)
|
|||
FetchContent_Declare(
|
||||
MatrixClient
|
||||
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
|
||||
GIT_TAG 842e10c4ae36aba23a20849e766f0c54b19fd4b6
|
||||
GIT_TAG 6f908f379c6d7afb6117baee3a59c6f5e3adfdda
|
||||
)
|
||||
set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "")
|
||||
set(BUILD_LIB_TESTS OFF CACHE INTERNAL "")
|
||||
|
|
|
@ -203,7 +203,7 @@ modules:
|
|||
buildsystem: cmake-ninja
|
||||
name: mtxclient
|
||||
sources:
|
||||
- commit: 842e10c4ae36aba23a20849e766f0c54b19fd4b6
|
||||
- commit: 6f908f379c6d7afb6117baee3a59c6f5e3adfdda
|
||||
#tag: v0.7.0
|
||||
type: git
|
||||
url: https://github.com/Nheko-Reborn/mtxclient.git
|
||||
|
|
|
@ -420,6 +420,48 @@ Item {
|
|||
|
||||
}
|
||||
|
||||
DelegateChoice {
|
||||
roleValue: MtxEvent.PolicyRuleUser
|
||||
|
||||
NoticeMessage {
|
||||
body: formatted
|
||||
isOnlyEmoji: false
|
||||
isReply: d.isReply
|
||||
keepFullText: d.keepFullText
|
||||
isStateEvent: d.isStateEvent
|
||||
formatted: d.relatedEventCacheBuster, room.formatPolicyRule(d.eventId)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DelegateChoice {
|
||||
roleValue: MtxEvent.PolicyRuleRoom
|
||||
|
||||
NoticeMessage {
|
||||
body: formatted
|
||||
isOnlyEmoji: false
|
||||
isReply: d.isReply
|
||||
keepFullText: d.keepFullText
|
||||
isStateEvent: d.isStateEvent
|
||||
formatted: d.relatedEventCacheBuster, room.formatPolicyRule(d.eventId)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DelegateChoice {
|
||||
roleValue: MtxEvent.PolicyRuleServer
|
||||
|
||||
NoticeMessage {
|
||||
body: formatted
|
||||
isOnlyEmoji: false
|
||||
isReply: d.isReply
|
||||
keepFullText: d.keepFullText
|
||||
isStateEvent: d.isStateEvent
|
||||
formatted: d.relatedEventCacheBuster, room.formatPolicyRule(d.eventId)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DelegateChoice {
|
||||
roleValue: MtxEvent.RoomJoinRules
|
||||
|
||||
|
|
|
@ -198,6 +198,13 @@ PowerlevelsTypeListModel::data(const QModelIndex &index, int role) const
|
|||
else if (type.type == "m.sticker")
|
||||
return tr("Send stickers");
|
||||
|
||||
else if (type.type == "m.policy.rule.user")
|
||||
return tr("Ban users using policy rules");
|
||||
else if (type.type == "m.policy.rule.room")
|
||||
return tr("Ban rooms using policy rules");
|
||||
else if (type.type == "m.policy.rule.server")
|
||||
return tr("Ban servers using policy rules");
|
||||
|
||||
else if (type.type == "m.space.child")
|
||||
return tr("Edit child rooms");
|
||||
else if (type.type == "m.space.parent")
|
||||
|
|
|
@ -190,6 +190,12 @@ qml_mtx_events::toRoomEventType(mtx::events::EventType e)
|
|||
return qml_mtx_events::EventType::Sticker;
|
||||
case EventType::Tag:
|
||||
return qml_mtx_events::EventType::Tag;
|
||||
case EventType::PolicyRuleUser:
|
||||
return qml_mtx_events::EventType::PolicyRuleUser;
|
||||
case EventType::PolicyRuleRoom:
|
||||
return qml_mtx_events::EventType::PolicyRuleRoom;
|
||||
case EventType::PolicyRuleServer:
|
||||
return qml_mtx_events::EventType::PolicyRuleServer;
|
||||
case EventType::SpaceParent:
|
||||
return qml_mtx_events::EventType::SpaceParent;
|
||||
case EventType::SpaceChild:
|
||||
|
@ -303,6 +309,12 @@ qml_mtx_events::fromRoomEventType(qml_mtx_events::EventType t)
|
|||
// m.tag
|
||||
case qml_mtx_events::Tag:
|
||||
return mtx::events::EventType::Tag;
|
||||
case qml_mtx_events::PolicyRuleUser:
|
||||
return mtx::events::EventType::PolicyRuleUser;
|
||||
case qml_mtx_events::PolicyRuleRoom:
|
||||
return mtx::events::EventType::PolicyRuleRoom;
|
||||
case qml_mtx_events::PolicyRuleServer:
|
||||
return mtx::events::EventType::PolicyRuleServer;
|
||||
// m.space.parent
|
||||
case qml_mtx_events::SpaceParent:
|
||||
return mtx::events::EventType::SpaceParent;
|
||||
|
@ -2329,6 +2341,62 @@ TimelineModel::formatImagePackEvent(const QString &id)
|
|||
return msg;
|
||||
}
|
||||
|
||||
QString
|
||||
TimelineModel::formatPolicyRule(const QString &id)
|
||||
{
|
||||
mtx::events::collections::TimelineEvents *e = events.get(id.toStdString(), "");
|
||||
if (!e)
|
||||
return {};
|
||||
|
||||
auto qsHtml = [](const std::string &s) { return QString::fromStdString(s).toHtmlEscaped(); };
|
||||
constexpr std::string_view unstable_ban = "org.matrix.mjolnir.ban";
|
||||
|
||||
if (auto userRule =
|
||||
std::get_if<mtx::events::StateEvent<mtx::events::state::policy_rule::UserRule>>(e)) {
|
||||
auto sender = utils::replaceEmoji(displayName(QString::fromStdString(userRule->sender)));
|
||||
if (userRule->content.entity.empty() ||
|
||||
(userRule->content.recommendation !=
|
||||
mtx::events::state::policy_rule::recommendation::ban &&
|
||||
userRule->content.recommendation != unstable_ban)) {
|
||||
return tr("%1 disabled the rule to ban users matching %2.")
|
||||
.arg(sender, qsHtml(userRule->content.entity));
|
||||
} else {
|
||||
return tr("%1 added a rule to ban users matching %2 for '%3'.")
|
||||
.arg(sender, qsHtml(userRule->content.entity), qsHtml(userRule->content.reason));
|
||||
}
|
||||
} else if (auto roomRule =
|
||||
std::get_if<mtx::events::StateEvent<mtx::events::state::policy_rule::RoomRule>>(
|
||||
e)) {
|
||||
auto sender = utils::replaceEmoji(displayName(QString::fromStdString(roomRule->sender)));
|
||||
if (roomRule->content.entity.empty() ||
|
||||
(roomRule->content.recommendation !=
|
||||
mtx::events::state::policy_rule::recommendation::ban &&
|
||||
roomRule->content.recommendation != unstable_ban)) {
|
||||
return tr("%1 disabled the rule to ban rooms matching %2.")
|
||||
.arg(sender, qsHtml(roomRule->content.entity));
|
||||
} else {
|
||||
return tr("%1 added a rule to ban rooms matching %2 for '%3'.")
|
||||
.arg(sender, qsHtml(roomRule->content.entity), qsHtml(roomRule->content.reason));
|
||||
}
|
||||
} else if (auto serverRule =
|
||||
std::get_if<mtx::events::StateEvent<mtx::events::state::policy_rule::ServerRule>>(
|
||||
e)) {
|
||||
auto sender = utils::replaceEmoji(displayName(QString::fromStdString(serverRule->sender)));
|
||||
if (serverRule->content.entity.empty() ||
|
||||
(serverRule->content.recommendation !=
|
||||
mtx::events::state::policy_rule::recommendation::ban &&
|
||||
serverRule->content.recommendation != unstable_ban)) {
|
||||
return tr("%1 disabled the rule to ban servers matching %2.")
|
||||
.arg(sender, qsHtml(serverRule->content.entity));
|
||||
} else {
|
||||
return tr("%1 added a rule to ban servers matching %2 for '%3'.")
|
||||
.arg(sender, qsHtml(serverRule->content.entity), qsHtml(serverRule->content.reason));
|
||||
}
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
QVariantMap
|
||||
TimelineModel::formatRedactedEvent(const QString &id)
|
||||
{
|
||||
|
|
|
@ -116,6 +116,12 @@ enum EventType
|
|||
ImagePackInAccountData,
|
||||
//! m.image_pack.rooms, currently im.ponies.emote_rooms
|
||||
ImagePackRooms,
|
||||
// m.policy.rule.user
|
||||
PolicyRuleUser,
|
||||
// m.policy.rule.room
|
||||
PolicyRuleRoom,
|
||||
// m.policy.rule.server
|
||||
PolicyRuleServer,
|
||||
// m.space.parent
|
||||
SpaceParent,
|
||||
// m.space.child
|
||||
|
@ -264,6 +270,7 @@ public:
|
|||
Q_INVOKABLE QString formatGuestAccessEvent(const QString &id);
|
||||
Q_INVOKABLE QString formatPowerLevelEvent(const QString &id);
|
||||
Q_INVOKABLE QString formatImagePackEvent(const QString &id);
|
||||
Q_INVOKABLE QString formatPolicyRule(const QString &id);
|
||||
Q_INVOKABLE QVariantMap formatRedactedEvent(const QString &id);
|
||||
|
||||
Q_INVOKABLE void viewRawMessage(const QString &id);
|
||||
|
|
Loading…
Reference in a new issue