diff --git a/Cargo.lock b/Cargo.lock index 95f528f7..a0128d8c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1030,6 +1030,7 @@ dependencies = [ "qrcode", "rand 0.8.5", "regex", + "ruma", "serde", "serde_json", "sourceview5", @@ -2343,22 +2344,22 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "matrix-qrcode" version = "0.2.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#28893ec38886346c14b2f58e3e9511d53a82d1a9" +source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#7e48034cc8df1b44bc98e8ece5603e0c386f0186" dependencies = [ "base64", "byteorder", "image", "qrcode", "rqrr", - "ruma-identifiers", - "ruma-serde", + "ruma-common", "thiserror", + "vodozemac", ] [[package]] name = "matrix-sdk" version = "0.4.1" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#28893ec38886346c14b2f58e3e9511d53a82d1a9" +source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#7e48034cc8df1b44bc98e8ece5603e0c386f0186" dependencies = [ "anymap2", "async-stream", @@ -2391,7 +2392,7 @@ dependencies = [ [[package]] name = "matrix-sdk-base" version = "0.4.1" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#28893ec38886346c14b2f58e3e9511d53a82d1a9" +source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#7e48034cc8df1b44bc98e8ece5603e0c386f0186" dependencies = [ "anyhow", "async-stream", @@ -2418,7 +2419,7 @@ dependencies = [ [[package]] name = "matrix-sdk-common" version = "0.4.1" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#28893ec38886346c14b2f58e3e9511d53a82d1a9" +source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#7e48034cc8df1b44bc98e8ece5603e0c386f0186" dependencies = [ "async-lock", "async-trait", @@ -2434,7 +2435,7 @@ dependencies = [ [[package]] name = "matrix-sdk-crypto" version = "0.4.1" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#28893ec38886346c14b2f58e3e9511d53a82d1a9" +source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#7e48034cc8df1b44bc98e8ece5603e0c386f0186" dependencies = [ "aes 0.7.5", "aes-gcm", @@ -2462,7 +2463,7 @@ dependencies = [ [[package]] name = "matrix-sdk-sled" version = "0.1.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#28893ec38886346c14b2f58e3e9511d53a82d1a9" +source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#7e48034cc8df1b44bc98e8ece5603e0c386f0186" dependencies = [ "anyhow", "async-stream", @@ -2484,7 +2485,7 @@ dependencies = [ [[package]] name = "matrix-sdk-store-encryption" version = "0.1.0" -source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#28893ec38886346c14b2f58e3e9511d53a82d1a9" +source = "git+https://github.com/matrix-org/matrix-rust-sdk.git#7e48034cc8df1b44bc98e8ece5603e0c386f0186" dependencies = [ "blake3", "chacha20poly1305", @@ -3484,57 +3485,21 @@ dependencies = [ [[package]] name = "ruma" version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "377d836ac9faf53c56aa8610c596be4d2e0881600b20d0c4a3a09694989f664f" +source = "git+https://github.com/ruma/ruma.git?rev=deea762b8#deea762b8edc5abf9fc5fe3cf6daba8cb59ced75" dependencies = [ "assign", "js_int", - "ruma-api", "ruma-client-api", "ruma-common", - "ruma-events", "ruma-federation-api", - "ruma-identifiers", - "ruma-serde", "ruma-signatures", "ruma-state-res", ] -[[package]] -name = "ruma-api" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fc1c16c9b7d21791e4c2d082da3d050ea1cebe004af30275fb2e6f547e1a283" -dependencies = [ - "bytes", - "http", - "percent-encoding", - "ruma-api-macros", - "ruma-identifiers", - "ruma-serde", - "serde", - "serde_json", - "thiserror", - "tracing", -] - -[[package]] -name = "ruma-api-macros" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cc6143101ea576d8763468a3b8889c5d9062402204d172bde3b99912a16e5cc" -dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.36", - "quote 1.0.15", - "syn 1.0.86", -] - [[package]] name = "ruma-client-api" version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d360ec8cdb7e0815b8b6ab06345c68972aa2e7c564578cd05f3eb2845a785a9" +source = "git+https://github.com/ruma/ruma.git?rev=deea762b8#deea762b8edc5abf9fc5fe3cf6daba8cb59ced75" dependencies = [ "assign", "bytes", @@ -3542,11 +3507,7 @@ dependencies = [ "js_int", "maplit", "percent-encoding", - "ruma-api", "ruma-common", - "ruma-events", - "ruma-identifiers", - "ruma-serde", "serde", "serde_json", ] @@ -3554,154 +3515,72 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98080b1aac4045f5988ae5e2ccfe1864487c151c1717d29fe1388b7e06383d3e" +source = "git+https://github.com/ruma/ruma.git?rev=deea762b8#deea762b8edc5abf9fc5fe3cf6daba8cb59ced75" dependencies = [ + "base64", + "bytes", + "form_urlencoded", + "http", "indexmap", - "js_int", - "ruma-identifiers", - "ruma-serde", - "serde", - "serde_json", - "tracing", - "wildmatch", -] - -[[package]] -name = "ruma-events" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b661cc7dd619039c99aea1e42c06e3ac9a29a1d648dc3bcbb4f0dffcb49d04" -dependencies = [ "indoc", + "itoa", "js_int", + "percent-encoding", "pulldown-cmark", - "ruma-common", - "ruma-events-macros", - "ruma-identifiers", - "ruma-serde", + "rand 0.8.5", + "ruma-identifiers-validation", + "ruma-macros", "serde", "serde_json", "thiserror", + "tracing", + "url", + "uuid", "wildmatch", ] -[[package]] -name = "ruma-events-macros" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e9f4f3ac886d490d030bd3c5e50d21b80de5537bde04dd4529e27a0cc1e2201" -dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.36", - "quote 1.0.15", - "syn 1.0.86", -] - [[package]] name = "ruma-federation-api" version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf1c02bf70a1cde9cf7d014544f1f63dee122ba7026a3b5535a9fc4f3ab888cd" +source = "git+https://github.com/ruma/ruma.git?rev=deea762b8#deea762b8edc5abf9fc5fe3cf6daba8cb59ced75" dependencies = [ "js_int", - "ruma-api", "ruma-common", - "ruma-events", - "ruma-identifiers", - "ruma-serde", "serde", "serde_json", ] -[[package]] -name = "ruma-identifiers" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7bc99002443cfdf64d1158e8e6e280b3633e17d91049ad9516ad475358b3b8b" -dependencies = [ - "percent-encoding", - "rand 0.8.5", - "ruma-identifiers-macros", - "ruma-identifiers-validation 0.7.0", - "ruma-serde", - "ruma-serde-macros", - "serde", - "url", - "uuid", -] - -[[package]] -name = "ruma-identifiers-macros" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503738488e3a378677e8b159478dbb07d2d70f1e1f3320c0bd3a51a99e44cf7c" -dependencies = [ - "quote 1.0.15", - "ruma-identifiers-validation 0.6.0", - "syn 1.0.86", -] - -[[package]] -name = "ruma-identifiers-validation" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c670c45c3c86eaf5ff9b4bfd66a2a57116f2d808c9f8cbfc957cd34c48032ff9" -dependencies = [ - "thiserror", - "url", -] - [[package]] name = "ruma-identifiers-validation" version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc675917d537c870035d4681d7a2b939683fb908bbc036aa55889b09c5794f1" +source = "git+https://github.com/ruma/ruma.git?rev=deea762b8#deea762b8edc5abf9fc5fe3cf6daba8cb59ced75" dependencies = [ "thiserror", "url", ] [[package]] -name = "ruma-serde" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d44a6e4aabe679009ba0e26d37b43ea725591fcb3c82724bcfc0c3823d807cf" -dependencies = [ - "base64", - "bytes", - "form_urlencoded", - "itoa", - "js_int", - "ruma-serde-macros", - "serde", - "serde_json", -] - -[[package]] -name = "ruma-serde-macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d38cd6f6edebc09b9e4b4ecb24279dae0b700ecfc3a2d5eff9f8b60c41f73c03" +name = "ruma-macros" +version = "0.1.0" +source = "git+https://github.com/ruma/ruma.git?rev=deea762b8#deea762b8edc5abf9fc5fe3cf6daba8cb59ced75" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.36", "quote 1.0.15", + "ruma-identifiers-validation", "syn 1.0.86", ] [[package]] name = "ruma-signatures" version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f08deeb5241428e6f1db085bc0ae6aeb469d20f45164a7f5500901add47770d" +source = "git+https://github.com/ruma/ruma.git?rev=deea762b8#deea762b8edc5abf9fc5fe3cf6daba8cb59ced75" dependencies = [ "base64", "ed25519-dalek", "pkcs8", "rand 0.7.3", - "ruma-identifiers", - "ruma-serde", + "ruma-common", "serde_json", "sha2 0.9.9", "thiserror", @@ -3711,15 +3590,11 @@ dependencies = [ [[package]] name = "ruma-state-res" version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3328d01db08c51a66ac4093dd42151376a20fffebc6763a886d3e6d59d1ebc" +source = "git+https://github.com/ruma/ruma.git?rev=deea762b8#deea762b8edc5abf9fc5fe3cf6daba8cb59ced75" dependencies = [ "itertools", "js_int", "ruma-common", - "ruma-events", - "ruma-identifiers", - "ruma-serde", "serde", "serde_json", "thiserror", @@ -4597,7 +4472,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vodozemac" version = "0.1.0" -source = "git+https://github.com/matrix-org/vodozemac?rev=71a811026de9076922434381fa593f4184bf5a37#71a811026de9076922434381fa593f4184bf5a37" +source = "git+https://github.com/matrix-org/vodozemac?rev=16fb254aa3325c61ef949314c81c35f91d0664e1#16fb254aa3325c61ef949314c81c35f91d0664e1" dependencies = [ "aes 0.8.1", "arrayvec 0.7.2", diff --git a/Cargo.toml b/Cargo.toml index 8c0c4028..db341abc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -69,3 +69,8 @@ features = [ "sso_login", "markdown", ] + +[dependencies.ruma] +git = "https://github.com/ruma/ruma.git" +rev = "deea762b8" +features = ["unstable-pre-spec", "client-api-c"] diff --git a/src/components/auth_dialog.rs b/src/components/auth_dialog.rs index fdb50b69..d286320f 100644 --- a/src/components/auth_dialog.rs +++ b/src/components/auth_dialog.rs @@ -249,7 +249,7 @@ impl AuthDialog { let uiaa_info: UiaaInfo = match response { Ok(result) => return Ok(result), - Err(Error::Http(UiaaError(FromHttpResponseError::Http(ServerError::Known( + Err(Error::Http(UiaaError(FromHttpResponseError::Server(ServerError::Known( UiaaResponse::AuthResponse(uiaa_info), ))))) => uiaa_info, Err(error) => return Err(AuthError::ServerResponse(Box::new(error))), diff --git a/src/login/mod.rs b/src/login/mod.rs index 23ad4aa4..845b51b7 100644 --- a/src/login/mod.rs +++ b/src/login/mod.rs @@ -9,8 +9,7 @@ use matrix_sdk::{ LoginType::{Password, Sso}, SsoLoginType, }, - identifiers::Error as IdentifierError, - ServerName, + IdParseError, ServerName, }, Client, }; @@ -633,7 +632,7 @@ impl Default for Login { } } -fn build_server_name(server: &str) -> Result, IdentifierError> { +fn build_server_name(server: &str) -> Result, IdParseError> { let server = server .strip_prefix("http://") .or_else(|| server.strip_prefix("https://")) diff --git a/src/secret.rs b/src/secret.rs index 91bdd679..1cb1be69 100644 --- a/src/secret.rs +++ b/src/secret.rs @@ -7,7 +7,7 @@ use libsecret::{ Retrievable, Schema, SchemaAttributeType, SchemaFlags, SearchFlags, Value, COLLECTION_DEFAULT, }; use log::error; -use matrix_sdk::ruma::identifiers::{DeviceId, UserId}; +use matrix_sdk::ruma::{DeviceId, UserId}; use serde::{Deserialize, Serialize}; use serde_json::error::Error as JsonError; use url::Url; diff --git a/src/session/account_settings/devices_page/device.rs b/src/session/account_settings/devices_page/device.rs index 4b17d2f1..f6a64bca 100644 --- a/src/session/account_settings/devices_page/device.rs +++ b/src/session/account_settings/devices_page/device.rs @@ -3,8 +3,7 @@ use matrix_sdk::{ encryption::identities::Device as CryptoDevice, ruma::{ api::client::device::{delete_device, Device as MatrixDevice}, - assign, - identifiers::DeviceId, + assign, DeviceId, }, }; diff --git a/src/session/account_settings/user_page/change_password_subpage.rs b/src/session/account_settings/user_page/change_password_subpage.rs index b8071082..e8a0a1dc 100644 --- a/src/session/account_settings/user_page/change_password_subpage.rs +++ b/src/session/account_settings/user_page/change_password_subpage.rs @@ -320,7 +320,7 @@ impl ChangePasswordSubpage { AuthError::UserCancelled => {} AuthError::ServerResponse(error) if matches!(error.as_ref(), MatrixError::Http(HttpError::ClientApi( - FromHttpResponseError::Http(ServerError::Known(error)), + FromHttpResponseError::Server(ServerError::Known(error)), )) if error.kind.as_ref() == "M_WEAK_PASSWORD") => { error!("Weak password: {:?}", error); diff --git a/src/session/account_settings/user_page/mod.rs b/src/session/account_settings/user_page/mod.rs index c1053e8a..e9faa131 100644 --- a/src/session/account_settings/user_page/mod.rs +++ b/src/session/account_settings/user_page/mod.rs @@ -9,7 +9,7 @@ use gtk::{ CompositeTemplate, }; use log::error; -use matrix_sdk::ruma::{api::client::capabilities::get_capabilities, MxcUri}; +use matrix_sdk::ruma::{api::client::discovery::get_capabilities, MxcUri}; mod change_password_subpage; mod deactivate_account_subpage; diff --git a/src/session/avatar.rs b/src/session/avatar.rs index 3b5efb3f..3f425283 100644 --- a/src/session/avatar.rs +++ b/src/session/avatar.rs @@ -3,12 +3,15 @@ use std::path::Path; use gtk::{gdk, gio, glib, glib::clone, prelude::*, subclass::prelude::*}; use log::{debug, error, info}; use matrix_sdk::{ - media::{MediaFormat, MediaRequest, MediaThumbnailSize, MediaType}, + media::{MediaFormat, MediaRequest, MediaThumbnailSize}, room::Room as MatrixRoom, ruma::{ api::client::media::get_content_thumbnail::v3::Method, - events::{room::avatar::RoomAvatarEventContent, AnyStateEventContent}, - identifiers::MxcUri, + events::{ + room::{avatar::RoomAvatarEventContent, MediaSource}, + AnyStateEventContent, + }, + MxcUri, }, Client, }; @@ -165,7 +168,7 @@ impl Avatar { let client = self.session().client(); let needed_size = self.needed_size(); let request = MediaRequest { - media_type: MediaType::Uri(url), + source: MediaSource::Plain(url), format: MediaFormat::Thumbnail(MediaThumbnailSize { width: needed_size.into(), height: needed_size.into(), diff --git a/src/session/content/explore/mod.rs b/src/session/content/explore/mod.rs index e908ad7a..d7dbbac4 100644 --- a/src/session/content/explore/mod.rs +++ b/src/session/content/explore/mod.rs @@ -5,7 +5,7 @@ mod public_room_row; use adw::subclass::prelude::*; use gtk::{glib, glib::clone, prelude::*, subclass::prelude::*, CompositeTemplate}; use log::error; -use matrix_sdk::ruma::api::client::thirdparty::get_protocols; +use ruma::api::client::thirdparty::get_protocols; pub use self::{ public_room::PublicRoom, public_room_list::PublicRoomList, public_room_row::PublicRoomRow, diff --git a/src/session/content/explore/public_room.rs b/src/session/content/explore/public_room.rs index 4c9dfb1b..df3df63f 100644 --- a/src/session/content/explore/public_room.rs +++ b/src/session/content/explore/public_room.rs @@ -1,8 +1,5 @@ use gtk::{glib, glib::clone, prelude::*, subclass::prelude::*}; -use matrix_sdk::ruma::{ - directory::PublicRoomsChunk, - identifiers::{RoomId, RoomOrAliasId}, -}; +use matrix_sdk::ruma::{directory::PublicRoomsChunk, RoomId, RoomOrAliasId}; use crate::session::{room::Room, Avatar, RoomList}; diff --git a/src/session/content/explore/public_room_list.rs b/src/session/content/explore/public_room_list.rs index 4f9409e2..c0967b1b 100644 --- a/src/session/content/explore/public_room_list.rs +++ b/src/session/content/explore/public_room_list.rs @@ -8,8 +8,7 @@ use matrix_sdk::ruma::{ }, assign, directory::{Filter, RoomNetwork}, - identifiers::ServerName, - uint, + uint, ServerName, }; use crate::{ diff --git a/src/session/content/room_details/invite_subpage/invitee.rs b/src/session/content/room_details/invite_subpage/invitee.rs index cce5d7ac..05226f6f 100644 --- a/src/session/content/room_details/invite_subpage/invitee.rs +++ b/src/session/content/room_details/invite_subpage/invitee.rs @@ -1,5 +1,5 @@ use gtk::{glib, prelude::*, subclass::prelude::*}; -use matrix_sdk::ruma::identifiers::{MxcUri, UserId}; +use matrix_sdk::ruma::{MxcUri, UserId}; use crate::session::{user::UserExt, Session, User}; diff --git a/src/session/content/room_details/invite_subpage/invitee_list.rs b/src/session/content/room_details/invite_subpage/invitee_list.rs index 04f4a535..9e49aa38 100644 --- a/src/session/content/room_details/invite_subpage/invitee_list.rs +++ b/src/session/content/room_details/invite_subpage/invitee_list.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use gtk::{gio, glib, glib::clone, prelude::*, subclass::prelude::*}; use log::error; use matrix_sdk::{ - ruma::{api::client::user_directory::search_users, identifiers::UserId}, + ruma::{api::client::user_directory::search_users, UserId}, HttpError, }; diff --git a/src/session/content/room_details/mod.rs b/src/session/content/room_details/mod.rs index e6b35f4a..445dbfd0 100644 --- a/src/session/content/room_details/mod.rs +++ b/src/session/content/room_details/mod.rs @@ -9,7 +9,7 @@ use gtk::{ subclass::prelude::*, CompositeTemplate, }; -use matrix_sdk::ruma::events::EventType; +use matrix_sdk::ruma::events::RoomEventType; pub use self::{invite_subpage::InviteSubpage, member_page::MemberPage}; use crate::{ @@ -156,7 +156,7 @@ impl RoomDetails { )); let room_avatar_changeable = - room.new_allowed_expr(RoomAction::StateEvent(EventType::RoomAvatar)); + room.new_allowed_expr(RoomAction::StateEvent(RoomEventType::RoomAvatar)); let room_avatar_removable = and_expr(&room_avatar_changeable, &room_avatar_exists); room_avatar_removable.bind(&avatar_remove_button.get(), "visible", gtk::Widget::NONE); @@ -200,9 +200,9 @@ impl RoomDetails { // Hide edit controls when the user is not eligible to perform the actions. let room = self.room(); let room_name_changeable = - room.new_allowed_expr(RoomAction::StateEvent(EventType::RoomName)); + room.new_allowed_expr(RoomAction::StateEvent(RoomEventType::RoomName)); let room_topic_changeable = - room.new_allowed_expr(RoomAction::StateEvent(EventType::RoomTopic)); + room.new_allowed_expr(RoomAction::StateEvent(RoomEventType::RoomTopic)); let edit_toggle_visible = or_expr(room_name_changeable, room_topic_changeable); edit_toggle_visible.bind(&edit_toggle.get(), "visible", gtk::Widget::NONE); diff --git a/src/session/content/room_history/message_row/audio.rs b/src/session/content/room_history/message_row/audio.rs index e2ed8e87..f7bfa41f 100644 --- a/src/session/content/room_history/message_row/audio.rs +++ b/src/session/content/room_history/message_row/audio.rs @@ -211,7 +211,7 @@ impl MessageAudio { self.set_state(MediaState::Loading); let mut path = glib::tmp_dir(); - path.push(media_type_uid(audio.file())); + path.push(media_type_uid(audio.source())); let file = gio::File::for_path(path); if file.query_exists(gio::Cancellable::NONE) { diff --git a/src/session/content/room_history/message_row/media.rs b/src/session/content/room_history/message_row/media.rs index d2132ab0..9a122e6a 100644 --- a/src/session/content/room_history/message_row/media.rs +++ b/src/session/content/room_history/message_row/media.rs @@ -382,29 +382,30 @@ impl MessageMedia { let client = session.client(); let handle = spawn_tokio!(async move { - let thumbnail = if media_type != MediaType::Video && content.thumbnail().is_some() { - client - .get_thumbnail( - content.clone(), - MediaThumbnailSize { - method: Method::Scale, - width: uint!(320), - height: uint!(240), - }, - true, - ) - .await - .ok() - .flatten() - } else { - None - }; + let thumbnail = + if media_type != MediaType::Video && content.thumbnail_source().is_some() { + client + .get_thumbnail( + content.clone(), + MediaThumbnailSize { + method: Method::Scale, + width: uint!(320), + height: uint!(240), + }, + true, + ) + .await + .ok() + .flatten() + } else { + None + }; if let Some(data) = thumbnail { - let id = media_type_uid(content.thumbnail()); + let id = media_type_uid(content.thumbnail_source()); Ok((Some(data), id)) } else { - let id = media_type_uid(content.file()); + let id = media_type_uid(content.source()); client.get_file(content, true).await.map(|data| (data, id)) } }); diff --git a/src/session/content/room_history/message_row/mod.rs b/src/session/content/room_history/message_row/mod.rs index b08d0c11..7152822a 100644 --- a/src/session/content/room_history/message_row/mod.rs +++ b/src/session/content/room_history/message_row/mod.rs @@ -17,7 +17,7 @@ use gtk::{ use log::warn; use matrix_sdk::ruma::events::{ room::message::{MessageType, Relation}, - AnyMessageEventContent, + AnyMessageLikeEventContent, }; use self::{ @@ -239,7 +239,7 @@ fn build_content(parent: &adw::Bin, event: &Event, compact: bool) { // TODO: display reaction events from event.relates_to() // TODO: we should reuse the already present child widgets when possible match event.content() { - Some(AnyMessageEventContent::RoomMessage(message)) => { + Some(AnyMessageLikeEventContent::RoomMessage(message)) => { let msgtype = if let Some(Relation::Replacement(replacement)) = message.relates_to { replacement.new_content.msgtype } else { @@ -382,7 +382,7 @@ fn build_content(parent: &adw::Bin, event: &Event, compact: bool) { } } } - Some(AnyMessageEventContent::Sticker(content)) => { + Some(AnyMessageLikeEventContent::Sticker(content)) => { let child = if let Some(Ok(child)) = parent.child().map(|w| w.downcast::()) { child @@ -393,7 +393,7 @@ fn build_content(parent: &adw::Bin, event: &Event, compact: bool) { }; child.sticker(content, &event.room().session(), compact); } - Some(AnyMessageEventContent::RoomEncrypted(content)) => { + Some(AnyMessageLikeEventContent::RoomEncrypted(content)) => { warn!("Couldn't decrypt event {:?}", content); let child = if let Some(Ok(child)) = parent.child().map(|w| w.downcast::()) { @@ -405,7 +405,7 @@ fn build_content(parent: &adw::Bin, event: &Event, compact: bool) { }; child.text(gettext("Fractal couldn't decrypt this message.")); } - Some(AnyMessageEventContent::RoomRedaction(_)) => { + Some(AnyMessageLikeEventContent::RoomRedaction(_)) => { let child = if let Some(Ok(child)) = parent.child().map(|w| w.downcast::()) { child diff --git a/src/session/content/room_history/state_row/mod.rs b/src/session/content/room_history/state_row/mod.rs index 8abd1254..e2b3dfcc 100644 --- a/src/session/content/room_history/state_row/mod.rs +++ b/src/session/content/room_history/state_row/mod.rs @@ -76,7 +76,7 @@ impl StateRow { match event.membership { MembershipState::Join => { - let message = match state.prev_content() { + let message = match state.unsigned().prev_content { Some(AnyStateEventContent::RoomMember(prev)) if event.membership != prev.membership => { @@ -132,7 +132,7 @@ impl StateRow { )) } MembershipState::Leave => { - let message = match state.prev_content() { + let message = match state.unsigned().prev_content { Some(AnyStateEventContent::RoomMember(prev)) if prev.membership == MembershipState::Invite => { diff --git a/src/session/media_viewer.rs b/src/session/media_viewer.rs index 1d696e74..65df94b3 100644 --- a/src/session/media_viewer.rs +++ b/src/session/media_viewer.rs @@ -2,7 +2,7 @@ use adw::{prelude::*, subclass::prelude::*}; use gettextrs::gettext; use gtk::{gdk, gio, glib, glib::clone, subclass::prelude::*, CompositeTemplate}; use log::warn; -use matrix_sdk::ruma::events::{room::message::MessageType, AnyMessageEventContent}; +use matrix_sdk::ruma::events::{room::message::MessageType, AnyMessageLikeEventContent}; use super::room::EventActions; use crate::{session::room::Event, spawn, utils::cache_dir, Window}; @@ -220,7 +220,8 @@ impl MediaViewer { fn build(&self) { if let Some(event) = self.event() { self.set_event_actions(Some(&event)); - if let Some(AnyMessageEventContent::RoomMessage(content)) = event.message_content() { + if let Some(AnyMessageLikeEventContent::RoomMessage(content)) = event.message_content() + { match content.msgtype { MessageType::Image(image) => { self.set_body(Some(image.body)); diff --git a/src/session/mod.rs b/src/session/mod.rs index db515e7e..9bbee2f7 100644 --- a/src/session/mod.rs +++ b/src/session/mod.rs @@ -35,8 +35,7 @@ use matrix_sdk::{ }, error::{FromHttpResponseError, ServerError}, }, - assign, - identifiers::RoomId, + assign, RoomId, }, store::{make_store_config, OpenStoreError}, Client, ClientBuildError, Error, HttpError, @@ -698,9 +697,9 @@ impl Session { } } Err(error) => { - if let matrix_sdk::Error::Http(HttpError::ClientApi(FromHttpResponseError::Http( - ServerError::Known(ref error), - ))) = error + if let matrix_sdk::Error::Http(HttpError::ClientApi( + FromHttpResponseError::Server(ServerError::Known(ref error)), + )) = error { if let ErrorKind::UnknownToken { soft_logout: _ } = error.kind { self.handle_logged_out(); diff --git a/src/session/room/event.rs b/src/session/room/event.rs index 1b8b1ab3..7de06844 100644 --- a/src/session/room/event.rs +++ b/src/session/room/event.rs @@ -12,18 +12,15 @@ use matrix_sdk::{ media::MediaEventContent, ruma::{ events::{ - room::{ - member::MembershipState, - message::{MessageType, Relation}, - }, - AnyMessageEventContent, AnySyncMessageEvent, AnySyncRoomEvent, AnySyncStateEvent, - Unsigned, + room::message::{MessageType, Relation}, + AnyMessageLikeEventContent, AnySyncMessageLikeEvent, AnySyncRoomEvent, + AnySyncStateEvent, MessageLikeUnsigned, }, - identifiers::{EventId, TransactionId, UserId}, - MilliSecondsSinceUnixEpoch, + EventId, MilliSecondsSinceUnixEpoch, TransactionId, UserId, }, Error as MatrixError, }; +use ruma::events::room::member::MembershipState; use crate::{ session::{ @@ -265,9 +262,9 @@ impl Event { .as_ref() .unwrap() .event - .get_field::("unsigned") + .get_field::("unsigned") .ok() - .and_then(|opt| opt) + .flatten() .and_then(|unsigned| unsigned.transaction_id) } @@ -358,11 +355,11 @@ impl Event { /// Find the related event if any pub fn related_matrix_event(&self) -> Option> { match self.imp().event.borrow().as_ref()? { - AnySyncRoomEvent::Message(ref message) => match message { - AnySyncMessageEvent::RoomRedaction(event) => Some(event.redacts.clone()), + AnySyncRoomEvent::MessageLike(ref message) => match message { + AnySyncMessageLikeEvent::RoomRedaction(event) => Some(event.redacts.clone()), _ => match message.content() { - AnyMessageEventContent::Reaction(event) => Some(event.relates_to.event_id), - AnyMessageEventContent::RoomMessage(event) => match event.relates_to { + AnyMessageLikeEventContent::Reaction(event) => Some(event.relates_to.event_id), + AnyMessageLikeEventContent::RoomMessage(event) => match event.relates_to { Some(relates_to) => match relates_to { // TODO: Figure out Relation::Annotation(), Relation::Reference() but // they are pre-specs for now See: https://github.com/uhoreg/matrix-doc/blob/aggregations-reactions/proposals/2677-reactions.md @@ -386,8 +383,8 @@ impl Event { let priv_ = self.imp(); if self.related_matrix_event().is_some() { - if let Some(AnySyncRoomEvent::Message(message)) = priv_.event.borrow().as_ref() { - if let AnyMessageEventContent::RoomMessage(content) = message.content() { + if let Some(AnySyncRoomEvent::MessageLike(message)) = priv_.event.borrow().as_ref() { + if let AnyMessageLikeEventContent::RoomMessage(content) = message.content() { if let Some(Relation::Reply { in_reply_to: _ }) = content.relates_to { return false; } @@ -400,21 +397,21 @@ impl Event { // List of all events to be hidden. match event.as_ref() { - Some(AnySyncRoomEvent::Message(message)) => matches!( + Some(AnySyncRoomEvent::MessageLike(message)) => matches!( message, - AnySyncMessageEvent::CallAnswer(_) - | AnySyncMessageEvent::CallInvite(_) - | AnySyncMessageEvent::CallHangup(_) - | AnySyncMessageEvent::CallCandidates(_) - | AnySyncMessageEvent::KeyVerificationReady(_) - | AnySyncMessageEvent::KeyVerificationStart(_) - | AnySyncMessageEvent::KeyVerificationCancel(_) - | AnySyncMessageEvent::KeyVerificationAccept(_) - | AnySyncMessageEvent::KeyVerificationKey(_) - | AnySyncMessageEvent::KeyVerificationMac(_) - | AnySyncMessageEvent::KeyVerificationDone(_) - | AnySyncMessageEvent::RoomMessageFeedback(_) - | AnySyncMessageEvent::RoomRedaction(_) + AnySyncMessageLikeEvent::CallAnswer(_) + | AnySyncMessageLikeEvent::CallInvite(_) + | AnySyncMessageLikeEvent::CallHangup(_) + | AnySyncMessageLikeEvent::CallCandidates(_) + | AnySyncMessageLikeEvent::KeyVerificationReady(_) + | AnySyncMessageLikeEvent::KeyVerificationStart(_) + | AnySyncMessageLikeEvent::KeyVerificationCancel(_) + | AnySyncMessageLikeEvent::KeyVerificationAccept(_) + | AnySyncMessageLikeEvent::KeyVerificationKey(_) + | AnySyncMessageLikeEvent::KeyVerificationMac(_) + | AnySyncMessageLikeEvent::KeyVerificationDone(_) + | AnySyncMessageLikeEvent::RoomMessageFeedback(_) + | AnySyncMessageLikeEvent::RoomRedaction(_) ), Some(AnySyncRoomEvent::State(state)) => matches!( state, @@ -434,7 +431,7 @@ impl Event { | AnySyncStateEvent::SpaceParent(_) | AnySyncStateEvent::SpaceChild(_) ), - Some(AnySyncRoomEvent::RedactedMessage(_)) => true, + Some(AnySyncRoomEvent::RedactedMessageLike(_)) => true, Some(AnySyncRoomEvent::RedactedState(_)) => true, _ => false, } @@ -456,16 +453,16 @@ impl Event { /// The content of this message. /// /// Returns `None` if this is not a message. - pub fn message_content(&self) -> Option { + pub fn message_content(&self) -> Option { match self.matrix_event() { - Some(AnySyncRoomEvent::Message(message)) => Some(message.content()), + Some(AnySyncRoomEvent::MessageLike(message)) => Some(message.content()), _ => None, } } pub fn can_hide_header(&self) -> bool { match self.message_content() { - Some(AnyMessageEventContent::RoomMessage(message)) => { + Some(AnyMessageLikeEventContent::RoomMessage(message)) => { matches!( message.msgtype, MessageType::Audio(_) @@ -477,7 +474,7 @@ impl Event { | MessageType::Video(_) ) } - Some(AnyMessageEventContent::Sticker(_)) => true, + Some(AnyMessageLikeEventContent::Sticker(_)) => true, _ => false, } } @@ -490,10 +487,10 @@ impl Event { /// - `RoomMessage` with `Relation::Replacement` pub fn is_replacing_event(&self) -> bool { match self.matrix_event() { - Some(AnySyncRoomEvent::Message(AnySyncMessageEvent::RoomMessage(message))) => { + Some(AnySyncRoomEvent::MessageLike(AnySyncMessageLikeEvent::RoomMessage(message))) => { matches!(message.content.relates_to, Some(Relation::Replacement(_))) } - Some(AnySyncRoomEvent::Message(AnySyncMessageEvent::RoomRedaction(_))) => true, + Some(AnySyncRoomEvent::MessageLike(AnySyncMessageLikeEvent::RoomRedaction(_))) => true, _ => false, } } @@ -562,8 +559,8 @@ impl Event { .filter(|event| { matches!( event.matrix_event(), - Some(AnySyncRoomEvent::Message( - AnySyncMessageEvent::RoomRedaction(_) + Some(AnySyncRoomEvent::MessageLike( + AnySyncMessageLikeEvent::RoomRedaction(_) )) ) }) @@ -574,7 +571,7 @@ impl Event { pub fn is_reaction(&self) -> bool { matches!( self.message_content(), - Some(AnyMessageEventContent::Reaction(_)) + Some(AnyMessageLikeEventContent::Reaction(_)) ) } @@ -591,9 +588,9 @@ impl Event { } /// The content of this matrix event. - pub fn original_content(&self) -> Option { + pub fn original_content(&self) -> Option { match self.matrix_event()? { - AnySyncRoomEvent::Message(message) => Some(message.content()), + AnySyncRoomEvent::MessageLike(message) => Some(message.content()), _ => None, } } @@ -602,7 +599,7 @@ impl Event { /// /// If this matrix event has been replaced, returns the replacing `Event`'s /// content. - pub fn content(&self) -> Option { + pub fn content(&self) -> Option { self.replacement() .and_then(|replacement| replacement.content()) .or_else(|| self.original_content()) @@ -627,11 +624,11 @@ impl Event { /// error occurred while fetching the content. Panics on an incompatible /// event. `uid` is a unique identifier for this media. pub async fn get_media_content(&self) -> Result<(String, String, Vec), matrix_sdk::Error> { - if let AnyMessageEventContent::RoomMessage(content) = self.message_content().unwrap() { + if let AnyMessageLikeEventContent::RoomMessage(content) = self.message_content().unwrap() { let client = self.room().session().client(); match content.msgtype { MessageType::File(content) => { - let uid = media_type_uid(content.file()); + let uid = media_type_uid(content.source()); let filename = content .filename .as_ref() @@ -653,7 +650,7 @@ impl Event { return Ok((uid, filename, data)); } MessageType::Image(content) => { - let uid = media_type_uid(content.file()); + let uid = media_type_uid(content.source()); let filename = if content.body.is_empty() { filename_for_mime( content @@ -670,7 +667,7 @@ impl Event { return Ok((uid, filename, data)); } MessageType::Video(content) => { - let uid = media_type_uid(content.file()); + let uid = media_type_uid(content.source()); let filename = if content.body.is_empty() { filename_for_mime( content @@ -696,7 +693,7 @@ impl Event { /// Whether this is a media event that can be viewed. pub fn can_view_media(&self) -> bool { match self.message_content() { - Some(AnyMessageEventContent::RoomMessage(message)) => { + Some(AnyMessageLikeEventContent::RoomMessage(message)) => { matches!( message.msgtype, MessageType::Image(_) | MessageType::Video(_) @@ -709,7 +706,7 @@ impl Event { /// Get the id of the event this `Event` replies to, if any. pub fn reply_to_id(&self) -> Option> { match self.original_content()? { - AnyMessageEventContent::RoomMessage(message) => { + AnyMessageLikeEventContent::RoomMessage(message) => { if let Some(Relation::Reply { in_reply_to }) = message.relates_to { Some(in_reply_to.event_id) } else { @@ -749,11 +746,11 @@ impl Event { /// user joining the room, which should be the oldest possible change. pub fn can_be_latest_change(&self) -> bool { if let Some(event) = self.matrix_event() { - matches!(event, AnySyncRoomEvent::Message(_)) + matches!(event, AnySyncRoomEvent::MessageLike(_)) || matches!(event, AnySyncRoomEvent::State(AnySyncStateEvent::RoomMember(event)) if event.state_key == self.room().session().user().unwrap().user_id().to_string() && event.content.membership == MembershipState::Join - && event.prev_content.as_ref() + && event.unsigned.prev_content.as_ref() .filter(|content| content.membership == MembershipState::Join).is_none() ) } else { diff --git a/src/session/room/event_actions.rs b/src/session/room/event_actions.rs index c0105f15..002d5671 100644 --- a/src/session/room/event_actions.rs +++ b/src/session/room/event_actions.rs @@ -1,7 +1,7 @@ use gettextrs::gettext; use gtk::{gio, glib, glib::clone, prelude::*}; use log::error; -use matrix_sdk::ruma::events::{room::message::MessageType, AnyMessageEventContent}; +use matrix_sdk::ruma::events::{room::message::MessageType, AnyMessageLikeEventContent}; use once_cell::sync::Lazy; use crate::{ @@ -90,7 +90,7 @@ where }) ); - if let Some(AnyMessageEventContent::RoomMessage(message)) = event.message_content() { + if let Some(AnyMessageLikeEventContent::RoomMessage(message)) = event.message_content() { let user_id = event .room() .session() diff --git a/src/session/room/item.rs b/src/session/room/item.rs index 37285a60..6851a61e 100644 --- a/src/session/room/item.rs +++ b/src/session/room/item.rs @@ -1,10 +1,7 @@ use std::sync::Arc; use gtk::{glib, glib::DateTime, prelude::*, subclass::prelude::*}; -use matrix_sdk::ruma::{ - events::AnySyncRoomEvent, - identifiers::{EventId, UserId}, -}; +use matrix_sdk::ruma::{events::AnySyncRoomEvent, EventId, UserId}; use crate::session::room::Event; diff --git a/src/session/room/member.rs b/src/session/room/member.rs index af94b853..0da9950c 100644 --- a/src/session/room/member.rs +++ b/src/session/room/member.rs @@ -5,7 +5,7 @@ use matrix_sdk::{ room::member::{MembershipState, RoomMemberEventContent}, StrippedStateEvent, SyncStateEvent, }, - identifiers::{MxcUri, UserId}, + MxcUri, UserId, }, RoomMember, }; diff --git a/src/session/room/mod.rs b/src/session/room/mod.rs index abfd29a0..a344490d 100644 --- a/src/session/room/mod.rs +++ b/src/session/room/mod.rs @@ -32,11 +32,11 @@ use matrix_sdk::{ }, tag::{TagInfo, TagName}, AnyRoomAccountDataEvent, AnyStateEventContent, AnyStrippedStateEvent, AnySyncRoomEvent, - AnySyncStateEvent, MessageEventContent, StateEventType, SyncMessageEvent, Unsigned, + AnySyncStateEvent, EventContent, MessageLikeEventType, MessageLikeUnsigned, + StateEventType, SyncMessageLikeEvent, }, - identifiers::{EventId, RoomId, UserId}, serde::Raw, - MilliSecondsSinceUnixEpoch, + EventId, MilliSecondsSinceUnixEpoch, RoomId, UserId, }, }; @@ -910,15 +910,18 @@ impl Room { } /// Send a message with the given `content` in this room. - pub fn send_room_message_event(&self, content: impl MessageEventContent + Send + 'static) { + pub fn send_room_message_event( + &self, + content: impl EventContent + Send + 'static, + ) { if let MatrixRoom::Joined(matrix_room) = self.matrix_room() { let (txn_id, event_id) = pending_event_ids(); - let matrix_event = SyncMessageEvent { + let matrix_event = SyncMessageLikeEvent { content, event_id, sender: self.session().user().unwrap().user_id().as_ref().to_owned(), origin_server_ts: MilliSecondsSinceUnixEpoch::now(), - unsigned: Unsigned::default(), + unsigned: MessageLikeUnsigned::default(), }; let raw_event: Raw = Raw::new(&matrix_event).unwrap().cast(); @@ -966,7 +969,7 @@ impl Room { event_id, sender: self.session().user().unwrap().user_id().as_ref().to_owned(), origin_server_ts: MilliSecondsSinceUnixEpoch::now(), - unsigned: Unsigned::default(), + unsigned: MessageLikeUnsigned::default(), }; if let MatrixRoom::Joined(matrix_room) = self.matrix_room() { diff --git a/src/session/room/power_levels.rs b/src/session/room/power_levels.rs index 684e1e85..9923493e 100644 --- a/src/session/room/power_levels.rs +++ b/src/session/room/power_levels.rs @@ -1,6 +1,6 @@ use gtk::{glib, glib::closure, prelude::*, subclass::prelude::*}; use matrix_sdk::ruma::events::{ - room::power_levels::RoomPowerLevelsEventContent, EventType, SyncStateEvent, + room::power_levels::RoomPowerLevelsEventContent, RoomEventType, SyncStateEvent, }; use crate::session::room::Member; @@ -128,7 +128,7 @@ fn min_level_for_room_action( .events .get(event_type) .unwrap_or(&content.state_default), - RoomAction::MessageEvent(event_type) => *content + RoomAction::MessageLikeEvent(event_type) => *content .events .get(event_type) .unwrap_or(&content.events_default), @@ -143,6 +143,6 @@ pub enum RoomAction { Kick, Redact, RoomNotification, - StateEvent(EventType), - MessageEvent(EventType), + StateEvent(RoomEventType), + MessageLikeEvent(RoomEventType), } diff --git a/src/session/room/reaction_list.rs b/src/session/room/reaction_list.rs index 7968ced9..9cc9b74c 100644 --- a/src/session/room/reaction_list.rs +++ b/src/session/room/reaction_list.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use gtk::{gio, glib, glib::clone, prelude::*, subclass::prelude::*}; -use matrix_sdk::ruma::events::AnyMessageEventContent; +use matrix_sdk::ruma::events::AnyMessageLikeEventContent; use super::{Event, ReactionGroup}; @@ -68,10 +68,10 @@ impl ReactionList { // Group reactions by key let mut grouped_reactions: HashMap> = HashMap::new(); for event in new_reactions { - if let Some(AnyMessageEventContent::Reaction(reaction)) = event.message_content() { + if let Some(AnyMessageLikeEventContent::Reaction(reaction)) = event.message_content() { let relation = reaction.relates_to; grouped_reactions - .entry(relation.emoji) + .entry(relation.key) .or_default() .push(event); } diff --git a/src/session/room/timeline.rs b/src/session/room/timeline.rs index afbdee03..8569086a 100644 --- a/src/session/room/timeline.rs +++ b/src/session/room/timeline.rs @@ -10,8 +10,8 @@ use log::{error, warn}; use matrix_sdk::{ deserialized_responses::SyncRoomEvent, ruma::{ - events::{room::message::MessageType, AnySyncMessageEvent, AnySyncRoomEvent}, - identifiers::{EventId, TransactionId}, + events::{room::message::MessageType, AnySyncMessageLikeEvent, AnySyncRoomEvent}, + EventId, TransactionId, }, Error as MatrixError, }; @@ -846,7 +846,7 @@ impl Timeline { } fn handle_verification(&self, event: &Event) { - let message = if let Some(AnySyncRoomEvent::Message(message)) = event.matrix_event() { + let message = if let Some(AnySyncRoomEvent::MessageLike(message)) = event.matrix_event() { message } else { return; @@ -856,7 +856,7 @@ impl Timeline { let verification_list = session.verification_list(); let request = match message { - AnySyncMessageEvent::RoomMessage(message) => { + AnySyncMessageLikeEvent::RoomMessage(message) => { if let MessageType::VerificationRequest(request) = message.content.msgtype { // Ignore request that are too old if let Some(time) = message.origin_server_ts.to_system_time() { @@ -914,25 +914,25 @@ impl Timeline { return; } - AnySyncMessageEvent::KeyVerificationReady(e) => { + AnySyncMessageLikeEvent::KeyVerificationReady(e) => { verification_list.get_by_id(&e.sender, &e.content.relates_to.event_id) } - AnySyncMessageEvent::KeyVerificationStart(e) => { + AnySyncMessageLikeEvent::KeyVerificationStart(e) => { verification_list.get_by_id(&e.sender, &e.content.relates_to.event_id) } - AnySyncMessageEvent::KeyVerificationCancel(e) => { + AnySyncMessageLikeEvent::KeyVerificationCancel(e) => { verification_list.get_by_id(&e.sender, &e.content.relates_to.event_id) } - AnySyncMessageEvent::KeyVerificationAccept(e) => { + AnySyncMessageLikeEvent::KeyVerificationAccept(e) => { verification_list.get_by_id(&e.sender, &e.content.relates_to.event_id) } - AnySyncMessageEvent::KeyVerificationKey(e) => { + AnySyncMessageLikeEvent::KeyVerificationKey(e) => { verification_list.get_by_id(&e.sender, &e.content.relates_to.event_id) } - AnySyncMessageEvent::KeyVerificationMac(e) => { + AnySyncMessageLikeEvent::KeyVerificationMac(e) => { verification_list.get_by_id(&e.sender, &e.content.relates_to.event_id) } - AnySyncMessageEvent::KeyVerificationDone(e) => { + AnySyncMessageLikeEvent::KeyVerificationDone(e) => { verification_list.get_by_id(&e.sender, &e.content.relates_to.event_id) } _ => { diff --git a/src/session/room_creation/mod.rs b/src/session/room_creation/mod.rs index 2f84b7fb..973c23c9 100644 --- a/src/session/room_creation/mod.rs +++ b/src/session/room_creation/mod.rs @@ -14,7 +14,8 @@ use matrix_sdk::{ error::{FromHttpResponseError, ServerError}, }, assign, - identifiers::{Error, RoomName}, + common::RoomName, + IdParseError, }, HttpError, }; @@ -266,7 +267,7 @@ impl RoomCreation { priv_.cancel_button.set_sensitive(true); // Treat the room address already taken error special - if let HttpError::ClientApi(FromHttpResponseError::Http(ServerError::Known( + if let HttpError::ClientApi(FromHttpResponseError::Server(ServerError::Known( ref client_error, ))) = error { @@ -293,8 +294,8 @@ impl RoomCreation { let (is_name_valid, has_error) = match <&RoomName>::try_from(priv_.room_name.text().as_str()) { Ok(_) => (true, false), - Err(Error::EmptyRoomName) => (false, false), - Err(Error::MaximumLengthExceeded) => { + Err(IdParseError::EmptyRoomName) => (false, false), + Err(IdParseError::MaximumLengthExceeded) => { priv_ .room_name_error .set_text(&gettext("Too long. Use a shorter name.")); diff --git a/src/session/room_list.rs b/src/session/room_list.rs index 7c7c29b3..256938ca 100644 --- a/src/session/room_list.rs +++ b/src/session/room_list.rs @@ -6,7 +6,7 @@ use indexmap::map::IndexMap; use log::error; use matrix_sdk::{ deserialized_responses::Rooms as ResponseRooms, - ruma::identifiers::{RoomId, RoomOrAliasId}, + ruma::{RoomId, RoomOrAliasId}, }; use crate::{ diff --git a/src/session/user.rs b/src/session/user.rs index 442a13cc..b87c7ae2 100644 --- a/src/session/user.rs +++ b/src/session/user.rs @@ -4,7 +4,7 @@ use gtk::{glib, glib::clone, prelude::*, subclass::prelude::*}; use log::error; use matrix_sdk::{ encryption::identities::UserIdentity, - ruma::identifiers::{MxcUri, UserId}, + ruma::{MxcUri, UserId}, }; use crate::{ diff --git a/src/session/verification/identity_verification.rs b/src/session/verification/identity_verification.rs index f3c06cb4..9b5ba092 100644 --- a/src/session/verification/identity_verification.rs +++ b/src/session/verification/identity_verification.rs @@ -13,7 +13,7 @@ use matrix_sdk::{ }, ruma::{ events::key::verification::{cancel::CancelCode, VerificationMethod}, - identifiers::UserId, + UserId, }, Client, }; @@ -132,7 +132,7 @@ pub enum UserAction { NotMatch, Cancel, StartSas, - Scanned(QrVerificationData), + Scanned(Box), ConfirmScanning, } @@ -745,7 +745,8 @@ impl IdentityVerification { pub fn scanned_qr_code(&self, data: QrVerificationData) { if let Some(sync_sender) = &*self.imp().sync_sender.borrow() { - let result = sync_sender.try_send(Message::UserAction(UserAction::Scanned(data))); + let result = + sync_sender.try_send(Message::UserAction(UserAction::Scanned(Box::new(data)))); if let Err(error) = result { error!("Failed to send message to tokio runtime: {}", error); @@ -1058,11 +1059,11 @@ impl Context { async fn finish_scanning( mut self, - data: QrVerificationData, + data: Box, ) -> Result { let request = self .request - .scan_qr_code(data) + .scan_qr_code(*data) .await? .expect("Scanning Qr Code should be supported"); diff --git a/src/session/verification/verification_list.rs b/src/session/verification/verification_list.rs index cdd234c3..1ca22454 100644 --- a/src/session/verification/verification_list.rs +++ b/src/session/verification/verification_list.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use gtk::{gio, glib, glib::clone, prelude::*, subclass::prelude::*}; use log::{debug, warn}; use matrix_sdk::ruma::{ - api::client::sync::sync_events::v3::ToDevice, events::AnyToDeviceEvent, identifiers::UserId, + api::client::sync::sync_events::v3::ToDevice, events::AnyToDeviceEvent, UserId, }; use crate::session::{ diff --git a/src/user_facing_error.rs b/src/user_facing_error.rs index 5728996a..9076fc22 100644 --- a/src/user_facing_error.rs +++ b/src/user_facing_error.rs @@ -23,7 +23,7 @@ impl UserFacingError for HttpError { gettext("Unable to connect to the homeserver.") } } - HttpError::ClientApi(FromHttpResponseError::Http(ServerError::Known(error))) => { + HttpError::ClientApi(FromHttpResponseError::Server(ServerError::Known(error))) => { match error.kind { Forbidden => gettext("The provided username or password is invalid."), UserDeactivated => gettext("The user is deactivated."), diff --git a/src/utils.rs b/src/utils.rs index 96128a6e..8e9bedd4 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -18,7 +18,7 @@ macro_rules! fn_event { macro_rules! event_from_sync_event { ( $event:ident, $room_id:ident) => { match $event { - AnySyncRoomEvent::Message(event) => { + AnySyncRoomEvent::MessageLike(event) => { AnyRoomEvent::Message(event.into_full_event($room_id.clone())) } AnySyncRoomEvent::State(event) => { @@ -67,10 +67,7 @@ use gtk::{ gio::{self, prelude::*}, glib::{self, closure, Object}, }; -use matrix_sdk::{ - media::MediaType, - ruma::{EventId, TransactionId, UInt}, -}; +use matrix_sdk::ruma::{events::room::MediaSource, EventId, TransactionId, UInt}; use mime::Mime; // Returns an expression that is the and’ed result of the given boolean @@ -151,17 +148,17 @@ pub fn style_scheme() -> Option { sourceview::StyleSchemeManager::default().scheme(scheme_name) } -/// Get the unique id of the given `MediaType`. +/// Get the unique id of the given `MediaSource`. /// /// It is built from the underlying `MxcUri` and can be safely used in a /// filename. /// /// The id is not guaranteed to be unique for malformed `MxcUri`s. -pub fn media_type_uid(media_type: Option) -> String { +pub fn media_type_uid(media_type: Option) -> String { if let Some(mxc) = media_type .map(|media_type| match media_type { - MediaType::Uri(uri) => uri, - MediaType::Encrypted(file) => file.url, + MediaSource::Plain(uri) => uri, + MediaSource::Encrypted(file) => file.url, }) .filter(|mxc| mxc.is_valid()) {