Upgrade Matrix SDK to 0.14 (#521)
This commit is contained in:
418
Cargo.lock
generated
418
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -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"]
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
[toolchain]
|
[toolchain]
|
||||||
channel = "1.85"
|
channel = "1.88"
|
||||||
components = [ "clippy" ]
|
components = [ "clippy" ]
|
||||||
|
|||||||
14
src/base.rs
14
src/base.rs
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user