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"]
keywords = ["matrix", "chat", "tui", "vim"]
categories = ["command-line-utilities"]
rust-version = "1.85"
rust-version = "1.88"
build = "build.rs"
[features]
@@ -90,7 +90,7 @@ version = "0.0.24"
#rev = "e40dbb0bfeabe4cfd08facd2acb446080a330d75"
[dependencies.matrix-sdk]
version = "0.13.0"
version = "0.14.0"
default-features = false
features = ["e2e-encryption", "sqlite", "sso-login"]

View File

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

View File

@@ -13,6 +13,7 @@ use std::time::{Duration, Instant};
use emojis::Emoji;
use matrix_sdk::ruma::events::receipt::ReceiptThread;
use matrix_sdk::ruma::room_version_rules::RedactionRules;
use ratatui::{
buffer::Buffer,
layout::{Alignment, Rect},
@@ -57,7 +58,6 @@ use matrix_sdk::{
OwnedRoomId,
OwnedUserId,
RoomId,
RoomVersionId,
UserId,
},
RoomState as MatrixRoomState,
@@ -785,6 +785,10 @@ pub enum IambError {
#[error("Invalid room alias id: {0}")]
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.
#[error("Verification request error: {0}")]
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()?)
}
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 {
return;
};
@@ -1035,20 +1039,20 @@ impl RoomInfo {
Some(EventLocation::State(key)) => {
if let Some(msg) = self.messages.get_mut(key) {
let ev = SyncRoomRedactionEvent::Original(ev);
msg.redact(ev, room_version);
msg.redact(ev, rules);
}
},
Some(EventLocation::Message(None, key)) => {
if let Some(msg) = self.messages.get_mut(key) {
let ev = SyncRoomRedactionEvent::Original(ev);
msg.redact(ev, room_version);
msg.redact(ev, rules);
}
},
Some(EventLocation::Message(Some(root), key)) => {
if let Some(thread) = self.threads.get_mut(root) {
if let Some(msg) = thread.get_mut(key) {
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 humansize::{format_size, DECIMAL};
use matrix_sdk::ruma::events::receipt::ReceiptThread;
use matrix_sdk::ruma::room_version_rules::RedactionRules;
use serde_json::json;
use unicode_width::UnicodeWidthStr;
@@ -43,7 +44,6 @@ use matrix_sdk::ruma::{
MilliSecondsSinceUnixEpoch,
OwnedEventId,
OwnedUserId,
RoomVersionId,
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 {
MessageEvent::EncryptedOriginal(_) => return,
MessageEvent::EncryptedRedacted(_) => return,
@@ -520,7 +520,7 @@ impl MessageEvent {
MessageEvent::Local(_, _) => return,
MessageEvent::Original(ev) => {
let redacted = RedactedRoomMessageEvent {
content: ev.content.clone().redact(version),
content: ev.content.clone().redact(rules),
event_id: ev.event_id.clone(),
sender: ev.sender.clone(),
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> {
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 {
Cow::Owned(format!("[Redacted: {r:?}]"))
@@ -1135,8 +1139,8 @@ impl Message {
Span::styled(sender, style).into()
}
pub fn redact(&mut self, redaction: SyncRoomRedactionEvent, version: &RoomVersionId) {
self.event.redact(redaction, version);
pub fn redact(&mut self, redaction: SyncRoomRedactionEvent, rules: &RedactionRules) {
self.event.redact(redaction, rules);
self.html = None;
self.downloaded = false;
self.image_preview = ImageStatus::None;

View File

@@ -49,7 +49,8 @@ use crate::{
const TEST_ROOM1_ALIAS: &str = "#room1:example.com";
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_USER2: OwnedUserId = user_id!("@user2: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 room1 = TestRoomItem {
room_id: RoomId::new(server).to_owned(),
room_id: RoomId::new_v1(server).to_owned(),
tags: vec![TagName::Favorite],
alias: Some(room_alias_id!("#room1:example.com").to_owned()),
name: "Z",
@@ -1682,7 +1682,7 @@ mod tests {
};
let room2 = TestRoomItem {
room_id: RoomId::new(server).to_owned(),
room_id: RoomId::new_v1(server).to_owned(),
tags: vec![],
alias: Some(room_alias_id!("#a:example.com").to_owned()),
name: "Unnamed Room",
@@ -1691,7 +1691,7 @@ mod tests {
};
let room3 = TestRoomItem {
room_id: RoomId::new(server).to_owned(),
room_id: RoomId::new_v1(server).to_owned(),
tags: vec![],
alias: None,
name: "Cool Room",
@@ -1739,7 +1739,7 @@ mod tests {
let server = server_name!("example.com");
let room1 = TestRoomItem {
room_id: RoomId::new(server).to_owned(),
room_id: RoomId::new_v1(server).to_owned(),
tags: vec![],
alias: None,
name: "Room 1",
@@ -1748,7 +1748,7 @@ mod tests {
};
let room2 = TestRoomItem {
room_id: RoomId::new(server).to_owned(),
room_id: RoomId::new_v1(server).to_owned(),
tags: vec![],
alias: None,
name: "Room 2",
@@ -1760,7 +1760,7 @@ mod tests {
};
let room3 = TestRoomItem {
room_id: RoomId::new(server).to_owned(),
room_id: RoomId::new_v1(server).to_owned(),
tags: vec![],
alias: None,
name: "Room 3",
@@ -1791,7 +1791,7 @@ mod tests {
let server = server_name!("example.com");
let room1 = TestRoomItem {
room_id: RoomId::new(server).to_owned(),
room_id: RoomId::new_v1(server).to_owned(),
tags: vec![],
alias: None,
name: "Old room 1",
@@ -1800,7 +1800,7 @@ mod tests {
};
let room2 = TestRoomItem {
room_id: RoomId::new(server).to_owned(),
room_id: RoomId::new_v1(server).to_owned(),
tags: vec![],
alias: None,
name: "Old room 2",
@@ -1809,7 +1809,7 @@ mod tests {
};
let room3 = TestRoomItem {
room_id: RoomId::new(server).to_owned(),
room_id: RoomId::new_v1(server).to_owned(),
tags: vec![],
alias: None,
name: "New Fancy Room",

View File

@@ -1,9 +1,11 @@
//! Window for Matrix spaces
use std::ops::{Deref, DerefMut};
use std::str::FromStr;
use std::time::{Duration, Instant};
use matrix_sdk::ruma::events::space::child::SpaceChildEventContent;
use matrix_sdk::ruma::events::StateEventType;
use matrix_sdk::ruma::OwnedSpaceChildOrder;
use matrix_sdk::{
room::Room as MatrixRoom,
ruma::{OwnedRoomId, RoomId},
@@ -105,7 +107,11 @@ impl SpaceState {
let via = self.room.route().await.map_err(IambError::from)?;
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;
let _ = self
.room

View File

@@ -1087,11 +1087,15 @@ impl ClientWorker {
async move {
let room_id = room.room_id();
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 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 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)
}