diff --git a/Cargo.lock b/Cargo.lock index 0a779d765..020039607 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4803,7 +4803,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.14.1" -source = "git+https://github.com/ruma/ruma?rev=a5e8208d76d5fd7f82b04b7c86f877651d228b9a#a5e8208d76d5fd7f82b04b7c86f877651d228b9a" +source = "git+https://github.com/ruma/ruma?rev=d4f29e2a70dbfb0bd4fdb839ca4629794644ba97#d4f29e2a70dbfb0bd4fdb839ca4629794644ba97" dependencies = [ "assign", "js_int", @@ -4821,7 +4821,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.22.1" -source = "git+https://github.com/ruma/ruma?rev=a5e8208d76d5fd7f82b04b7c86f877651d228b9a#a5e8208d76d5fd7f82b04b7c86f877651d228b9a" +source = "git+https://github.com/ruma/ruma?rev=d4f29e2a70dbfb0bd4fdb839ca4629794644ba97#d4f29e2a70dbfb0bd4fdb839ca4629794644ba97" dependencies = [ "as_variant", "assign", @@ -4844,7 +4844,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.17.1" -source = "git+https://github.com/ruma/ruma?rev=a5e8208d76d5fd7f82b04b7c86f877651d228b9a#a5e8208d76d5fd7f82b04b7c86f877651d228b9a" +source = "git+https://github.com/ruma/ruma?rev=d4f29e2a70dbfb0bd4fdb839ca4629794644ba97#d4f29e2a70dbfb0bd4fdb839ca4629794644ba97" dependencies = [ "as_variant", "base64", @@ -4877,7 +4877,7 @@ dependencies = [ [[package]] name = "ruma-events" version = "0.32.1" -source = "git+https://github.com/ruma/ruma?rev=a5e8208d76d5fd7f82b04b7c86f877651d228b9a#a5e8208d76d5fd7f82b04b7c86f877651d228b9a" +source = "git+https://github.com/ruma/ruma?rev=d4f29e2a70dbfb0bd4fdb839ca4629794644ba97#d4f29e2a70dbfb0bd4fdb839ca4629794644ba97" dependencies = [ "as_variant", "indexmap", @@ -4904,7 +4904,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.13.1" -source = "git+https://github.com/ruma/ruma?rev=a5e8208d76d5fd7f82b04b7c86f877651d228b9a#a5e8208d76d5fd7f82b04b7c86f877651d228b9a" +source = "git+https://github.com/ruma/ruma?rev=d4f29e2a70dbfb0bd4fdb839ca4629794644ba97#d4f29e2a70dbfb0bd4fdb839ca4629794644ba97" dependencies = [ "headers", "http", @@ -4925,7 +4925,7 @@ dependencies = [ [[package]] name = "ruma-html" version = "0.6.0" -source = "git+https://github.com/ruma/ruma?rev=a5e8208d76d5fd7f82b04b7c86f877651d228b9a#a5e8208d76d5fd7f82b04b7c86f877651d228b9a" +source = "git+https://github.com/ruma/ruma?rev=d4f29e2a70dbfb0bd4fdb839ca4629794644ba97#d4f29e2a70dbfb0bd4fdb839ca4629794644ba97" dependencies = [ "as_variant", "html5ever", @@ -4936,7 +4936,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.12.0" -source = "git+https://github.com/ruma/ruma?rev=a5e8208d76d5fd7f82b04b7c86f877651d228b9a#a5e8208d76d5fd7f82b04b7c86f877651d228b9a" +source = "git+https://github.com/ruma/ruma?rev=d4f29e2a70dbfb0bd4fdb839ca4629794644ba97#d4f29e2a70dbfb0bd4fdb839ca4629794644ba97" dependencies = [ "js_int", "thiserror 2.0.17", @@ -4945,7 +4945,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.17.1" -source = "git+https://github.com/ruma/ruma?rev=a5e8208d76d5fd7f82b04b7c86f877651d228b9a#a5e8208d76d5fd7f82b04b7c86f877651d228b9a" +source = "git+https://github.com/ruma/ruma?rev=d4f29e2a70dbfb0bd4fdb839ca4629794644ba97#d4f29e2a70dbfb0bd4fdb839ca4629794644ba97" dependencies = [ "as_variant", "cfg-if", @@ -4961,7 +4961,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.19.0" -source = "git+https://github.com/ruma/ruma?rev=a5e8208d76d5fd7f82b04b7c86f877651d228b9a#a5e8208d76d5fd7f82b04b7c86f877651d228b9a" +source = "git+https://github.com/ruma/ruma?rev=d4f29e2a70dbfb0bd4fdb839ca4629794644ba97#d4f29e2a70dbfb0bd4fdb839ca4629794644ba97" dependencies = [ "base64", "ed25519-dalek", diff --git a/Cargo.toml b/Cargo.toml index 0b0a68527..f5073a1f2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -68,7 +68,7 @@ rand = "0.8.5" regex = "1.12.2" reqwest = { version = "0.12.24", default-features = false } rmp-serde = "1.3.0" -ruma = { git = "https://github.com/ruma/ruma", rev = "a5e8208d76d5fd7f82b04b7c86f877651d228b9a", features = [ +ruma = { git = "https://github.com/ruma/ruma", rev = "d4f29e2a70dbfb0bd4fdb839ca4629794644ba97", features = [ "client-api-c", "compat-upload-signatures", "compat-arbitrary-length-ids", diff --git a/bindings/matrix-sdk-ffi/src/client.rs b/bindings/matrix-sdk-ffi/src/client.rs index 7fda80f53..e3f7e3cbf 100644 --- a/bindings/matrix-sdk-ffi/src/client.rs +++ b/bindings/matrix-sdk-ffi/src/client.rs @@ -2351,7 +2351,7 @@ impl TryFrom for create_room::v3::Request { if let Some(power_levels) = value.power_level_content_override { match Raw::::new(&power_levels.into()) { Ok(power_levels) => { - request.power_level_content_override = Some(power_levels.cast()); + request.power_level_content_override = Some(power_levels); } Err(e) => { return Err(ClientError::Generic { diff --git a/crates/matrix-sdk-base/Cargo.toml b/crates/matrix-sdk-base/Cargo.toml index e9e17b0ee..6a024cc48 100644 --- a/crates/matrix-sdk-base/Cargo.toml +++ b/crates/matrix-sdk-base/Cargo.toml @@ -83,7 +83,6 @@ matrix-sdk-test = { workspace = true, optional = true } once_cell.workspace = true regex.workspace = true ruma = { workspace = true, features = [ - "canonical-json", "unstable-msc2867", "unstable-msc3381", "unstable-msc4186", diff --git a/crates/matrix-sdk-base/src/deserialized_responses.rs b/crates/matrix-sdk-base/src/deserialized_responses.rs index eda956b50..cf7a2e08c 100644 --- a/crates/matrix-sdk-base/src/deserialized_responses.rs +++ b/crates/matrix-sdk-base/src/deserialized_responses.rs @@ -20,7 +20,8 @@ pub use matrix_sdk_common::deserialized_responses::*; use once_cell::sync::Lazy; use regex::Regex; use ruma::{ - EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId, OwnedUserId, UInt, UserId, + EventId, MilliSecondsSinceUnixEpoch, MxcUri, OwnedEventId, OwnedRoomId, OwnedUserId, UInt, + UserId, events::{ AnyStrippedStateEvent, AnySyncStateEvent, AnySyncTimelineEvent, EventContentFromType, PossiblyRedactedStateEventContent, RedactContent, RedactedStateEventContent, @@ -486,16 +487,34 @@ impl MemberEvent { self.state_key() } + /// The value of the `displayname` field in this member event. + /// + /// [`MemberEvent::display_name()`] should be preferred to get the name to + /// display for this member event. + pub fn displayname_value(&self) -> Option<&str> { + match self { + Self::Sync(event) => event.as_original()?.content.displayname.as_deref(), + Self::Stripped(event) => event.content.displayname.as_deref(), + } + } + /// The name that should be displayed for this member event. /// /// It there is no `displayname` in the event's content, the localpart or /// the user ID is returned. pub fn display_name(&self) -> DisplayName { - DisplayName::new( - self.original_content() - .and_then(|c| c.displayname.as_deref()) - .unwrap_or_else(|| self.user_id().localpart()), - ) + DisplayName::new(self.displayname_value().unwrap_or_else(|| self.user_id().localpart())) + } + + /// The URL of the avatar in this member event. + /// + /// [`MemberEvent::display_name()`] should be preferred to get the name to + /// display for this member event. + pub fn avatar_url(&self) -> Option<&MxcUri> { + match self { + Self::Sync(event) => event.as_original()?.content.avatar_url.as_deref(), + Self::Stripped(event) => event.content.avatar_url.as_deref(), + } } /// The optional reason why the membership changed. diff --git a/crates/matrix-sdk-base/src/response_processors/room/msc4186/mod.rs b/crates/matrix-sdk-base/src/response_processors/room/msc4186/mod.rs index e26f3a761..98a2f76af 100644 --- a/crates/matrix-sdk-base/src/response_processors/room/msc4186/mod.rs +++ b/crates/matrix-sdk-base/src/response_processors/room/msc4186/mod.rs @@ -29,7 +29,7 @@ use ruma::{ assign, events::{ AnyRoomAccountDataEvent, AnyStrippedStateEvent, AnySyncStateEvent, StateEventType, - room::member::{MembershipState, RoomMemberEventContent}, + room::member::{MembershipState, PossiblyRedactedRoomMemberEventContent}, }, serde::Raw, }; @@ -242,7 +242,10 @@ fn membership( match membership_event { // There is a membership event indicating it's a knocked room. - Some(RoomMemberEventContent { membership: MembershipState::Knock, .. }) => { + Some(PossiblyRedactedRoomMemberEventContent { + membership: MembershipState::Knock, + .. + }) => { let room = store.get_or_create_room( room_id, RoomState::Knocked, diff --git a/crates/matrix-sdk-base/src/room/members.rs b/crates/matrix-sdk-base/src/room/members.rs index fa7f290cd..ad6bfb8c5 100644 --- a/crates/matrix-sdk-base/src/room/members.rs +++ b/crates/matrix-sdk-base/src/room/members.rs @@ -261,7 +261,7 @@ impl RoomMember { if let Some(p) = self.profile.as_ref() { p.as_original().and_then(|e| e.content.displayname.as_deref()) } else { - self.event.original_content()?.displayname.as_deref() + self.event.displayname_value() } } @@ -278,7 +278,7 @@ impl RoomMember { if let Some(p) = self.profile.as_ref() { p.as_original().and_then(|e| e.content.avatar_url.as_deref()) } else { - self.event.original_content()?.avatar_url.as_deref() + self.event.avatar_url() } } diff --git a/crates/matrix-sdk-base/src/store/ambiguity_map.rs b/crates/matrix-sdk-base/src/store/ambiguity_map.rs index 220ca132f..896a947df 100644 --- a/crates/matrix-sdk-base/src/store/ambiguity_map.rs +++ b/crates/matrix-sdk-base/src/store/ambiguity_map.rs @@ -204,7 +204,7 @@ impl AmbiguityCache { { Some(d) } else { - old_event.original_content().and_then(|c| c.displayname.clone()) + old_event.displayname_value().map(ToOwned::to_owned) }; Ok(Some(display_name.unwrap_or_else(|| user_id.localpart().to_owned()))) diff --git a/crates/matrix-sdk-crypto/Cargo.toml b/crates/matrix-sdk-crypto/Cargo.toml index a54f21139..329ac8f4c 100644 --- a/crates/matrix-sdk-crypto/Cargo.toml +++ b/crates/matrix-sdk-crypto/Cargo.toml @@ -62,7 +62,7 @@ matrix-sdk-test = { workspace = true, optional = true } # feature = testing onl pbkdf2.workspace = true rand.workspace = true rmp-serde.workspace = true -ruma = { workspace = true, features = ["rand", "canonical-json", "unstable-msc3814"] } +ruma = { workspace = true, features = ["rand", "unstable-msc3814"] } serde = { workspace = true, features = ["derive", "rc"] } serde_json.workspace = true sha2.workspace = true diff --git a/crates/matrix-sdk-ui/src/timeline/event_item/content/mod.rs b/crates/matrix-sdk-ui/src/timeline/event_item/content/mod.rs index 30297bac6..5f16e28af 100644 --- a/crates/matrix-sdk-ui/src/timeline/event_item/content/mod.rs +++ b/crates/matrix-sdk-ui/src/timeline/event_item/content/mod.rs @@ -836,7 +836,9 @@ mod tests { assign, events::{ FullStateEventContent, - room::member::{MembershipState, RoomMemberEventContent}, + room::member::{ + MembershipState, PossiblyRedactedRoomMemberEventContent, RoomMemberEventContent, + }, }, room_version_rules::RedactionRules, }; @@ -851,7 +853,9 @@ mod tests { content: assign!(RoomMemberEventContent::new(MembershipState::Ban), { reason: Some("🤬".to_owned()), }), - prev_content: Some(RoomMemberEventContent::new(MembershipState::Join)), + prev_content: Some(PossiblyRedactedRoomMemberEventContent::new( + MembershipState::Join, + )), }, change: Some(MembershipChange::Banned), }); diff --git a/testing/matrix-sdk-test/Cargo.toml b/testing/matrix-sdk-test/Cargo.toml index c04710590..71d8143f2 100644 --- a/testing/matrix-sdk-test/Cargo.toml +++ b/testing/matrix-sdk-test/Cargo.toml @@ -27,7 +27,7 @@ matrix-sdk-test-macros = { version = "0.16.0", path = "../matrix-sdk-test-macros once_cell.workspace = true # Enable the unstable feature for polls support. # "client-api-s" enables need the "server" feature of ruma-client-api, which is needed to serialize Response objects to JSON. -ruma = { workspace = true, features = ["canonical-json", "client-api-s", "rand", "unstable-msc3381", "unstable-msc4274"] } +ruma = { workspace = true, features = ["client-api-s", "rand", "unstable-msc3381", "unstable-msc4274"] } serde.workspace = true serde_json.workspace = true vodozemac.workspace = true