From f719da96ed0ce408241cd4bc98bdc42aa0268208 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 7 Feb 2020 15:02:39 +0100 Subject: [PATCH] Rename Condition.Kind enum values and add some documentation --- .../matrix/android/api/pushrules/Condition.kt | 21 +++++++-------- .../pushrules/ContainsDisplayNameCondition.kt | 2 +- .../api/pushrules/EventMatchCondition.kt | 12 ++++++++- .../api/pushrules/RoomMemberCountCondition.kt | 9 ++++++- .../SenderNotificationPermissionCondition.kt | 10 ++++++- .../api/pushrules/rest/PushCondition.kt | 27 +++++++++++-------- .../database/mapper/PushRulesMapper.kt | 6 ++--- .../room/notification/RoomPushRuleMapper.kt | 2 +- 8 files changed, 59 insertions(+), 30 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/Condition.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/Condition.kt index 0cfb92ed7b..a7b475518c 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/Condition.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/Condition.kt @@ -19,23 +19,22 @@ import im.vector.matrix.android.api.session.events.model.Event abstract class Condition(val kind: Kind) { - // Use @Json? enum class Kind(val value: String) { - event_match("event_match"), - contains_display_name("contains_display_name"), - room_member_count("room_member_count"), - sender_notification_permission("sender_notification_permission"), - UNRECOGNIZE(""); + EventMatch("event_match"), + ContainsDisplayName("contains_display_name"), + RoomMemberCount("room_member_count"), + SenderNotificationPermission("sender_notification_permission"), + Unrecognised(""); companion object { fun fromString(value: String): Kind { return when (value) { - "event_match" -> event_match - "contains_display_name" -> contains_display_name - "room_member_count" -> room_member_count - "sender_notification_permission" -> sender_notification_permission - else -> UNRECOGNIZE + "event_match" -> EventMatch + "contains_display_name" -> ContainsDisplayName + "room_member_count" -> RoomMemberCount + "sender_notification_permission" -> SenderNotificationPermission + else -> Unrecognised } } } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/ContainsDisplayNameCondition.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/ContainsDisplayNameCondition.kt index e34dd070ab..a2613d2859 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/ContainsDisplayNameCondition.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/ContainsDisplayNameCondition.kt @@ -21,7 +21,7 @@ import im.vector.matrix.android.api.session.events.model.toModel import im.vector.matrix.android.api.session.room.model.message.MessageContent import timber.log.Timber -class ContainsDisplayNameCondition : Condition(Kind.contains_display_name) { +class ContainsDisplayNameCondition : Condition(Kind.ContainsDisplayName) { override fun isSatisfied(event: Event, conditionResolver: ConditionResolver): Boolean { return conditionResolver.resolveContainsDisplayNameCondition(event, this) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/EventMatchCondition.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/EventMatchCondition.kt index d72c065e9e..a6d7e48b9d 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/EventMatchCondition.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/EventMatchCondition.kt @@ -19,7 +19,17 @@ import im.vector.matrix.android.api.session.events.model.Event import im.vector.matrix.android.internal.di.MoshiProvider import timber.log.Timber -class EventMatchCondition(val key: String, val pattern: String) : Condition(Kind.event_match) { +class EventMatchCondition( + /** + * The dot-separated field of the event to match, e.g. content.body + */ + val key: String, + /** + * The glob-style pattern to match against. Patterns with no special glob characters should + * be treated as having asterisks prepended and appended when testing the condition. + */ + val pattern: String +) : Condition(Kind.EventMatch) { override fun isSatisfied(event: Event, conditionResolver: ConditionResolver): Boolean { return conditionResolver.resolveEventMatchCondition(event, this) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/RoomMemberCountCondition.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/RoomMemberCountCondition.kt index 9f773a4e15..5c7b79a5ba 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/RoomMemberCountCondition.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/RoomMemberCountCondition.kt @@ -21,7 +21,14 @@ import timber.log.Timber private val regex = Regex("^(==|<=|>=|<|>)?(\\d*)$") -class RoomMemberCountCondition(val iz: String) : Condition(Kind.room_member_count) { +class RoomMemberCountCondition( + /** + * A decimal integer optionally prefixed by one of ==, <, >, >= or <=. + * A prefix of < matches rooms where the member count is strictly less than the given number and so forth. + * If no prefix is present, this parameter defaults to ==. + */ + val iz: String +) : Condition(Kind.RoomMemberCount) { override fun isSatisfied(event: Event, conditionResolver: ConditionResolver): Boolean { return conditionResolver.resolveRoomMemberCountCondition(event, this) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/SenderNotificationPermissionCondition.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/SenderNotificationPermissionCondition.kt index 1ab66c556c..cc6fe3f6ef 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/SenderNotificationPermissionCondition.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/SenderNotificationPermissionCondition.kt @@ -19,7 +19,15 @@ import im.vector.matrix.android.api.session.events.model.Event import im.vector.matrix.android.api.session.room.model.PowerLevelsContent import im.vector.matrix.android.api.session.room.powerlevels.PowerLevelsHelper -class SenderNotificationPermissionCondition(val key: String) : Condition(Kind.sender_notification_permission) { +class SenderNotificationPermissionCondition( + /** + * A string that determines the power level the sender must have to trigger notifications of a given type, + * such as room. Refer to the m.room.power_levels event schema for information about what the defaults are + * and how to interpret the event. The key is used to look up the power level required to send a notification + * type from the notifications object in the power level event content. + */ + val key: String +) : Condition(Kind.SenderNotificationPermission) { override fun isSatisfied(event: Event, conditionResolver: ConditionResolver): Boolean { return conditionResolver.resolveSenderNotificationPermissionCondition(event, this) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushCondition.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushCondition.kt index cbfd049fa0..cc19e6a7d1 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushCondition.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushCondition.kt @@ -37,7 +37,7 @@ data class PushCondition( val key: String? = null, /** - *Required for event_match conditions. + * Required for event_match conditions. */ val pattern: String? = null, @@ -51,30 +51,35 @@ data class PushCondition( ) { fun asExecutableCondition(): Condition? { - return when (Condition.Kind.fromString(this.kind)) { - Condition.Kind.event_match -> { - if (this.key != null && this.pattern != null) { + return when (Condition.Kind.fromString(kind)) { + Condition.Kind.EventMatch -> { + if (key != null && pattern != null) { EventMatchCondition(key, pattern) } else { Timber.e("Malformed Event match condition") null } } - Condition.Kind.contains_display_name -> { + Condition.Kind.ContainsDisplayName -> { ContainsDisplayNameCondition() } - Condition.Kind.room_member_count -> { - if (this.iz.isNullOrBlank()) { + Condition.Kind.RoomMemberCount -> { + if (iz.isNullOrEmpty()) { Timber.e("Malformed ROOM_MEMBER_COUNT condition") null } else { - RoomMemberCountCondition(this.iz) + RoomMemberCountCondition(iz) } } - Condition.Kind.sender_notification_permission -> { - this.key?.let { SenderNotificationPermissionCondition(it) } + Condition.Kind.SenderNotificationPermission -> { + if (key == null) { + Timber.e("Malformed Sender Notification Permission condition") + null + } else { + SenderNotificationPermissionCondition(key) + } } - Condition.Kind.UNRECOGNIZE -> { + Condition.Kind.Unrecognised -> { Timber.e("Unknown kind $kind") null } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/mapper/PushRulesMapper.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/mapper/PushRulesMapper.kt index 8912928a88..26cde21842 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/mapper/PushRulesMapper.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/database/mapper/PushRulesMapper.kt @@ -38,7 +38,7 @@ internal object PushRulesMapper { enabled = pushrule.enabled, ruleId = pushrule.ruleId, conditions = listOf( - PushCondition(Condition.Kind.event_match.name, "content.body", pushrule.pattern) + PushCondition(Condition.Kind.EventMatch.name, "content.body", pushrule.pattern) ) ) } @@ -59,7 +59,7 @@ internal object PushRulesMapper { enabled = pushrule.enabled, ruleId = pushrule.ruleId, conditions = listOf( - PushCondition(Condition.Kind.event_match.name, "room_id", pushrule.ruleId) + PushCondition(Condition.Kind.EventMatch.name, "room_id", pushrule.ruleId) ) ) } @@ -71,7 +71,7 @@ internal object PushRulesMapper { enabled = pushrule.enabled, ruleId = pushrule.ruleId, conditions = listOf( - PushCondition(Condition.Kind.event_match.name, "user_id", pushrule.ruleId) + PushCondition(Condition.Kind.EventMatch.name, "user_id", pushrule.ruleId) ) ) } diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/notification/RoomPushRuleMapper.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/notification/RoomPushRuleMapper.kt index d08d346a1f..770ce55cde 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/notification/RoomPushRuleMapper.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/room/notification/RoomPushRuleMapper.kt @@ -54,7 +54,7 @@ internal fun RoomNotificationState.toRoomPushRule(roomId: String): RoomPushRule? } else -> { val condition = PushCondition( - kind = Condition.Kind.event_match.value, + kind = Condition.Kind.EventMatch.value, key = "room_id", pattern = roomId )