matrix_sdk_test/notification_settings/
mod.rs

1use 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
14/// Build a new ruleset based on the server's default ruleset, by inserting a
15/// list of rules
16pub 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}