From a087d2774f8c499ac04f8e3ea5fac1f97d34b1c6 Mon Sep 17 00:00:00 2001 From: George Kaklamanos Date: Sat, 18 Nov 2023 19:59:35 +0200 Subject: [PATCH] matrix: Specify client id when logging in and store the state with sled --- labadoor-matrix/src/lib.rs | 22 +++++++++++++++++++--- labadoor/config.toml | 1 + labadoor/src/cli.rs | 2 ++ labadoor/src/main.rs | 6 +++++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/labadoor-matrix/src/lib.rs b/labadoor-matrix/src/lib.rs index d1c5dfa..ca89306 100644 --- a/labadoor-matrix/src/lib.rs +++ b/labadoor-matrix/src/lib.rs @@ -39,16 +39,32 @@ async fn on_room_message(event: OriginalSyncRoomMessageEvent, room: Room) { } } -#[tokio::main] -pub async fn matrix(username: String, password: String) { +async fn client_login(username: String, password: String, device_id: Option) -> Client { let user = <&UserId>::try_from(username.as_str()).unwrap(); let client = Client::builder() .server_name(user.server_name()) + .sled_store("./sled_store", None) + .unwrap() .build() .await .unwrap(); - client.login_username(user, &password).send().await.unwrap(); + let mut login_builder = client.login_username(user, &password); + let d_id = &device_id.as_ref(); + if device_id.is_some() { + login_builder = login_builder.device_id(d_id.unwrap()); + } + login_builder.send().await.unwrap(); + if device_id.is_none() { + println!("Logged in with a new device id: \"{}\"; you can save it in your configuration so we can use it next time.", client.device_id().unwrap()); + } + + client +} + +#[tokio::main] +pub async fn matrix(username: String, password: String, device_id: Option) { + let client = client_login(username, password, device_id).await; client.sync_once(SyncSettings::default()).await.unwrap(); client.add_event_handler(on_room_message); let settings = SyncSettings::default().token(client.sync_token().await.unwrap()); diff --git a/labadoor/config.toml b/labadoor/config.toml index b1a4807..37c7ba6 100644 --- a/labadoor/config.toml +++ b/labadoor/config.toml @@ -4,6 +4,7 @@ token = "" [matrix] username = "" password = "" +device_id = "" [gpio] device = "" diff --git a/labadoor/src/cli.rs b/labadoor/src/cli.rs index 041c3fa..840f13b 100644 --- a/labadoor/src/cli.rs +++ b/labadoor/src/cli.rs @@ -33,6 +33,8 @@ pub struct Matrix { pub username: Option, #[clap(short, long)] pub password: Option, + #[clap(short, long)] + pub device_id: Option, } #[cfg(feature = "csv")] diff --git a/labadoor/src/main.rs b/labadoor/src/main.rs index 7952335..78f6892 100644 --- a/labadoor/src/main.rs +++ b/labadoor/src/main.rs @@ -16,7 +16,11 @@ fn main() { #[cfg(feature = "matrix")] cli::Command::Matrix(_) => { let matrix = config.get::("matrix").unwrap(); - labadoor_matrix::matrix(matrix.username.unwrap(), matrix.password.unwrap()); + labadoor_matrix::matrix( + matrix.username.unwrap(), + matrix.password.unwrap(), + matrix.device_id, + ); } #[cfg(feature = "csv")] cli::Command::CSV(_) => {