summaryrefslogtreecommitdiff
path: root/crates/vcs_data/src/data/local/member_held.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2025-11-20 13:40:12 +0800
committer魏曹先生 <1992414357@qq.com>2025-11-20 13:40:12 +0800
commit8b70533434d86f72a9a62d79f0f447a619e25040 (patch)
tree486d48bc091a590412181c416b8da58ca8f62062 /crates/vcs_data/src/data/local/member_held.rs
parent54bdb27af49788ca4562a72510f3b81278cb133f (diff)
Rename MemberHeld to LatestFileData and add version tracking
The struct now tracks both file holding status and latest file versions for permission validation and update checks.
Diffstat (limited to 'crates/vcs_data/src/data/local/member_held.rs')
-rw-r--r--crates/vcs_data/src/data/local/member_held.rs64
1 files changed, 0 insertions, 64 deletions
diff --git a/crates/vcs_data/src/data/local/member_held.rs b/crates/vcs_data/src/data/local/member_held.rs
deleted file mode 100644
index 3f07232..0000000
--- a/crates/vcs_data/src/data/local/member_held.rs
+++ /dev/null
@@ -1,64 +0,0 @@
-use std::{collections::HashMap, io::Error, path::PathBuf};
-
-use cfg_file::ConfigFile;
-use serde::{Deserialize, Serialize};
-
-use crate::{
- constants::{CLIENT_FILE_MEMBER_HELD, CLIENT_FILE_MEMBER_HELD_NOSET},
- current::current_local_path,
- data::{member::MemberId, vault::virtual_file::VirtualFileId},
-};
-
-const ACCOUNT: &str = "{account}";
-
-/// # Member Held Information
-/// Records the files held by the member, used for permission validation
-#[derive(Debug, Default, Clone, Serialize, Deserialize, ConfigFile)]
-#[cfg_file(path = CLIENT_FILE_MEMBER_HELD_NOSET)]
-pub struct MemberHeld {
- /// File holding status
- held_status: HashMap<VirtualFileId, HeldStatus>,
-}
-
-#[derive(Debug, Default, Clone, Serialize, Deserialize)]
-pub enum HeldStatus {
- HeldWith(MemberId), // Held, status changes are sync to the client
- NotHeld, // Not held, status changes are sync to the client
-
- #[default]
- WantedToKnow, // Holding status is unknown, notify server must inform client
-}
-
-impl MemberHeld {
- /// Get the path to the file holding the held status information for the given member.
- pub fn held_file_path(account: &MemberId) -> Result<PathBuf, std::io::Error> {
- let Some(local_path) = current_local_path() else {
- return Err(Error::new(
- std::io::ErrorKind::NotFound,
- "Workspace not found.",
- ));
- };
- Ok(local_path.join(CLIENT_FILE_MEMBER_HELD.replace(ACCOUNT, account)))
- }
-
- /// Get the member who holds the file with the given ID.
- pub fn file_holder(&self, vfid: &VirtualFileId) -> Option<&MemberId> {
- self.held_status.get(vfid).and_then(|status| match status {
- HeldStatus::HeldWith(id) => Some(id),
- _ => None,
- })
- }
-
- /// Update the held status of the files.
- pub fn update_held_status(&mut self, map: HashMap<VirtualFileId, Option<MemberId>>) {
- for (vfid, member_id) in map {
- self.held_status.insert(
- vfid,
- match member_id {
- Some(member_id) => HeldStatus::HeldWith(member_id),
- None => HeldStatus::NotHeld,
- },
- );
- }
- }
-}