From 816ff19324e81a3354913695fc6a570598eb9358 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sat, 3 Jan 2026 20:31:38 +0800 Subject: Include file histories in latest info updates --- crates/vcs_actions/src/actions/local_actions.rs | 39 ++++++++++++++++++---- crates/vcs_data/src/data/local/latest_file_data.rs | 20 ++++++++--- 2 files changed, 48 insertions(+), 11 deletions(-) diff --git a/crates/vcs_actions/src/actions/local_actions.rs b/crates/vcs_actions/src/actions/local_actions.rs index 93ef4d5..1f764c9 100644 --- a/crates/vcs_actions/src/actions/local_actions.rs +++ b/crates/vcs_actions/src/actions/local_actions.rs @@ -28,7 +28,7 @@ use vcs_data::{ vault::{ config::VaultUuid, sheet_share::{Share, SheetShareId}, - virtual_file::{VirtualFileId, VirtualFileVersion}, + virtual_file::{VirtualFileId, VirtualFileVersion, VirtualFileVersionDescription}, }, }, }; @@ -366,8 +366,14 @@ pub async fn update_to_latest_info_action( .await?; // Receive information and write to local - let result: HashMap, VirtualFileVersion)> = - mut_instance.read_large_msgpack(1024u16).await?; + let result: HashMap< + VirtualFileId, + ( + Option, + VirtualFileVersion, + Vec<(VirtualFileVersion, VirtualFileVersionDescription)>, + ), + > = mut_instance.read_large_msgpack(1024u16).await?; // Read configuration file let path = LatestFileData::data_path(&member_id)?; @@ -390,8 +396,14 @@ pub async fn update_to_latest_info_action( mut_instance.read_large_msgpack(1024u16).await?; // Organize the information - let mut result: HashMap, VirtualFileVersion)> = - HashMap::new(); + let mut result: HashMap< + VirtualFileId, + ( + Option, + VirtualFileVersion, + Vec<(VirtualFileVersion, VirtualFileVersionDescription)>, + ), + > = HashMap::new(); for id in holder_wants_know { let Ok(meta) = vault.virtual_file_meta(&id).await else { continue; @@ -401,8 +413,21 @@ pub async fn update_to_latest_info_action( } else { Some(meta.hold_member().clone()) }; - let version = meta.version_latest(); - result.insert(id, (holder, version)); + let latest_version = meta.version_latest(); + + let all_versions = meta.versions(); + let all_descriptions = meta.version_descriptions(); + let histories = all_versions + .iter() + .filter_map(|v| { + let Some(desc) = all_descriptions.get(v) else { + return None; + }; + Some((v.clone(), desc.clone())) + }) + .collect::>(); + + result.insert(id, (holder, latest_version, histories)); } // Send information diff --git a/crates/vcs_data/src/data/local/latest_file_data.rs b/crates/vcs_data/src/data/local/latest_file_data.rs index 5248cfb..720c634 100644 --- a/crates/vcs_data/src/data/local/latest_file_data.rs +++ b/crates/vcs_data/src/data/local/latest_file_data.rs @@ -8,7 +8,7 @@ use crate::{ current::current_local_path, data::{ member::MemberId, - vault::virtual_file::{VirtualFileId, VirtualFileVersion}, + vault::virtual_file::{VirtualFileId, VirtualFileVersion, VirtualFileVersionDescription}, }, }; @@ -26,6 +26,10 @@ pub struct LatestFileData { /// File version #[serde(rename = "ver")] versions: HashMap, + + /// File histories and descriptions + #[serde(rename = "his")] + histories: HashMap>, } #[derive(Debug, Default, Clone, Serialize, Deserialize)] @@ -69,9 +73,16 @@ impl LatestFileData { /// Update the held status of the files. pub fn update_info( &mut self, - map: HashMap, VirtualFileVersion)>, + map: HashMap< + VirtualFileId, + ( + Option, + VirtualFileVersion, + Vec<(VirtualFileVersion, VirtualFileVersionDescription)>, + ), + >, ) { - for (vfid, (member_id, version)) in map { + for (vfid, (member_id, version, desc)) in map { self.held_status.insert( vfid.clone(), match member_id { @@ -79,7 +90,8 @@ impl LatestFileData { None => HeldStatus::NotHeld, }, ); - self.versions.insert(vfid, version); + self.versions.insert(vfid.clone(), version); + self.histories.insert(vfid, desc); } } } -- cgit