diff options
Diffstat (limited to 'crates/vcs_actions/src')
| -rw-r--r-- | crates/vcs_actions/src/actions.rs | 22 | ||||
| -rw-r--r-- | crates/vcs_actions/src/actions/track_action.rs | 36 | ||||
| -rw-r--r-- | crates/vcs_actions/src/connection/action_service.rs | 6 |
3 files changed, 54 insertions, 10 deletions
diff --git a/crates/vcs_actions/src/actions.rs b/crates/vcs_actions/src/actions.rs index d3c0dd6..260a6be 100644 --- a/crates/vcs_actions/src/actions.rs +++ b/crates/vcs_actions/src/actions.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use action_system::action::ActionContext; use cfg_file::config::ConfigFile; use tcp_connection::{error::TcpTargetError, instance::ConnectionInstance}; -use tokio::sync::Mutex; +use tokio::sync::{Mutex, mpsc::Sender}; use vcs_data::{ constants::SERVER_PATH_MEMBER_PUB, data::{ @@ -64,6 +64,16 @@ pub fn try_get_user_directory(ctx: &ActionContext) -> Result<Arc<UserDirectory>, Ok(user_directory) } +/// Try to get the LocalWorkspace instance from the context. +pub fn try_get_local_output(ctx: &ActionContext) -> Result<Arc<Sender<String>>, TcpTargetError> { + let Some(output) = ctx.get_arc::<Sender<String>>() else { + return Err(TcpTargetError::NotFound( + "Client sender not found".to_string(), + )); + }; + Ok(output) +} + /// Authenticate member based on context and return MemberId pub async fn auth_member( ctx: &ActionContext, @@ -196,3 +206,13 @@ macro_rules! write_and_return { return Ok($result); }}; } + +/// The macro to send formatted string to output channel. +/// Usage: local_println!(output, "format string", arg1, arg2, ...) +#[macro_export] +macro_rules! local_println { + ($output:expr, $($arg:tt)*) => {{ + let formatted = format!($($arg)*); + let _ = $output.send(formatted).await; + }}; +} diff --git a/crates/vcs_actions/src/actions/track_action.rs b/crates/vcs_actions/src/actions/track_action.rs index a67480c..63c1b67 100644 --- a/crates/vcs_actions/src/actions/track_action.rs +++ b/crates/vcs_actions/src/actions/track_action.rs @@ -28,9 +28,12 @@ use vcs_data::{ }, }; -use crate::actions::{ - auth_member, check_connection_instance, get_current_sheet_name, try_get_local_workspace, - try_get_vault, +use crate::{ + actions::{ + auth_member, check_connection_instance, get_current_sheet_name, try_get_local_output, + try_get_local_workspace, try_get_vault, + }, + local_println, }; pub type NextVersion = String; @@ -404,9 +407,14 @@ async fn proc_create_tasks_local( print_infos: bool, ) -> Result<CreateTaskResult, TcpTargetError> { let workspace = try_get_local_workspace(ctx)?; + let local_output = try_get_local_output(ctx)?; let mut mut_instance = instance.lock().await; let mut local_sheet = workspace.local_sheet(member_id, sheet_name).await?; + if print_infos && relative_paths.len() > 0 { + local_println!(local_output, "Creating {} files...", relative_paths.len()); + } + // Wait for remote detection of whether the sheet exists let has_sheet = mut_instance.read_msgpack::<bool>().await?; if !has_sheet { @@ -458,7 +466,7 @@ async fn proc_create_tasks_local( // Print success info if print_infos { - println!("+ {}", path.display()); + local_println!(local_output, "+ {}", path.display()); } success_relative_pathes.push(path); @@ -545,11 +553,16 @@ async fn proc_update_tasks_local( file_update_info: HashMap<PathBuf, (NextVersion, UpdateDescription)>, ) -> Result<UpdateTaskResult, TcpTargetError> { let workspace = try_get_local_workspace(ctx)?; + let local_output = try_get_local_output(ctx)?; let mut mut_instance = instance.lock().await; let mut local_sheet = workspace.local_sheet(member_id, sheet_name).await?; let mut success = Vec::new(); + if print_infos && relative_paths.len() > 0 { + local_println!(local_output, "Updating {} files...", relative_paths.len()); + } + for path in relative_paths.iter() { let Ok(mapping) = local_sheet.mapping_data(path) else { // Is mapping not found, write empty @@ -616,7 +629,13 @@ async fn proc_update_tasks_local( // Print success info if print_infos { - println!("↑ {} ({} -> {})", path.display(), version, next_version); + local_println!( + local_output, + "↑ {} ({} -> {})", + path.display(), + version, + next_version + ); } } } @@ -777,9 +796,14 @@ async fn proc_sync_tasks_local( print_infos: bool, ) -> Result<SyncTaskResult, TcpTargetError> { let workspace = try_get_local_workspace(ctx)?; + let local_output = try_get_local_output(ctx)?; let mut mut_instance = instance.lock().await; let mut success: Vec<PathBuf> = Vec::new(); + if print_infos && relative_paths.len() > 0 { + local_println!(local_output, "Syncing {} files...", relative_paths.len()); + } + for path in relative_paths { let Some((version, description, vfid)) = mut_instance.read_msgpack::<SyncVersionInfo>().await? @@ -880,7 +904,7 @@ async fn proc_sync_tasks_local( // Print success info if print_infos { - println!("↓ {}", path.display()); + local_println!(local_output, "↓ {}", path.display()); } } Ok(SyncTaskResult::Success(success)) diff --git a/crates/vcs_actions/src/connection/action_service.rs b/crates/vcs_actions/src/connection/action_service.rs index a736ed8..f137126 100644 --- a/crates/vcs_actions/src/connection/action_service.rs +++ b/crates/vcs_actions/src/connection/action_service.rs @@ -8,7 +8,7 @@ use std::{ use action_system::{action::ActionContext, action_pool::ActionPool}; use cfg_file::config::ConfigFile; -use log::{error, info, warn}; +use log::{debug, error, info, warn}; use tcp_connection::{error::TcpTargetError, instance::ConnectionInstance}; use tokio::{ net::{TcpListener, TcpStream}, @@ -134,7 +134,7 @@ fn build_server_future( accept_result = listener.accept(), if !shutdown_requested => { match accept_result { Ok((stream, _addr)) => { - info!("New connection. (now {})", active_connections); + debug!("New connection. (now {})", active_connections); let _ = tx.send(1).await; let vault_clone = vault.clone(); @@ -143,7 +143,7 @@ fn build_server_future( spawn(async move { process_connection(stream, vault_clone, action_pool_clone).await; - info!("A connection closed. (now {})", active_connections); + debug!("A connection closed. (now {})", active_connections); let _ = tx_clone.send(-1).await; }); } |
