Upgrade Matrix SDK to 0.14 (#521)

This commit is contained in:
vaw
2025-10-25 23:23:59 +00:00
committed by GitHub
parent 1ec311590d
commit 7ccb1cbf2c
9 changed files with 291 additions and 202 deletions

418
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,7 @@ license = "Apache-2.0"
exclude = [".github", "CONTRIBUTING.md"] exclude = [".github", "CONTRIBUTING.md"]
keywords = ["matrix", "chat", "tui", "vim"] keywords = ["matrix", "chat", "tui", "vim"]
categories = ["command-line-utilities"] categories = ["command-line-utilities"]
rust-version = "1.85" rust-version = "1.88"
build = "build.rs" build = "build.rs"
[features] [features]
@@ -90,7 +90,7 @@ version = "0.0.24"
#rev = "e40dbb0bfeabe4cfd08facd2acb446080a330d75" #rev = "e40dbb0bfeabe4cfd08facd2acb446080a330d75"
[dependencies.matrix-sdk] [dependencies.matrix-sdk]
version = "0.13.0" version = "0.14.0"
default-features = false default-features = false
features = ["e2e-encryption", "sqlite", "sso-login"] features = ["e2e-encryption", "sqlite", "sso-login"]

View File

@@ -1,3 +1,3 @@
[toolchain] [toolchain]
channel = "1.85" channel = "1.88"
components = [ "clippy" ] components = [ "clippy" ]

View File

@@ -13,6 +13,7 @@ use std::time::{Duration, Instant};
use emojis::Emoji; use emojis::Emoji;
use matrix_sdk::ruma::events::receipt::ReceiptThread; use matrix_sdk::ruma::events::receipt::ReceiptThread;
use matrix_sdk::ruma::room_version_rules::RedactionRules;
use ratatui::{ use ratatui::{
buffer::Buffer, buffer::Buffer,
layout::{Alignment, Rect}, layout::{Alignment, Rect},
@@ -57,7 +58,6 @@ use matrix_sdk::{
OwnedRoomId, OwnedRoomId,
OwnedUserId, OwnedUserId,
RoomId, RoomId,
RoomVersionId,
UserId, UserId,
}, },
RoomState as MatrixRoomState, RoomState as MatrixRoomState,
@@ -785,6 +785,10 @@ pub enum IambError {
#[error("Invalid room alias id: {0}")] #[error("Invalid room alias id: {0}")]
InvalidRoomAliasId(#[from] matrix_sdk::ruma::IdParseError), InvalidRoomAliasId(#[from] matrix_sdk::ruma::IdParseError),
/// An invalid space child order was specified.
#[error("Invalid space child order: {0}")]
InvalidSpaceChildOrder(matrix_sdk::ruma::IdParseError),
/// A failure occurred during verification. /// A failure occurred during verification.
#[error("Verification request error: {0}")] #[error("Verification request error: {0}")]
VerificationRequestError(#[from] matrix_sdk::encryption::identities::RequestVerificationError), VerificationRequestError(#[from] matrix_sdk::encryption::identities::RequestVerificationError),
@@ -1025,7 +1029,7 @@ impl RoomInfo {
self.messages.get_mut(self.keys.get(event_id)?.to_message_key()?) self.messages.get_mut(self.keys.get(event_id)?.to_message_key()?)
} }
pub fn redact(&mut self, ev: OriginalSyncRoomRedactionEvent, room_version: &RoomVersionId) { pub fn redact(&mut self, ev: OriginalSyncRoomRedactionEvent, rules: &RedactionRules) {
let Some(redacts) = &ev.redacts else { let Some(redacts) = &ev.redacts else {
return; return;
}; };
@@ -1035,20 +1039,20 @@ impl RoomInfo {
Some(EventLocation::State(key)) => { Some(EventLocation::State(key)) => {
if let Some(msg) = self.messages.get_mut(key) { if let Some(msg) = self.messages.get_mut(key) {
let ev = SyncRoomRedactionEvent::Original(ev); let ev = SyncRoomRedactionEvent::Original(ev);
msg.redact(ev, room_version); msg.redact(ev, rules);
} }
}, },
Some(EventLocation::Message(None, key)) => { Some(EventLocation::Message(None, key)) => {
if let Some(msg) = self.messages.get_mut(key) { if let Some(msg) = self.messages.get_mut(key) {
let ev = SyncRoomRedactionEvent::Original(ev); let ev = SyncRoomRedactionEvent::Original(ev);
msg.redact(ev, room_version); msg.redact(ev, rules);
} }
}, },
Some(EventLocation::Message(Some(root), key)) => { Some(EventLocation::Message(Some(root), key)) => {
if let Some(thread) = self.threads.get_mut(root) { if let Some(thread) = self.threads.get_mut(root) {
if let Some(msg) = thread.get_mut(key) { if let Some(msg) = thread.get_mut(key) {
let ev = SyncRoomRedactionEvent::Original(ev); let ev = SyncRoomRedactionEvent::Original(ev);
msg.redact(ev, room_version); msg.redact(ev, rules);
} }
} }
}, },

View File

@@ -11,6 +11,7 @@ use std::ops::{Deref, DerefMut};
use chrono::{DateTime, Local as LocalTz}; use chrono::{DateTime, Local as LocalTz};
use humansize::{format_size, DECIMAL}; use humansize::{format_size, DECIMAL};
use matrix_sdk::ruma::events::receipt::ReceiptThread; use matrix_sdk::ruma::events::receipt::ReceiptThread;
use matrix_sdk::ruma::room_version_rules::RedactionRules;
use serde_json::json; use serde_json::json;
use unicode_width::UnicodeWidthStr; use unicode_width::UnicodeWidthStr;
@@ -43,7 +44,6 @@ use matrix_sdk::ruma::{
MilliSecondsSinceUnixEpoch, MilliSecondsSinceUnixEpoch,
OwnedEventId, OwnedEventId,
OwnedUserId, OwnedUserId,
RoomVersionId,
UInt, UInt,
}; };
@@ -511,7 +511,7 @@ impl MessageEvent {
} }
} }
fn redact(&mut self, redaction: SyncRoomRedactionEvent, version: &RoomVersionId) { fn redact(&mut self, redaction: SyncRoomRedactionEvent, rules: &RedactionRules) {
match self { match self {
MessageEvent::EncryptedOriginal(_) => return, MessageEvent::EncryptedOriginal(_) => return,
MessageEvent::EncryptedRedacted(_) => return, MessageEvent::EncryptedRedacted(_) => return,
@@ -520,7 +520,7 @@ impl MessageEvent {
MessageEvent::Local(_, _) => return, MessageEvent::Local(_, _) => return,
MessageEvent::Original(ev) => { MessageEvent::Original(ev) => {
let redacted = RedactedRoomMessageEvent { let redacted = RedactedRoomMessageEvent {
content: ev.content.clone().redact(version), content: ev.content.clone().redact(rules),
event_id: ev.event_id.clone(), event_id: ev.event_id.clone(),
sender: ev.sender.clone(), sender: ev.sender.clone(),
origin_server_ts: ev.origin_server_ts, origin_server_ts: ev.origin_server_ts,
@@ -581,7 +581,11 @@ fn body_cow_content(content: &RoomMessageEventContent) -> Cow<'_, str> {
} }
fn body_cow_reason(unsigned: &RedactedUnsigned) -> Cow<'_, str> { fn body_cow_reason(unsigned: &RedactedUnsigned) -> Cow<'_, str> {
let reason = unsigned.redacted_because.content.reason.as_ref(); let reason = unsigned
.redacted_because
.deserialize()
.ok()
.and_then(|ev| ev.content.reason);
if let Some(r) = reason { if let Some(r) = reason {
Cow::Owned(format!("[Redacted: {r:?}]")) Cow::Owned(format!("[Redacted: {r:?}]"))
@@ -1135,8 +1139,8 @@ impl Message {
Span::styled(sender, style).into() Span::styled(sender, style).into()
} }
pub fn redact(&mut self, redaction: SyncRoomRedactionEvent, version: &RoomVersionId) { pub fn redact(&mut self, redaction: SyncRoomRedactionEvent, rules: &RedactionRules) {
self.event.redact(redaction, version); self.event.redact(redaction, rules);
self.html = None; self.html = None;
self.downloaded = false; self.downloaded = false;
self.image_preview = ImageStatus::None; self.image_preview = ImageStatus::None;

View File

@@ -49,7 +49,8 @@ use crate::{
const TEST_ROOM1_ALIAS: &str = "#room1:example.com"; const TEST_ROOM1_ALIAS: &str = "#room1:example.com";
lazy_static! { lazy_static! {
pub static ref TEST_ROOM1_ID: OwnedRoomId = RoomId::new(server_name!("example.com")).to_owned(); pub static ref TEST_ROOM1_ID: OwnedRoomId =
RoomId::new_v1(server_name!("example.com")).to_owned();
pub static ref TEST_USER1: OwnedUserId = user_id!("@user1:example.com").to_owned(); pub static ref TEST_USER1: OwnedUserId = user_id!("@user1:example.com").to_owned();
pub static ref TEST_USER2: OwnedUserId = user_id!("@user2:example.com").to_owned(); pub static ref TEST_USER2: OwnedUserId = user_id!("@user2:example.com").to_owned();
pub static ref TEST_USER3: OwnedUserId = user_id!("@user3:example.com").to_owned(); pub static ref TEST_USER3: OwnedUserId = user_id!("@user3:example.com").to_owned();

View File

@@ -1673,7 +1673,7 @@ mod tests {
let server = server_name!("example.com"); let server = server_name!("example.com");
let room1 = TestRoomItem { let room1 = TestRoomItem {
room_id: RoomId::new(server).to_owned(), room_id: RoomId::new_v1(server).to_owned(),
tags: vec![TagName::Favorite], tags: vec![TagName::Favorite],
alias: Some(room_alias_id!("#room1:example.com").to_owned()), alias: Some(room_alias_id!("#room1:example.com").to_owned()),
name: "Z", name: "Z",
@@ -1682,7 +1682,7 @@ mod tests {
}; };
let room2 = TestRoomItem { let room2 = TestRoomItem {
room_id: RoomId::new(server).to_owned(), room_id: RoomId::new_v1(server).to_owned(),
tags: vec![], tags: vec![],
alias: Some(room_alias_id!("#a:example.com").to_owned()), alias: Some(room_alias_id!("#a:example.com").to_owned()),
name: "Unnamed Room", name: "Unnamed Room",
@@ -1691,7 +1691,7 @@ mod tests {
}; };
let room3 = TestRoomItem { let room3 = TestRoomItem {
room_id: RoomId::new(server).to_owned(), room_id: RoomId::new_v1(server).to_owned(),
tags: vec![], tags: vec![],
alias: None, alias: None,
name: "Cool Room", name: "Cool Room",
@@ -1739,7 +1739,7 @@ mod tests {
let server = server_name!("example.com"); let server = server_name!("example.com");
let room1 = TestRoomItem { let room1 = TestRoomItem {
room_id: RoomId::new(server).to_owned(), room_id: RoomId::new_v1(server).to_owned(),
tags: vec![], tags: vec![],
alias: None, alias: None,
name: "Room 1", name: "Room 1",
@@ -1748,7 +1748,7 @@ mod tests {
}; };
let room2 = TestRoomItem { let room2 = TestRoomItem {
room_id: RoomId::new(server).to_owned(), room_id: RoomId::new_v1(server).to_owned(),
tags: vec![], tags: vec![],
alias: None, alias: None,
name: "Room 2", name: "Room 2",
@@ -1760,7 +1760,7 @@ mod tests {
}; };
let room3 = TestRoomItem { let room3 = TestRoomItem {
room_id: RoomId::new(server).to_owned(), room_id: RoomId::new_v1(server).to_owned(),
tags: vec![], tags: vec![],
alias: None, alias: None,
name: "Room 3", name: "Room 3",
@@ -1791,7 +1791,7 @@ mod tests {
let server = server_name!("example.com"); let server = server_name!("example.com");
let room1 = TestRoomItem { let room1 = TestRoomItem {
room_id: RoomId::new(server).to_owned(), room_id: RoomId::new_v1(server).to_owned(),
tags: vec![], tags: vec![],
alias: None, alias: None,
name: "Old room 1", name: "Old room 1",
@@ -1800,7 +1800,7 @@ mod tests {
}; };
let room2 = TestRoomItem { let room2 = TestRoomItem {
room_id: RoomId::new(server).to_owned(), room_id: RoomId::new_v1(server).to_owned(),
tags: vec![], tags: vec![],
alias: None, alias: None,
name: "Old room 2", name: "Old room 2",
@@ -1809,7 +1809,7 @@ mod tests {
}; };
let room3 = TestRoomItem { let room3 = TestRoomItem {
room_id: RoomId::new(server).to_owned(), room_id: RoomId::new_v1(server).to_owned(),
tags: vec![], tags: vec![],
alias: None, alias: None,
name: "New Fancy Room", name: "New Fancy Room",

View File

@@ -1,9 +1,11 @@
//! Window for Matrix spaces //! Window for Matrix spaces
use std::ops::{Deref, DerefMut}; use std::ops::{Deref, DerefMut};
use std::str::FromStr;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use matrix_sdk::ruma::events::space::child::SpaceChildEventContent; use matrix_sdk::ruma::events::space::child::SpaceChildEventContent;
use matrix_sdk::ruma::events::StateEventType; use matrix_sdk::ruma::events::StateEventType;
use matrix_sdk::ruma::OwnedSpaceChildOrder;
use matrix_sdk::{ use matrix_sdk::{
room::Room as MatrixRoom, room::Room as MatrixRoom,
ruma::{OwnedRoomId, RoomId}, ruma::{OwnedRoomId, RoomId},
@@ -105,7 +107,11 @@ impl SpaceState {
let via = self.room.route().await.map_err(IambError::from)?; let via = self.room.route().await.map_err(IambError::from)?;
let mut ev = SpaceChildEventContent::new(via); let mut ev = SpaceChildEventContent::new(via);
ev.order = order; ev.order = order
.as_deref()
.map(OwnedSpaceChildOrder::from_str)
.transpose()
.map_err(IambError::InvalidSpaceChildOrder)?;
ev.suggested = suggested; ev.suggested = suggested;
let _ = self let _ = self
.room .room

View File

@@ -1087,11 +1087,15 @@ impl ClientWorker {
async move { async move {
let room_id = room.room_id(); let room_id = room.room_id();
let room_info = room.clone_info(); let room_info = room.clone_info();
let room_version = room_info.room_version().unwrap_or(&RoomVersionId::V1); let rules = &room_info
.room_version()
.and_then(RoomVersionId::rules)
.unwrap_or(RoomVersionId::V1.rules().unwrap())
.redaction;
let mut locked = store.lock().await; let mut locked = store.lock().await;
let info = locked.application.get_room_info(room_id.to_owned()); let info = locked.application.get_room_info(room_id.to_owned());
info.redact(ev, room_version); info.redact(ev, rules);
} }
}, },
); );
@@ -1421,7 +1425,7 @@ impl ClientWorker {
let resp = self.client.send(req).await.map_err(IambError::from)?; let resp = self.client.send(req).await.map_err(IambError::from)?;
let rooms = resp.rooms.into_iter().map(|chunk| chunk.room_id).collect(); let rooms = resp.rooms.into_iter().map(|chunk| chunk.summary.room_id).collect();
Ok(rooms) Ok(rooms)
} }