summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/vcs_actions/src/actions/local_actions.rs39
-rw-r--r--crates/vcs_data/src/data/local/latest_file_data.rs20
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<VirtualFileId, (Option<MemberId>, VirtualFileVersion)> =
- mut_instance.read_large_msgpack(1024u16).await?;
+ let result: HashMap<
+ VirtualFileId,
+ (
+ Option<MemberId>,
+ 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<VirtualFileId, (Option<MemberId>, VirtualFileVersion)> =
- HashMap::new();
+ let mut result: HashMap<
+ VirtualFileId,
+ (
+ Option<MemberId>,
+ 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::<Vec<(VirtualFileVersion, VirtualFileVersionDescription)>>();
+
+ 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<VirtualFileId, VirtualFileVersion>,
+
+ /// File histories and descriptions
+ #[serde(rename = "his")]
+ histories: HashMap<VirtualFileId, Vec<(VirtualFileVersion, VirtualFileVersionDescription)>>,
}
#[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<VirtualFileId, (Option<MemberId>, VirtualFileVersion)>,
+ map: HashMap<
+ VirtualFileId,
+ (
+ Option<MemberId>,
+ 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);
}
}
}