diff options
Diffstat (limited to 'crates/vcs_data/src/data')
| -rw-r--r-- | crates/vcs_data/src/data/local/config.rs | 17 | ||||
| -rw-r--r-- | crates/vcs_data/src/data/local/latest_info.rs | 22 |
2 files changed, 34 insertions, 5 deletions
diff --git a/crates/vcs_data/src/data/local/config.rs b/crates/vcs_data/src/data/local/config.rs index 28bd439..cfbc0d4 100644 --- a/crates/vcs_data/src/data/local/config.rs +++ b/crates/vcs_data/src/data/local/config.rs @@ -32,6 +32,10 @@ pub struct LocalConfig { /// This ID will be used to verify access permissions when connecting to the upstream server. using_account: MemberId, + /// Whether the current member is interacting as a host. + /// In host mode, full Vault operation permissions are available except for adding new content. + using_host_mode: bool, + /// Whether the local workspace is stained. /// /// If stained, it can only set an upstream server with the same identifier. @@ -52,6 +56,7 @@ impl Default for LocalConfig { PORT, )), using_account: "unknown".to_string(), + using_host_mode: false, stained_uuid: None, sheet_in_use: None, } @@ -81,6 +86,11 @@ impl LocalConfig { Ok(()) } + /// Set the host mode + pub fn set_host_mode(&mut self, host_mode: bool) { + self.using_host_mode = host_mode; + } + /// Set the currently used sheet pub async fn use_sheet(&mut self, sheet: SheetName) -> Result<(), std::io::Error> { let sheet = snake_case!(sheet); @@ -110,7 +120,7 @@ impl LocalConfig { }; // Check if the sheet exists - if !latest_info.my_sheets.contains(&sheet) { + if !latest_info.visible_sheets.contains(&sheet) { return Err(std::io::Error::new( std::io::ErrorKind::NotFound, "Sheet not found", @@ -291,6 +301,11 @@ impl LocalConfig { self.using_account.clone() } + /// Check if the current member is interacting as a host. + pub fn is_host_mode(&self) -> bool { + self.using_host_mode + } + /// Check if the local workspace is stained. pub fn stained(&self) -> bool { self.stained_uuid.is_some() diff --git a/crates/vcs_data/src/data/local/latest_info.rs b/crates/vcs_data/src/data/local/latest_info.rs index ce45372..27409be 100644 --- a/crates/vcs_data/src/data/local/latest_info.rs +++ b/crates/vcs_data/src/data/local/latest_info.rs @@ -1,4 +1,5 @@ use std::{ + collections::{HashMap, HashSet}, path::{Path, PathBuf}, time::SystemTime, }; @@ -11,6 +12,7 @@ use crate::{ data::{ member::{Member, MemberId}, sheet::{SheetData, SheetName}, + vault::sheet_share::{Share, SheetShareId}, }, }; @@ -23,13 +25,25 @@ const ACCOUNT: &str = "{account}"; #[cfg_file(path = CLIENT_FILE_LATEST_INFO_NOSET)] pub struct LatestInfo { // Sheets - /// My sheets, indicating which sheets I can edit - pub my_sheets: Vec<SheetName>, - /// Other sheets, indicating which sheets I can export files to (these sheets are not readable to me) - pub other_sheets: Vec<SheetInfo>, + /// Visible sheets, + /// indicating which sheets I can edit + pub visible_sheets: Vec<SheetName>, + + /// Invisible sheets, + /// indicating which sheets I can export files to (these sheets are not readable to me) + pub invisible_sheets: Vec<SheetInfo>, + + /// Reference sheets, + /// indicating sheets owned by the host, visible to everyone, + /// but only the host can modify or add mappings within them + pub reference_sheets: HashSet<SheetName>, + /// Reference sheet data, indicating what files I can get from the reference sheet pub ref_sheet_content: SheetData, + /// Shares in my sheets, indicating which external merge requests have entries that I can view + pub shares_in_my_sheets: HashMap<SheetName, HashMap<SheetShareId, Share>>, + /// Update instant pub update_instant: Option<SystemTime>, |
