matrix_ui_serializable/
commands.rs1use std::path::PathBuf;
4
5use crate::{
6 init::{
7 login::{LoginRequest, MatrixClientConfig},
8 singletons::get_client,
9 },
10 models::{async_requests::MatrixRequest, events::FrontendDevice},
11 room::notifications::MobilePushNotificationConfig,
12 utils::guess_device_type,
13};
14use matrix_sdk::ruma::{OwnedDeviceId, OwnedRoomId, OwnedUserId, UserId};
15
16pub async fn login_and_create_new_session(
22 config: MatrixClientConfig,
23 mobile_push_config: Option<MobilePushNotificationConfig>,
24 app_data_dir: PathBuf,
25) -> crate::Result<String> {
26 crate::init::session::login_and_get_session(
27 LoginRequest::LoginByPassword(config),
28 mobile_push_config,
29 app_data_dir,
30 )
31 .await
32}
33
34pub fn submit_async_request(request: MatrixRequest) -> crate::Result<()> {
36 crate::models::async_requests::submit_async_request(request);
37 Ok(())
38}
39
40pub async fn fetch_user_profile(
42 user_id: OwnedUserId,
43 room_id: Option<OwnedRoomId>,
44) -> crate::Result<bool> {
45 Ok(crate::user::user_profile::fetch_user_profile(user_id, room_id).await)
46}
47
48pub async fn get_devices(user_id: &UserId) -> crate::Result<Vec<FrontendDevice>> {
50 let client = get_client().expect("Client should be defined at this state");
51 let devices: Vec<FrontendDevice> = client
52 .encryption()
53 .get_user_devices(user_id)
54 .await?
55 .devices()
56 .filter(|device| !device.is_deleted())
57 .map(|device| FrontendDevice {
58 device_id: device.device_id().to_owned(),
59 display_name: device.display_name().map(|n| n.to_string()),
60 is_verified: device.is_verified(),
61 is_verified_with_cross_signing: device.is_verified_with_cross_signing(),
62 registration_date: device.first_time_seen_ts(),
63 guessed_type: guess_device_type(device.display_name()),
64 is_current_device: device.device_id().eq(client.device_id().unwrap()),
65 })
66 .collect();
67 Ok(devices)
68}
69
70pub async fn verify_device(user_id: OwnedUserId, device_id: OwnedDeviceId) -> crate::Result<()> {
72 crate::events::emoji_verification::verify_device(&user_id, &device_id)
73 .await
74 .map_err(|e| crate::Error::Anyhow(e))
75}