diff options
| -rw-r--r-- | crates/vcs_actions/src/actions/local_actions.rs | 4 | ||||
| -rw-r--r-- | crates/vcs_actions/src/actions/sheet_actions.rs | 8 | ||||
| -rw-r--r-- | crates/vcs_actions/src/actions/virtual_file_actions.rs | 6 | ||||
| -rw-r--r-- | crates/vcs_data/src/constants.rs | 1 | ||||
| -rw-r--r-- | crates/vcs_data/src/data/local.rs | 11 | ||||
| -rw-r--r-- | crates/vcs_data/src/data/local/vault_modified.rs | 33 |
6 files changed, 56 insertions, 7 deletions
diff --git a/crates/vcs_actions/src/actions/local_actions.rs b/crates/vcs_actions/src/actions/local_actions.rs index e1c7dd9..9bd50c7 100644 --- a/crates/vcs_actions/src/actions/local_actions.rs +++ b/crates/vcs_actions/src/actions/local_actions.rs @@ -14,6 +14,7 @@ use vcs_data::{ config::LocalConfig, latest_file_data::LatestFileData, latest_info::{LatestInfo, SheetInfo}, + vault_modified::sign_vault_modified, }, member::MemberId, sheet::{SheetData, SheetName}, @@ -448,6 +449,9 @@ pub async fn update_to_latest_info_action( } } + if ctx.is_proc_on_local() { + sign_vault_modified(false).await; + } Ok(UpdateToLatestInfoResult::Success) } diff --git a/crates/vcs_actions/src/actions/sheet_actions.rs b/crates/vcs_actions/src/actions/sheet_actions.rs index e529642..ff467d9 100644 --- a/crates/vcs_actions/src/actions/sheet_actions.rs +++ b/crates/vcs_actions/src/actions/sheet_actions.rs @@ -3,7 +3,7 @@ use std::io::ErrorKind; use action_system::{action::ActionContext, macros::action_gen}; use serde::{Deserialize, Serialize}; use tcp_connection::error::TcpTargetError; -use vcs_data::data::sheet::SheetName; +use vcs_data::data::{local::vault_modified::sign_vault_modified, sheet::SheetName}; use crate::{ actions::{auth_member, check_connection_instance, try_get_local_workspace, try_get_vault}, @@ -82,6 +82,9 @@ pub async fn make_sheet_action( .await .read::<MakeSheetActionResult>() .await?; + if matches!(result, MakeSheetActionResult::Success) { + sign_vault_modified(true).await; + } return Ok(result); } @@ -188,6 +191,9 @@ pub async fn drop_sheet_action( .await .read::<DropSheetActionResult>() .await?; + if matches!(result, DropSheetActionResult::Success) { + sign_vault_modified(true).await; + } return Ok(result); } diff --git a/crates/vcs_actions/src/actions/virtual_file_actions.rs b/crates/vcs_actions/src/actions/virtual_file_actions.rs index 3760444..2e6a452 100644 --- a/crates/vcs_actions/src/actions/virtual_file_actions.rs +++ b/crates/vcs_actions/src/actions/virtual_file_actions.rs @@ -12,7 +12,7 @@ use tokio::sync::Mutex; use vcs_data::data::{ local::{ cached_sheet::CachedSheet, file_status::AnalyzeResult, latest_file_data::LatestFileData, - local_sheet::LocalMappingMetadata, + local_sheet::LocalMappingMetadata, vault_modified::sign_vault_modified, }, member::MemberId, sheet::SheetName, @@ -264,6 +264,10 @@ pub async fn track_file_action( Err(e) => return Err(e), }; + if success_create.len() + success_update.len() > 0 { + sign_vault_modified(true).await; + } + return Ok(TrackFileActionResult::Done { created: success_create, updated: success_update, diff --git a/crates/vcs_data/src/constants.rs b/crates/vcs_data/src/constants.rs index 6b4c963..088f8b0 100644 --- a/crates/vcs_data/src/constants.rs +++ b/crates/vcs_data/src/constants.rs @@ -78,6 +78,7 @@ pub const CLIENT_CONTENT_GITIGNORE: &str = "# Git support for JVCS Workspace # Ignore cached datas cached members"; +pub const CLIENT_FILE_VAULT_MODIFIED: &str = "./.jv/.vault_modified"; // ------------------------------------------------------------------------------------- diff --git a/crates/vcs_data/src/data/local.rs b/crates/vcs_data/src/data/local.rs index 22589fc..092ef7d 100644 --- a/crates/vcs_data/src/data/local.rs +++ b/crates/vcs_data/src/data/local.rs @@ -35,6 +35,7 @@ pub mod latest_file_data; pub mod latest_info; pub mod local_files; pub mod local_sheet; +pub mod vault_modified; const SHEET_NAME: &str = "{sheet_name}"; const ACCOUNT_NAME: &str = "{account}"; @@ -117,7 +118,6 @@ impl LocalWorkspace { /// Get the path to a local sheet. pub fn local_sheet_path(&self, member: &MemberId, sheet: &SheetName) -> PathBuf { - self.local_path.join( CLIENT_FILE_LOCAL_SHEET .replace(ACCOUNT_NAME, member) @@ -177,10 +177,11 @@ impl LocalWorkspace { Box::pin(collect_sheet_paths(&path, suffix, paths)).await?; } else if path.is_file() && let Some(extension) = path.extension() - && extension == suffix.trim_start_matches('.') { - let formatted_path = format_path(path)?; - paths.push(formatted_path); - } + && extension == suffix.trim_start_matches('.') + { + let formatted_path = format_path(path)?; + paths.push(formatted_path); + } } } Ok(()) diff --git a/crates/vcs_data/src/data/local/vault_modified.rs b/crates/vcs_data/src/data/local/vault_modified.rs new file mode 100644 index 0000000..125fb92 --- /dev/null +++ b/crates/vcs_data/src/data/local/vault_modified.rs @@ -0,0 +1,33 @@ +use crate::{constants::CLIENT_FILE_VAULT_MODIFIED, current::current_local_path}; + +pub async fn check_vault_modified() -> bool { + let Some(current_dir) = current_local_path() else { + return false; + }; + + let record_file = current_dir.join(CLIENT_FILE_VAULT_MODIFIED); + if !record_file.exists() { + return false; + } + + let Ok(contents) = tokio::fs::read_to_string(&record_file).await else { + return false; + }; + + matches!(contents.trim().to_lowercase().as_str(), "true") +} + +pub async fn sign_vault_modified(modified: bool) -> bool { + let Some(current_dir) = current_local_path() else { + return false; + }; + + let record_file = current_dir.join(CLIENT_FILE_VAULT_MODIFIED); + + let contents = if modified { "true" } else { "false" }; + + match tokio::fs::write(&record_file, contents).await { + Ok(_) => true, + Err(_) => false, + } +} |
