mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-17 23:18:27 +02:00
Implement MSC3987: Push actions clean-up
This commit is contained in:
@@ -80,8 +80,15 @@
|
|||||||
// Check whether an override rule has been defined with the roomm id as rule id.
|
// Check whether an override rule has been defined with the roomm id as rule id.
|
||||||
// This kind of rule is created to mute the room
|
// This kind of rule is created to mute the room
|
||||||
MXPushRule* rule = [self getOverrideRoomPushRule];
|
MXPushRule* rule = [self getOverrideRoomPushRule];
|
||||||
if (rule)
|
if (rule && rule.enabled)
|
||||||
{
|
{
|
||||||
|
// Support for MSC3987: The dont_notify push rule action is deprecated.
|
||||||
|
if (rule.actions.count == 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Support deprecated dont_notify push rule action for compatibility purposes.
|
||||||
for (MXPushRuleAction *ruleAction in rule.actions)
|
for (MXPushRuleAction *ruleAction in rule.actions)
|
||||||
{
|
{
|
||||||
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
|
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
|
||||||
@@ -98,7 +105,7 @@
|
|||||||
|
|
||||||
if (key && pattern && [key isEqualToString:@"room_id"] && [pattern isEqualToString:self.roomId])
|
if (key && pattern && [key isEqualToString:@"room_id"] && [pattern isEqualToString:self.roomId])
|
||||||
{
|
{
|
||||||
return rule.enabled;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,13 +120,20 @@
|
|||||||
{
|
{
|
||||||
// Check push rules at room level
|
// Check push rules at room level
|
||||||
MXPushRule *rule = [self getRoomPushRule];
|
MXPushRule *rule = [self getRoomPushRule];
|
||||||
if (rule)
|
if (rule && rule.enabled)
|
||||||
{
|
{
|
||||||
|
// Support for MSC3987: The dont_notify push rule action is deprecated.
|
||||||
|
if (rule.actions.count == 0)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Support deprecated dont_notify push rule action for compatibility purposes.
|
||||||
for (MXPushRuleAction *ruleAction in rule.actions)
|
for (MXPushRuleAction *ruleAction in rule.actions)
|
||||||
{
|
{
|
||||||
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
|
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
|
||||||
{
|
{
|
||||||
return rule.enabled;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -178,12 +192,21 @@
|
|||||||
// check if the user did not define one
|
// check if the user did not define one
|
||||||
BOOL hasDontNotifyRule = NO;
|
BOOL hasDontNotifyRule = NO;
|
||||||
|
|
||||||
for (MXPushRuleAction *ruleAction in rule.actions)
|
// Support for MSC3987: The dont_notify push rule action is deprecated.
|
||||||
|
if (rule.actions.count == 0)
|
||||||
{
|
{
|
||||||
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
|
hasDontNotifyRule = YES;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Support deprecated dont_notify push rule action for compatibility purposes.
|
||||||
|
for (MXPushRuleAction *ruleAction in rule.actions)
|
||||||
{
|
{
|
||||||
hasDontNotifyRule = YES;
|
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
|
||||||
break;
|
{
|
||||||
|
hasDontNotifyRule = YES;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,12 +279,21 @@
|
|||||||
// check if the user did not define one
|
// check if the user did not define one
|
||||||
BOOL hasDontNotifyRule = NO;
|
BOOL hasDontNotifyRule = NO;
|
||||||
|
|
||||||
for (MXPushRuleAction *ruleAction in rule.actions)
|
// Support for MSC3987: The dont_notify push rule action is deprecated.
|
||||||
|
if (rule.actions.count == 0)
|
||||||
{
|
{
|
||||||
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
|
hasDontNotifyRule = YES;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Support deprecated dont_notify push rule action for compatibility purposes.
|
||||||
|
for (MXPushRuleAction *ruleAction in rule.actions)
|
||||||
{
|
{
|
||||||
hasDontNotifyRule = YES;
|
if (ruleAction.actionType == MXPushRuleActionTypeDontNotify)
|
||||||
break;
|
{
|
||||||
|
hasDontNotifyRule = YES;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -888,6 +888,7 @@ class NotificationService: UNNotificationServiceExtension {
|
|||||||
private extension MXPushRule {
|
private extension MXPushRule {
|
||||||
var dontNotify: Bool {
|
var dontNotify: Bool {
|
||||||
let actions = (actions as? [MXPushRuleAction]) ?? []
|
let actions = (actions as? [MXPushRuleAction]) ?? []
|
||||||
return actions.contains { $0.actionType == MXPushRuleActionTypeDontNotify }
|
// Support for MSC3987: The dont_notify push rule action is deprecated and replaced by an empty actions list.
|
||||||
|
return actions.isEmpty || actions.contains { $0.actionType == MXPushRuleActionTypeDontNotify }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ final class MXRoomNotificationSettingsService: RoomNotificationSettingsServiceTy
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if the user defined one, use it
|
// if the user defined one, use it
|
||||||
if rule.actionsContains(actionType: MXPushRuleActionTypeDontNotify) {
|
if rule.dontNotify {
|
||||||
enablePushRule(rule: rule, completion: completion)
|
enablePushRule(rule: rule, completion: completion)
|
||||||
} else {
|
} else {
|
||||||
removePushRule(rule: rule) {
|
removePushRule(rule: rule) {
|
||||||
@@ -136,7 +136,7 @@ final class MXRoomNotificationSettingsService: RoomNotificationSettingsServiceTy
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if the user defined one, use it
|
// if the user defined one, use it
|
||||||
if rule.actionsContains(actionType: MXPushRuleActionTypeDontNotify) {
|
if rule.dontNotify {
|
||||||
enablePushRule(rule: rule, completion: completion)
|
enablePushRule(rule: rule, completion: completion)
|
||||||
} else {
|
} else {
|
||||||
removePushRule(rule: rule) {
|
removePushRule(rule: rule) {
|
||||||
@@ -261,7 +261,7 @@ public extension MXRoom {
|
|||||||
// Check whether an override rule has been defined with the roomm id as rule id.
|
// Check whether an override rule has been defined with the roomm id as rule id.
|
||||||
// This kind of rule is created to mute the room
|
// This kind of rule is created to mute the room
|
||||||
guard let rule = overridePushRule,
|
guard let rule = overridePushRule,
|
||||||
rule.actionsContains(actionType: MXPushRuleActionTypeDontNotify),
|
rule.dontNotify,
|
||||||
rule.conditionIsEnabled(kind: .eventMatch, for: roomId) else {
|
rule.conditionIsEnabled(kind: .eventMatch, for: roomId) else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -271,7 +271,7 @@ public extension MXRoom {
|
|||||||
var isMentionsOnly: Bool {
|
var isMentionsOnly: Bool {
|
||||||
// Check push rules at room level
|
// Check push rules at room level
|
||||||
guard let rule = roomPushRule else { return false }
|
guard let rule = roomPushRule else { return false }
|
||||||
return rule.enabled && rule.actionsContains(actionType: MXPushRuleActionTypeDontNotify)
|
return rule.enabled && rule.dontNotify
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,10 @@ extension MXPushRule: NotificationPushRuleType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var dontNotify: Bool {
|
var dontNotify: Bool {
|
||||||
getAction(actionType: MXPushRuleActionTypeDontNotify) != nil
|
guard let actions = actions as? [MXPushRuleAction] else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// Support for MSC3987: The dont_notify push rule action is deprecated and replaced by an empty actions list.
|
||||||
|
return actions.isEmpty || getAction(actionType: MXPushRuleActionTypeDontNotify) != nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
changelog.d/7576.change
Normal file
1
changelog.d/7576.change
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MSC3987 implementation: the 'dont_notify' action for a push_rule is now deprecated and replaced by an empty action list.
|
||||||
Reference in New Issue
Block a user