X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/3be1c24b1b18115becfaef1e2ea82c914a1fefea..3d4070a13907152b312c863a2ea885ac57935365:/client/src/main.rs diff --git a/client/src/main.rs b/client/src/main.rs index a4858440..f82ee237 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -2,7 +2,7 @@ use std::{path::PathBuf, time::Duration}; use clap::Parser; use jsonrpsee::core::client::{Error as RpcError, Subscription, SubscriptionClientT}; -use serde_json::Value; +use serde_json::{Error, Value}; use tokio::{select, time::sleep}; use cli::Cli; @@ -60,8 +60,13 @@ async fn handle_command( .delete_local_account_data(cli.account, ignore_registered) .await } - CliCommands::GetUserStatus { recipient } => { - client.get_user_status(cli.account, recipient).await + CliCommands::GetUserStatus { + recipient, + username, + } => { + client + .get_user_status(cli.account, recipient, username) + .await } CliCommands::JoinGroup { uri } => client.join_group(cli.account, uri).await, CliCommands::Link { name } => { @@ -70,7 +75,7 @@ async fn handle_command( .await .map_err(|e| RpcError::Custom(format!("JSON-RPC command startLink failed: {e:?}")))? .device_link_uri; - println!("{}", url); + println!("{url}"); client.finish_link(url, name).await } CliCommands::ListAccounts => client.list_accounts().await, @@ -275,9 +280,17 @@ async fn handle_command( CliCommands::UpdateAccount { device_name, unrestricted_unidentified_sender, + discoverable_by_number, + number_sharing, } => { client - .update_account(cli.account, device_name, unrestricted_unidentified_sender) + .update_account( + cli.account, + device_name, + unrestricted_unidentified_sender, + discoverable_by_number, + number_sharing, + ) .await } CliCommands::UpdateConfiguration { @@ -407,6 +420,19 @@ async fn handle_command( .get_attachment(cli.account, id, recipient, group_id) .await } + CliCommands::GetAvatar { + contact, + profile, + group_id, + } => { + client + .get_avatar(cli.account, contact, profile, group_id) + .await + } + CliCommands::GetSticker { + pack_id, + sticker_id, + } => client.get_sticker(cli.account, pack_id, sticker_id).await, CliCommands::StartChangeNumber { number, voice, @@ -416,6 +442,23 @@ async fn handle_command( .start_change_number(cli.account, number, voice, captcha) .await } + CliCommands::SendMessageRequestResponse { + recipient, + group_id, + r#type, + } => { + client + .send_message_request_response( + cli.account, + recipient, + group_id, + match r#type { + cli::MessageRequestResponseType::Accept => "accept".to_owned(), + cli::MessageRequestResponseType::Delete => "delete".to_owned(), + }, + ) + .await + } } } @@ -439,30 +482,37 @@ async fn connect(cli: Cli) -> Result { handle_command(cli, client).await } else { - let socket_path = cli - .json_rpc_socket - .clone() - .unwrap_or(None) - .or_else(|| { - std::env::var_os("XDG_RUNTIME_DIR").map(|runtime_dir| { - PathBuf::from(runtime_dir) - .join(DEFAULT_SOCKET_SUFFIX) - .into() + #[cfg(windows)] + { + Err(RpcError::Custom("Invalid socket".into())) + } + #[cfg(unix)] + { + let socket_path = cli + .json_rpc_socket + .clone() + .unwrap_or(None) + .or_else(|| { + std::env::var_os("XDG_RUNTIME_DIR").map(|runtime_dir| { + PathBuf::from(runtime_dir) + .join(DEFAULT_SOCKET_SUFFIX) + .into() + }) }) - }) - .unwrap_or_else(|| ("/run".to_owned() + DEFAULT_SOCKET_SUFFIX).into()); - let client = jsonrpc::connect_unix(socket_path) - .await - .map_err(|e| RpcError::Custom(format!("Failed to connect to socket: {e}")))?; + .unwrap_or_else(|| ("/run".to_owned() + DEFAULT_SOCKET_SUFFIX).into()); + let client = jsonrpc::connect_unix(socket_path) + .await + .map_err(|e| RpcError::Custom(format!("Failed to connect to socket: {e}")))?; - handle_command(cli, client).await + handle_command(cli, client).await + } } } async fn stream_next( timeout: f64, stream: &mut Subscription, -) -> Option> { +) -> Option> { if timeout < 0.0 { stream.next().await } else {