summaryrefslogtreecommitdiff
path: root/crates/vcs_data
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2025-11-17 20:29:27 +0800
committer魏曹先生 <1992414357@qq.com>2025-11-17 20:29:27 +0800
commitf73c4c0071bb37430cbf48f7e2d06dcdedb2c8ec (patch)
treedc29c89087f7f584ea07a8e3ecf1e71184de82e6 /crates/vcs_data
parent7b97b52af021500d8085c875d20215e8dc0f53cc (diff)
Use member-specific paths for latest info files
Diffstat (limited to 'crates/vcs_data')
-rw-r--r--crates/vcs_data/src/constants.rs2
-rw-r--r--crates/vcs_data/src/data/local/config.rs7
-rw-r--r--crates/vcs_data/src/data/local/latest_info.rs14
3 files changed, 19 insertions, 4 deletions
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<Member>,
}
+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,