diff options
| author | 魏曹先生 <1992414357@qq.com> | 2025-11-17 11:49:49 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2025-11-17 11:49:49 +0800 |
| commit | 7b97b52af021500d8085c875d20215e8dc0f53cc (patch) | |
| tree | 9b8219363380db3330bda75e28e364154224eca8 /crates/vcs_data/src/data/vault | |
| parent | e190d90594b17fb16849a13198af3f5152414e4c (diff) | |
feat: Add file status tracking and SHA1 hash system
- Implement SHA1 hash calculation module with async support
- Add file status analysis for tracking moves, creates, and modifications
- Enhance local file management with relative path handling
- Update virtual file actions with improved tracking capabilities
Diffstat (limited to 'crates/vcs_data/src/data/vault')
| -rw-r--r-- | crates/vcs_data/src/data/vault/sheets.rs | 1 | ||||
| -rw-r--r-- | crates/vcs_data/src/data/vault/virtual_file.rs | 32 |
2 files changed, 30 insertions, 3 deletions
diff --git a/crates/vcs_data/src/data/vault/sheets.rs b/crates/vcs_data/src/data/vault/sheets.rs index ba021b5..cea7271 100644 --- a/crates/vcs_data/src/data/vault/sheets.rs +++ b/crates/vcs_data/src/data/vault/sheets.rs @@ -133,6 +133,7 @@ impl Vault { holder: Some(holder.clone()), inputs: Vec::new(), mapping: HashMap::new(), + id_mapping: None, write_count: 0, }; SheetData::write_to(&sheet_data, sheet_file_path).await?; diff --git a/crates/vcs_data/src/data/vault/virtual_file.rs b/crates/vcs_data/src/data/vault/virtual_file.rs index 221766f..6dd5208 100644 --- a/crates/vcs_data/src/data/vault/virtual_file.rs +++ b/crates/vcs_data/src/data/vault/virtual_file.rs @@ -22,7 +22,7 @@ use crate::{ pub type VirtualFileId = String; pub type VirtualFileVersion = String; -const VF_PREFIX: &str = "vf_"; +const VF_PREFIX: &str = "vf-"; const ID_PARAM: &str = "{vf_id}"; const ID_INDEX: &str = "{vf_index}"; const VERSION_PARAM: &str = "{vf_version}"; @@ -244,8 +244,6 @@ impl Vault { } fs::rename(receive_path, move_path).await?; - // - Ok(new_id) } Err(e) => { @@ -444,6 +442,13 @@ impl VirtualFileMeta { &self.histories } + /// Get the latest version of the virtual file + pub fn version_latest(&self) -> VirtualFileVersion { + // After creating a virtual file in `update_virtual_file_from_connection`, + // the Vec will never be empty, so unwrap is allowed here + self.histories.last().unwrap().clone() + } + /// Get the total number of versions for this virtual file pub fn version_len(&self) -> i32 { self.histories.len() as i32 @@ -470,4 +475,25 @@ impl VirtualFileMeta { pub fn version_name(&self, version_num: i32) -> Option<VirtualFileVersion> { self.histories.get(version_num as usize).cloned() } + + /// Get the member who holds the edit right of the file + pub fn hold_member(&self) -> &MemberId { + &self.hold_member + } + + /// Get the version descriptions for all versions + pub fn version_descriptions( + &self, + ) -> &HashMap<VirtualFileVersion, VirtualFileVersionDescription> { + &self.version_description + } + + /// Get the version description for a given version + pub fn version_description( + &self, + version: VirtualFileVersion, + ) -> Option<&VirtualFileVersionDescription> { + let desc = self.version_descriptions(); + desc.get(&version) + } } |
