12
12
// See the License for the specific language governing permissions and
13
13
// limitations under the License.
14
14
15
- use std:: {
16
- borrow:: Cow ,
17
- collections:: { BTreeMap , BTreeSet } ,
18
- } ;
15
+ use std:: collections:: BTreeMap ;
19
16
20
17
use anyhow:: { Context , Error } ;
21
18
use lazy_static:: lazy_static;
@@ -49,13 +46,6 @@ pub struct PushRuleEvaluator {
49
46
/// The `notifications` section of the current power levels in the room.
50
47
notification_power_levels : BTreeMap < String , i64 > ,
51
48
52
- /// The relations related to the event as a mapping from relation type to
53
- /// set of sender/event type 2-tuples.
54
- relations : BTreeMap < String , BTreeSet < ( String , String ) > > ,
55
-
56
- /// Is running "relation" conditions enabled?
57
- relation_match_enabled : bool ,
58
-
59
49
/// The power level of the sender of the event, or None if event is an
60
50
/// outlier.
61
51
sender_power_level : Option < i64 > ,
@@ -70,8 +60,6 @@ impl PushRuleEvaluator {
70
60
room_member_count : u64 ,
71
61
sender_power_level : Option < i64 > ,
72
62
notification_power_levels : BTreeMap < String , i64 > ,
73
- relations : BTreeMap < String , BTreeSet < ( String , String ) > > ,
74
- relation_match_enabled : bool ,
75
63
) -> Result < Self , Error > {
76
64
let body = flattened_keys
77
65
. get ( "content.body" )
@@ -83,8 +71,6 @@ impl PushRuleEvaluator {
83
71
body,
84
72
room_member_count,
85
73
notification_power_levels,
86
- relations,
87
- relation_match_enabled,
88
74
sender_power_level,
89
75
} )
90
76
}
@@ -203,89 +189,11 @@ impl PushRuleEvaluator {
203
189
false
204
190
}
205
191
}
206
- KnownCondition :: RelationMatch {
207
- rel_type,
208
- event_type_pattern,
209
- sender,
210
- sender_type,
211
- } => {
212
- self . match_relations ( rel_type, sender, sender_type, user_id, event_type_pattern) ?
213
- }
214
192
} ;
215
193
216
194
Ok ( result)
217
195
}
218
196
219
- /// Evaluates a relation condition.
220
- fn match_relations (
221
- & self ,
222
- rel_type : & str ,
223
- sender : & Option < Cow < str > > ,
224
- sender_type : & Option < Cow < str > > ,
225
- user_id : Option < & str > ,
226
- event_type_pattern : & Option < Cow < str > > ,
227
- ) -> Result < bool , Error > {
228
- // First check if relation matching is enabled...
229
- if !self . relation_match_enabled {
230
- return Ok ( false ) ;
231
- }
232
-
233
- // ... and if there are any relations to match against.
234
- let relations = if let Some ( relations) = self . relations . get ( rel_type) {
235
- relations
236
- } else {
237
- return Ok ( false ) ;
238
- } ;
239
-
240
- // Extract the sender pattern from the condition
241
- let sender_pattern = if let Some ( sender) = sender {
242
- Some ( sender. as_ref ( ) )
243
- } else if let Some ( sender_type) = sender_type {
244
- if sender_type == "user_id" {
245
- if let Some ( user_id) = user_id {
246
- Some ( user_id)
247
- } else {
248
- return Ok ( false ) ;
249
- }
250
- } else {
251
- warn ! ( "Unrecognized sender_type: {sender_type}" ) ;
252
- return Ok ( false ) ;
253
- }
254
- } else {
255
- None
256
- } ;
257
-
258
- let mut sender_compiled_pattern = if let Some ( pattern) = sender_pattern {
259
- Some ( get_glob_matcher ( pattern, GlobMatchType :: Whole ) ?)
260
- } else {
261
- None
262
- } ;
263
-
264
- let mut type_compiled_pattern = if let Some ( pattern) = event_type_pattern {
265
- Some ( get_glob_matcher ( pattern, GlobMatchType :: Whole ) ?)
266
- } else {
267
- None
268
- } ;
269
-
270
- for ( relation_sender, event_type) in relations {
271
- if let Some ( pattern) = & mut sender_compiled_pattern {
272
- if !pattern. is_match ( relation_sender) ? {
273
- continue ;
274
- }
275
- }
276
-
277
- if let Some ( pattern) = & mut type_compiled_pattern {
278
- if !pattern. is_match ( event_type) ? {
279
- continue ;
280
- }
281
- }
282
-
283
- return Ok ( true ) ;
284
- }
285
-
286
- Ok ( false )
287
- }
288
-
289
197
/// Evaluates a `event_match` condition.
290
198
fn match_event_match (
291
199
& self ,
@@ -359,15 +267,8 @@ impl PushRuleEvaluator {
359
267
fn push_rule_evaluator ( ) {
360
268
let mut flattened_keys = BTreeMap :: new ( ) ;
361
269
flattened_keys. insert ( "content.body" . to_string ( ) , "foo bar bob hello" . to_string ( ) ) ;
362
- let evaluator = PushRuleEvaluator :: py_new (
363
- flattened_keys,
364
- 10 ,
365
- Some ( 0 ) ,
366
- BTreeMap :: new ( ) ,
367
- BTreeMap :: new ( ) ,
368
- true ,
369
- )
370
- . unwrap ( ) ;
270
+ let evaluator =
271
+ PushRuleEvaluator :: py_new ( flattened_keys, 10 , Some ( 0 ) , BTreeMap :: new ( ) ) . unwrap ( ) ;
371
272
372
273
let result = evaluator. run ( & FilteredPushRules :: default ( ) , None , Some ( "bob" ) ) ;
373
274
assert_eq ! ( result. len( ) , 3 ) ;
0 commit comments