matrix_sdk_test/notification_settings/
mod.rs1use ruma::{
2 push::{
3 Action, NewConditionalPushRule, NewPushRule, NewSimplePushRule, PushCondition, RuleKind,
4 Ruleset, Tweak,
5 },
6 RoomId, UserId,
7};
8
9pub fn get_server_default_ruleset() -> Ruleset {
10 let user_id = UserId::parse("@user:matrix.org").unwrap();
11 Ruleset::server_default(&user_id)
12}
13
14pub fn build_ruleset(rule_list: Vec<(RuleKind, &RoomId, bool)>) -> Ruleset {
17 let mut ruleset = get_server_default_ruleset();
18 for (kind, room_id, notify) in rule_list {
19 let actions = if notify {
20 vec![Action::Notify, Action::SetTweak(Tweak::Sound("default".into()))]
21 } else {
22 vec![]
23 };
24 match kind {
25 RuleKind::Room => {
26 let new_rule = NewSimplePushRule::new(room_id.to_owned(), actions);
27 ruleset.insert(NewPushRule::Room(new_rule), None, None).unwrap();
28 }
29 RuleKind::Override | RuleKind::Underride => {
30 let new_rule = NewConditionalPushRule::new(
31 room_id.into(),
32 vec![PushCondition::EventMatch {
33 key: "room_id".to_owned(),
34 pattern: room_id.to_string(),
35 }],
36 actions,
37 );
38 let new_push_rule = match kind {
39 RuleKind::Override => NewPushRule::Override(new_rule),
40 _ => NewPushRule::Underride(new_rule),
41 };
42 ruleset.insert(new_push_rule, None, None).unwrap();
43 }
44 _ => {}
45 }
46 }
47
48 ruleset
49}