summaryrefslogtreecommitdiff
path: root/crates/vcs_data/src/data/local/config.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-01-02 02:22:09 +0800
committer魏曹先生 <1992414357@qq.com>2026-01-02 02:22:09 +0800
commit46e5887d1829cf9aade17aa6e716fcb39ff29878 (patch)
treecb2fecd3fa2bca5b85055840ecf07603f56c73e3 /crates/vcs_data/src/data/local/config.rs
parentf6a918848b499b9ec6fab8124d714d64af8afae2 (diff)
Add host mode and update sheet visibility model
- Add `using_host_mode` field to LocalConfig with getter/setter - Replace `my_sheets`/`other_sheets` with `visible_sheets`/`invisible_sheets` - Add `reference_sheets` set for host-owned sheets - Add `shares_in_my_sheets` map to track external merge requests - Update `use_sheet` to check `visible_sheets` instead of `my_sheets`
Diffstat (limited to 'crates/vcs_data/src/data/local/config.rs')
-rw-r--r--crates/vcs_data/src/data/local/config.rs17
1 files changed, 16 insertions, 1 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()