diff --git a/bindings/matrix-sdk-ffi/src/client_builder.rs b/bindings/matrix-sdk-ffi/src/client_builder.rs index 49d419028..cc6d8d293 100644 --- a/bindings/matrix-sdk-ffi/src/client_builder.rs +++ b/bindings/matrix-sdk-ffi/src/client_builder.rs @@ -2,7 +2,10 @@ use std::{fs, path::PathBuf, sync::Arc}; use anyhow::anyhow; use matrix_sdk::{ - ruma::{ServerName, UserId}, + ruma::{ + api::{error::UnknownVersionError, MatrixVersion}, + ServerName, UserId, + }, Client as MatrixClient, ClientBuilder as MatrixClientBuilder, }; use sanitize_filename_reader_friendly::sanitize; @@ -17,6 +20,7 @@ pub struct ClientBuilder { username: Option, server_name: Option, homeserver_url: Option, + server_versions: Option>, passphrase: Zeroizing>, user_agent: Option, inner: MatrixClientBuilder, @@ -36,6 +40,12 @@ impl ClientBuilder { Arc::new(builder) } + pub fn server_versions(self: Arc, versions: Vec) -> Arc { + let mut builder = unwrap_or_clone_arc(self); + builder.server_versions = Some(versions); + Arc::new(builder) + } + pub fn server_name(self: Arc, server_name: String) -> Arc { let mut builder = unwrap_or_clone_arc(self); builder.server_name = Some(server_name); @@ -68,6 +78,7 @@ impl ClientBuilder { username: None, server_name: None, homeserver_url: None, + server_versions: None, passphrase: Zeroizing::new(None), user_agent: None, inner: MatrixClient::builder(), @@ -105,6 +116,15 @@ impl ClientBuilder { inner_builder = inner_builder.user_agent(user_agent); } + if let Some(server_versions) = builder.server_versions { + inner_builder = inner_builder.server_versions( + server_versions + .iter() + .map(|s| MatrixVersion::try_from(s.as_str())) + .collect::, UnknownVersionError>>()?, + ); + } + RUNTIME.block_on(async move { let client = inner_builder.build().await?; let c = Client::new(client, ClientState::default());