From f73c4c0071bb37430cbf48f7e2d06dcdedb2c8ec Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Mon, 17 Nov 2025 20:29:27 +0800 Subject: Use member-specific paths for latest info files --- crates/vcs_data/src/constants.rs | 2 +- crates/vcs_data/src/data/local/config.rs | 7 ++++++- crates/vcs_data/src/data/local/latest_info.rs | 14 ++++++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) (limited to 'crates/vcs_data/src') diff --git a/crates/vcs_data/src/constants.rs b/crates/vcs_data/src/constants.rs index a1d0ad2..47a77bd 100644 --- a/crates/vcs_data/src/constants.rs +++ b/crates/vcs_data/src/constants.rs @@ -48,7 +48,7 @@ pub const CLIENT_FOLDER_WORKSPACE_ROOT_NAME: &str = ".jv"; pub const CLIENT_FILE_WORKSPACE: &str = "./.jv/workspace.toml"; // Client - Latest Information -pub const CLIENT_FILE_LATEST_INFO: &str = "./.jv/.latest.json"; +pub const CLIENT_FILE_LATEST_INFO: &str = "./.jv/.{account}_latest.json"; // Client - Local pub const CLIENT_SUFFIX_LOCAL_SHEET_FILE: &str = ".json"; diff --git a/crates/vcs_data/src/data/local/config.rs b/crates/vcs_data/src/data/local/config.rs index fa3b607..c51147c 100644 --- a/crates/vcs_data/src/data/local/config.rs +++ b/crates/vcs_data/src/data/local/config.rs @@ -97,7 +97,12 @@ impl LocalConfig { let local_path = self.get_local_path().await?; // Get latest info - let Ok(latest_info) = LatestInfo::read().await else { + let Ok(latest_info) = LatestInfo::read_from(LatestInfo::latest_info_path( + &local_path, + &self.current_account(), + )) + .await + else { return Err(std::io::Error::new( std::io::ErrorKind::NotFound, "No latest info found", diff --git a/crates/vcs_data/src/data/local/latest_info.rs b/crates/vcs_data/src/data/local/latest_info.rs index e4f45b1..bc13ae9 100644 --- a/crates/vcs_data/src/data/local/latest_info.rs +++ b/crates/vcs_data/src/data/local/latest_info.rs @@ -5,18 +5,21 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer}; use tokio::time::Instant; use crate::{ - constants::CLIENT_FILE_LATEST_INFO, + constants::{CLIENT_FILE_LATEST_INFO, CLIENT_FILE_LATEST_INFO_NOSET}, data::{ + local::{LocalWorkspace, config::LocalConfig}, member::{Member, MemberId}, sheet::{SheetData, SheetName}, }, }; +const ACCOUNT: &str = "{account}"; + /// # Latest Info /// Locally cached latest information, /// used to cache personal information from upstream for querying and quickly retrieving member information. #[derive(Default, Serialize, Deserialize, ConfigFile)] -#[cfg_file(path = CLIENT_FILE_LATEST_INFO)] +#[cfg_file(path = CLIENT_FILE_LATEST_INFO_NOSET)] pub struct LatestInfo { // Sheets /// My sheets, indicating which sheets I can edit @@ -38,6 +41,13 @@ pub struct LatestInfo { pub vault_members: Vec, } +impl LatestInfo { + /// Get the path to the latest info file for a given workspace and member ID + pub fn latest_info_path(local_workspace_path: &PathBuf, member_id: &MemberId) -> PathBuf { + local_workspace_path.join(CLIENT_FILE_LATEST_INFO.replace(ACCOUNT, member_id)) + } +} + #[derive(Default, Serialize, Deserialize)] pub struct SheetInfo { pub sheet_name: SheetName, -- cgit