From fae10ae7f35de863ec1e4b2f083be554e2f0411e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Wed, 22 Mar 2023 13:03:02 +0100 Subject: [PATCH] sdk: Add private method to get the current push rules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kévin Commaille --- crates/matrix-sdk/src/account.rs | 27 +++++++++++++++++++++++++++ crates/matrix-sdk/src/room/common.rs | 11 ++--------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/crates/matrix-sdk/src/account.rs b/crates/matrix-sdk/src/account.rs index 038ea9c88..6c7affa1a 100644 --- a/crates/matrix-sdk/src/account.rs +++ b/crates/matrix-sdk/src/account.rs @@ -35,15 +35,18 @@ use ruma::{ assign, events::{ ignored_user_list::{IgnoredUser, IgnoredUserListEventContent}, + push_rules::PushRulesEventContent, room::MediaSource, AnyGlobalAccountDataEventContent, GlobalAccountDataEventContent, GlobalAccountDataEventType, StaticEventContent, }, + push::Ruleset, serde::Raw, thirdparty::Medium, ClientSecret, MxcUri, OwnedMxcUri, OwnedUserId, RoomId, SessionId, UInt, UserId, }; use serde::Deserialize; +use tracing::error; use crate::{config::RequestConfig, Client, Error, HttpError, Result}; @@ -822,6 +825,30 @@ impl Account { .unwrap_or_default(); Ok(ignored_user_list) } + + /// Get the current push rules. + /// + /// If no push rules event was found, or it fails to deserialize, a ruleset + /// with the server-default push rules is returned. + /// + /// Panics if called when the client is not logged in. + pub(crate) async fn push_rules(&self) -> Result { + Ok(self + .account_data::() + .await? + .and_then(|r| match r.deserialize() { + Ok(r) => Some(r.global), + Err(e) => { + error!("Push rules event failed to deserialize: {e}"); + None + } + }) + .unwrap_or_else(|| { + Ruleset::server_default( + self.client.user_id().expect("The client should be logged in"), + ) + })) + } } fn get_raw_content(raw: Option>) -> Result>> { diff --git a/crates/matrix-sdk/src/room/common.rs b/crates/matrix-sdk/src/room/common.rs index aab0694b3..bc423e725 100644 --- a/crates/matrix-sdk/src/room/common.rs +++ b/crates/matrix-sdk/src/room/common.rs @@ -28,7 +28,6 @@ use ruma::{ assign, events::{ direct::DirectEventContent, - push_rules::PushRulesEventContent, receipt::{Receipt, ReceiptThread, ReceiptType}, room::{ encryption::RoomEncryptionEventContent, history_visibility::HistoryVisibility, @@ -41,7 +40,7 @@ use ruma::{ RoomAccountDataEventType, StateEventType, StaticEventContent, StaticStateEventContent, SyncStateEvent, }, - push::{PushConditionRoomCtx, Ruleset}, + push::PushConditionRoomCtx, serde::Raw, uint, EventId, MatrixToUri, MatrixUri, OwnedEventId, OwnedServerName, OwnedUserId, RoomId, UInt, UserId, @@ -240,13 +239,7 @@ impl Common { } if let Some(push_context) = self.push_context().await? { - let push_rules = self - .client() - .account() - .account_data::() - .await? - .and_then(|r| r.deserialize().ok().map(|r| r.global)) - .unwrap_or_else(|| Ruleset::server_default(self.own_user_id())); + let push_rules = self.client().account().push_rules().await?; for event in &mut response.chunk { event.push_actions = push_rules.get_actions(&event.event, &push_context).to_owned();