summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/vcs_data/src/constants.rs2
-rw-r--r--crates/vcs_data/src/data/local/config.rs23
-rw-r--r--crates/vcs_data/src/data/sheet.rs10
3 files changed, 29 insertions, 6 deletions
diff --git a/crates/vcs_data/src/constants.rs b/crates/vcs_data/src/constants.rs
index 1d17927..55662e7 100644
--- a/crates/vcs_data/src/constants.rs
+++ b/crates/vcs_data/src/constants.rs
@@ -54,7 +54,7 @@ pub const CLIENT_FILE_LATEST_INFO: &str = "./.jv/latest.json";
pub const CLIENT_FILE_SHEET_COPY: &str = "./.jv/sheets/{sheet_name}.copy.json";
// Client - Local Draft
-pub const CLIENT_PATH_LOCAL_DRAFT: &str = "./.jv/drafts/{sheet_name}/";
+pub const CLIENT_PATH_LOCAL_DRAFT: &str = "./.jv/drafts/{account}_{sheet_name}/";
// Client - Other
pub const CLIENT_FILE_IGNOREFILES: &str = "IGNORE_RULES.toml";
diff --git a/crates/vcs_data/src/data/local/config.rs b/crates/vcs_data/src/data/local/config.rs
index 3dc5248..fa3b607 100644
--- a/crates/vcs_data/src/data/local/config.rs
+++ b/crates/vcs_data/src/data/local/config.rs
@@ -1,6 +1,7 @@
use cfg_file::ConfigFile;
use cfg_file::config::ConfigFile;
use serde::{Deserialize, Serialize};
+use std::io::Error;
use std::net::SocketAddr;
use std::path::Path;
use std::path::PathBuf;
@@ -17,6 +18,7 @@ use crate::data::member::MemberId;
use crate::data::sheet::SheetName;
use crate::data::vault::config::VaultUuid;
+const ACCOUNT: &str = "{account}";
const SHEET_NAME: &str = "{sheet_name}";
#[derive(Serialize, Deserialize, ConfigFile)]
@@ -68,8 +70,15 @@ impl LocalConfig {
}
/// Set the currently used account
- pub fn set_current_account(&mut self, account: MemberId) {
+ pub fn set_current_account(&mut self, account: MemberId) -> Result<(), std::io::Error> {
+ if self.sheet_in_use().is_some() {
+ return Err(Error::new(
+ std::io::ErrorKind::DirectoryNotEmpty,
+ "Please exit the current sheet before switching accounts",
+ ));
+ }
self.using_account = account;
+ Ok(())
}
/// Set the currently used sheet
@@ -107,7 +116,7 @@ impl LocalConfig {
self.check_local_path_empty(&local_path).await?;
// Get the draft folder path
- let draft_folder = self.draft_folder(&sheet, &local_path);
+ let draft_folder = self.draft_folder(&self.using_account, &sheet, &local_path);
if draft_folder.exists() {
// Exists
@@ -135,7 +144,7 @@ impl LocalConfig {
let sheet_name = self.sheet_in_use().as_ref().unwrap().clone();
// Get the draft folder path
- let draft_folder = self.draft_folder(&sheet_name, &local_path);
+ let draft_folder = self.draft_folder(&self.using_account, &sheet_name, &local_path);
// Create the draft folder if it doesn't exist
if !draft_folder.exists() {
@@ -312,11 +321,15 @@ impl LocalConfig {
/// Get draft folder
pub fn draft_folder(
&self,
+ account: &MemberId,
sheet_name: &SheetName,
local_workspace_path: impl Into<PathBuf>,
) -> PathBuf {
+ let account_str = snake_case!(account.as_str());
let sheet_name_str = snake_case!(sheet_name.as_str());
- let draft_path = CLIENT_PATH_LOCAL_DRAFT.replace(SHEET_NAME, &sheet_name_str);
+ let draft_path = CLIENT_PATH_LOCAL_DRAFT
+ .replace(ACCOUNT, &account_str)
+ .replace(SHEET_NAME, &sheet_name_str);
local_workspace_path.into().join(draft_path)
}
@@ -330,7 +343,7 @@ impl LocalConfig {
return None;
};
- Some(self.draft_folder(sheet_name, current_dir))
+ Some(self.draft_folder(&self.using_account, sheet_name, current_dir))
}
}
diff --git a/crates/vcs_data/src/data/sheet.rs b/crates/vcs_data/src/data/sheet.rs
index ce450a6..69dc27d 100644
--- a/crates/vcs_data/src/data/sheet.rs
+++ b/crates/vcs_data/src/data/sheet.rs
@@ -89,6 +89,16 @@ impl<'a> Sheet<'a> {
&self.data.mapping
}
+ /// Forget the holder of this sheet
+ pub fn forget_holder(&mut self) {
+ self.data.holder = None;
+ }
+
+ /// Set the holder of this sheet
+ pub fn set_holder(&mut self, holder: MemberId) {
+ self.data.holder = Some(holder);
+ }
+
/// Add an input package to the sheet
pub fn add_input(&mut self, input_package: InputPackage) -> Result<(), std::io::Error> {
if self.data.inputs.iter().any(|input| input == &input_package) {