summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/src/constants.rs22
-rw-r--r--data/src/data/local.rs9
-rw-r--r--data/src/data/local/cached_sheet.rs26
-rw-r--r--data/src/data/local/config.rs9
-rw-r--r--data/src/data/local/latest_file_data.rs6
-rw-r--r--data/src/data/local/latest_info.rs6
-rw-r--r--data/src/data/sheet.rs6
-rw-r--r--data/src/data/user/accounts.rs12
-rw-r--r--data/src/data/vault/sheet_share.rs12
-rw-r--r--data/src/data/vault/virtual_file.rs38
10 files changed, 74 insertions, 72 deletions
diff --git a/data/src/constants.rs b/data/src/constants.rs
index 3d839a6..bc3343f 100644
--- a/data/src/constants.rs
+++ b/data/src/constants.rs
@@ -9,6 +9,15 @@ pub const PORT: u16 = 25331;
// Vault Host Name
pub const VAULT_HOST_NAME: &str = "host";
+// Default Virtual File Version and Direction
+pub const DEFAULT_VF_VERSION: &str = "0.1.0";
+pub const DEFAULT_VF_DESCRIPTION: &str = "_";
+
+// -------------------------------------------------------------------------------------
+
+// Prefix
+pub const VF_PREFIX: &str = "vf-";
+
// -------------------------------------------------------------------------------------
// Suffix
@@ -38,6 +47,19 @@ pub const CLIENT_SUFFIX_CACHED_SHEET_FILE_NO_DOT: &str = "st";
// -------------------------------------------------------------------------------------
+// Keys
+pub const KEY_SHEET_NAME: &str = "{sheet_name}";
+pub const KEY_MEMBER_ID: &str = "{member_id}";
+pub const KEY_TEMP_NAME: &str = "{temp_name}";
+pub const KEY_VF_INDEX: &str = "{vf_index}";
+pub const KEY_VF_ID: &str = "{vf_id}";
+pub const KEY_VF_VERSION: &str = "{vf_version}";
+pub const KEY_ACCOUNT: &str = "{account}";
+pub const KEY_SELF_ID: &str = "{self_id}";
+pub const KEY_SHARE_ID: &str = "{share_id}";
+
+// -------------------------------------------------------------------------------------
+
// Server
// Server - Vault (Main)
pub const SERVER_FILE_VAULT: &str = "./vault.toml";
diff --git a/data/src/data/local.rs b/data/src/data/local.rs
index 67f3943..0927e3f 100644
--- a/data/src/data/local.rs
+++ b/data/src/data/local.rs
@@ -14,7 +14,7 @@ use crate::{
constants::{
CLIENT_CONTENT_GITIGNORE, CLIENT_FILE_GITIGNORE, CLIENT_FILE_LOCAL_SHEET,
CLIENT_FILE_TODOLIST, CLIENT_FILE_WORKSPACE, CLIENT_FOLDER_WORKSPACE_ROOT_NAME,
- CLIENT_PATH_LOCAL_SHEET, CLIENT_SUFFIX_LOCAL_SHEET_FILE,
+ CLIENT_PATH_LOCAL_SHEET, CLIENT_SUFFIX_LOCAL_SHEET_FILE, KEY_ACCOUNT, KEY_SHEET_NAME,
},
current::{current_local_path, find_local_path},
data::{
@@ -37,9 +37,6 @@ pub mod local_sheet;
pub mod vault_modified;
pub mod workspace_analyzer;
-const SHEET_NAME: &str = "{sheet_name}";
-const ACCOUNT_NAME: &str = "{account}";
-
pub struct LocalWorkspace {
config: Arc<Mutex<LocalConfig>>,
local_path: PathBuf,
@@ -120,8 +117,8 @@ impl LocalWorkspace {
pub fn local_sheet_path(&self, member: &MemberId, sheet: &SheetName) -> PathBuf {
self.local_path.join(
CLIENT_FILE_LOCAL_SHEET
- .replace(ACCOUNT_NAME, member)
- .replace(SHEET_NAME, sheet),
+ .replace(KEY_ACCOUNT, member)
+ .replace(KEY_SHEET_NAME, sheet),
)
}
diff --git a/data/src/data/local/cached_sheet.rs b/data/src/data/local/cached_sheet.rs
index 39f9814..8394006 100644
--- a/data/src/data/local/cached_sheet.rs
+++ b/data/src/data/local/cached_sheet.rs
@@ -7,6 +7,7 @@ use tokio::fs;
use crate::{
constants::{
CLIENT_FILE_CACHED_SHEET, CLIENT_PATH_CACHED_SHEET, CLIENT_SUFFIX_CACHED_SHEET_FILE,
+ KEY_SHEET_NAME,
},
current::current_local_path,
data::sheet::{SheetData, SheetName},
@@ -14,9 +15,6 @@ use crate::{
pub type CachedSheetPathBuf = PathBuf;
-const SHEET_NAME: &str = "{sheet_name}";
-const ACCOUNT_NAME: &str = "{account}";
-
/// # Cached Sheet
/// The cached sheet is a read-only version cloned from the upstream repository to the local environment,
/// automatically generated during update operations,
@@ -43,7 +41,7 @@ impl CachedSheet {
let current_workspace = current_local_path()?;
Some(
current_workspace
- .join(CLIENT_FILE_CACHED_SHEET.replace(SHEET_NAME, &sheet_name.to_string())),
+ .join(CLIENT_FILE_CACHED_SHEET.replace(KEY_SHEET_NAME, &sheet_name.to_string())),
)
}
@@ -57,12 +55,13 @@ impl CachedSheet {
if path.is_file()
&& let Some(file_name) = path.file_name().and_then(|n| n.to_str())
- && file_name.ends_with(CLIENT_SUFFIX_CACHED_SHEET_FILE) {
- let name_without_ext = file_name
- .trim_end_matches(CLIENT_SUFFIX_CACHED_SHEET_FILE)
- .to_string();
- sheet_names.push(name_without_ext);
- }
+ && file_name.ends_with(CLIENT_SUFFIX_CACHED_SHEET_FILE)
+ {
+ let name_without_ext = file_name
+ .trim_end_matches(CLIENT_SUFFIX_CACHED_SHEET_FILE)
+ .to_string();
+ sheet_names.push(name_without_ext);
+ }
}
Ok(sheet_names)
@@ -84,9 +83,10 @@ impl CachedSheet {
if path.is_file()
&& let Some(file_name) = path.file_name().and_then(|n| n.to_str())
- && file_name.ends_with(CLIENT_SUFFIX_CACHED_SHEET_FILE) {
- sheet_paths.push(format_path(workspace_path.join(path))?);
- }
+ && file_name.ends_with(CLIENT_SUFFIX_CACHED_SHEET_FILE)
+ {
+ sheet_paths.push(format_path(workspace_path.join(path))?);
+ }
}
Ok(sheet_paths)
diff --git a/data/src/data/local/config.rs b/data/src/data/local/config.rs
index 8a89c20..08c25ff 100644
--- a/data/src/data/local/config.rs
+++ b/data/src/data/local/config.rs
@@ -11,6 +11,8 @@ use crate::constants::CLIENT_FILE_WORKSPACE;
use crate::constants::CLIENT_FOLDER_WORKSPACE_ROOT_NAME;
use crate::constants::CLIENT_PATH_LOCAL_DRAFT;
use crate::constants::CLIENT_PATH_WORKSPACE_ROOT;
+use crate::constants::KEY_ACCOUNT;
+use crate::constants::KEY_SHEET_NAME;
use crate::constants::PORT;
use crate::current::current_local_path;
use crate::data::local::latest_info::LatestInfo;
@@ -18,9 +20,6 @@ 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, Clone)]
#[cfg_file(path = CLIENT_FILE_WORKSPACE)]
pub struct LocalConfig {
@@ -351,8 +350,8 @@ impl LocalConfig {
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(ACCOUNT, &account_str)
- .replace(SHEET_NAME, &sheet_name_str);
+ .replace(KEY_ACCOUNT, &account_str)
+ .replace(KEY_SHEET_NAME, &sheet_name_str);
local_workspace_path.into().join(draft_path)
}
diff --git a/data/src/data/local/latest_file_data.rs b/data/src/data/local/latest_file_data.rs
index 21c647c..95de015 100644
--- a/data/src/data/local/latest_file_data.rs
+++ b/data/src/data/local/latest_file_data.rs
@@ -4,7 +4,7 @@ use cfg_file::ConfigFile;
use serde::{Deserialize, Serialize};
use crate::{
- constants::{CLIENT_FILE_LATEST_DATA, CLIENT_FILE_MEMBER_HELD_NOSET},
+ constants::{CLIENT_FILE_LATEST_DATA, CLIENT_FILE_MEMBER_HELD_NOSET, KEY_ACCOUNT},
current::current_local_path,
data::{
member::MemberId,
@@ -12,8 +12,6 @@ use crate::{
},
};
-const ACCOUNT: &str = "{account}";
-
/// # Latest file data
/// Records the file holder and the latest version for permission and update checks
#[derive(Debug, Default, Clone, Serialize, Deserialize, ConfigFile)]
@@ -54,7 +52,7 @@ impl LatestFileData {
"Workspace not found.",
));
};
- Ok(local_path.join(CLIENT_FILE_LATEST_DATA.replace(ACCOUNT, account)))
+ Ok(local_path.join(CLIENT_FILE_LATEST_DATA.replace(KEY_ACCOUNT, account)))
}
/// Get the member who holds the file with the given ID.
diff --git a/data/src/data/local/latest_info.rs b/data/src/data/local/latest_info.rs
index e11836b..ec1e482 100644
--- a/data/src/data/local/latest_info.rs
+++ b/data/src/data/local/latest_info.rs
@@ -8,7 +8,7 @@ use cfg_file::ConfigFile;
use serde::{Deserialize, Serialize};
use crate::{
- constants::{CLIENT_FILE_LATEST_INFO, CLIENT_FILE_LATEST_INFO_NOSET},
+ constants::{CLIENT_FILE_LATEST_INFO, CLIENT_FILE_LATEST_INFO_NOSET, KEY_ACCOUNT},
data::{
member::{Member, MemberId},
sheet::{SheetData, SheetName, SheetPathBuf},
@@ -19,8 +19,6 @@ use crate::{
},
};
-const ACCOUNT: &str = "{account}";
-
/// # Latest Info
/// Locally cached latest information,
/// used to cache personal information from upstream for querying and quickly retrieving member information.
@@ -69,7 +67,7 @@ pub struct LatestInfo {
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: &Path, member_id: &MemberId) -> PathBuf {
- local_workspace_path.join(CLIENT_FILE_LATEST_INFO.replace(ACCOUNT, member_id))
+ local_workspace_path.join(CLIENT_FILE_LATEST_INFO.replace(KEY_ACCOUNT, member_id))
}
}
diff --git a/data/src/data/sheet.rs b/data/src/data/sheet.rs
index 64b1985..8b427e9 100644
--- a/data/src/data/sheet.rs
+++ b/data/src/data/sheet.rs
@@ -4,7 +4,7 @@ use cfg_file::{ConfigFile, config::ConfigFile};
use serde::{Deserialize, Serialize};
use crate::{
- constants::SERVER_FILE_SHEET,
+ constants::{KEY_SHEET_NAME, SERVER_FILE_SHEET},
data::{
member::MemberId,
vault::{
@@ -17,8 +17,6 @@ use crate::{
pub type SheetName = String;
pub type SheetPathBuf = PathBuf;
-const SHEET_NAME: &str = "{sheet_name}";
-
pub struct Sheet<'a> {
/// The name of the current sheet
pub(crate) name: SheetName,
@@ -233,7 +231,7 @@ impl<'a> Sheet<'a> {
pub fn sheet_path_with_name(vault: &Vault, name: impl AsRef<str>) -> PathBuf {
vault
.vault_path()
- .join(SERVER_FILE_SHEET.replace(SHEET_NAME, name.as_ref()))
+ .join(SERVER_FILE_SHEET.replace(KEY_SHEET_NAME, name.as_ref()))
}
/// Clone the data of the sheet
diff --git a/data/src/data/user/accounts.rs b/data/src/data/user/accounts.rs
index d77bc02..def2677 100644
--- a/data/src/data/user/accounts.rs
+++ b/data/src/data/user/accounts.rs
@@ -7,15 +7,13 @@ use std::{
use cfg_file::config::ConfigFile;
use crate::{
- constants::{USER_FILE_ACCOUNTS, USER_FILE_KEY, USER_FILE_MEMBER},
+ constants::{KEY_SELF_ID, USER_FILE_ACCOUNTS, USER_FILE_KEY, USER_FILE_MEMBER},
data::{
member::{Member, MemberId},
user::UserDirectory,
},
};
-const SELF_ID: &str = "{self_id}";
-
/// Account Management
impl UserDirectory {
/// Read account from configuration file
@@ -32,7 +30,7 @@ impl UserDirectory {
pub fn account_ids(&self) -> Result<Vec<MemberId>, std::io::Error> {
let accounts_path = self
.local_path
- .join(USER_FILE_ACCOUNTS.replace(SELF_ID, ""));
+ .join(USER_FILE_ACCOUNTS.replace(KEY_SELF_ID, ""));
if !accounts_path.exists() {
return Ok(Vec::new());
@@ -96,7 +94,7 @@ impl UserDirectory {
// Ensure accounts directory exists
let accounts_dir = self
.local_path
- .join(USER_FILE_ACCOUNTS.replace(SELF_ID, ""));
+ .join(USER_FILE_ACCOUNTS.replace(KEY_SELF_ID, ""));
if !accounts_dir.exists() {
fs::create_dir_all(&accounts_dir)?;
}
@@ -153,12 +151,12 @@ impl UserDirectory {
/// Get the account's configuration file path, but do not check if the file exists
pub fn account_cfg_path(&self, id: &MemberId) -> PathBuf {
self.local_path
- .join(USER_FILE_MEMBER.replace(SELF_ID, id.to_string().as_str()))
+ .join(USER_FILE_MEMBER.replace(KEY_SELF_ID, id.to_string().as_str()))
}
/// Get the account's private key file path, but do not check if the file exists
pub fn account_private_key_path(&self, id: &MemberId) -> PathBuf {
self.local_path
- .join(USER_FILE_KEY.replace(SELF_ID, id.to_string().as_str()))
+ .join(USER_FILE_KEY.replace(KEY_SELF_ID, id.to_string().as_str()))
}
}
diff --git a/data/src/data/vault/sheet_share.rs b/data/src/data/vault/sheet_share.rs
index 1e692f1..5d27859 100644
--- a/data/src/data/vault/sheet_share.rs
+++ b/data/src/data/vault/sheet_share.rs
@@ -8,7 +8,8 @@ use tokio::fs;
use crate::{
constants::{
- SERVER_FILE_SHEET_SHARE, SERVER_PATH_SHARES, SERVER_SUFFIX_SHEET_SHARE_FILE_NO_DOT,
+ KEY_SHARE_ID, KEY_SHEET_NAME, SERVER_FILE_SHEET_SHARE, SERVER_PATH_SHARES,
+ SERVER_SUFFIX_SHEET_SHARE_FILE_NO_DOT,
},
data::{
member::MemberId,
@@ -19,9 +20,6 @@ use crate::{
pub type SheetShareId = String;
-const SHEET_NAME: &str = "{sheet_name}";
-const SHARE_ID: &str = "{share_id}";
-
#[derive(Default, Serialize, Deserialize, ConfigFile, Clone, Debug)]
pub struct Share {
/// Sharer: the member who created this share item
@@ -87,8 +85,8 @@ impl Vault {
// Format the path to remove "./" prefix and normalize it
let path_str = SERVER_FILE_SHEET_SHARE
- .replace(SHEET_NAME, &sheet_name)
- .replace(SHARE_ID, &share_id);
+ .replace(KEY_SHEET_NAME, &sheet_name)
+ .replace(KEY_SHARE_ID, &share_id);
// Use format_path to normalize the path
match format_path::format_path_str(&path_str) {
@@ -105,7 +103,7 @@ impl Vault {
let sheet_name = snake_case!(sheet_name.clone());
let shares_dir = self
.vault_path()
- .join(SERVER_PATH_SHARES.replace(SHEET_NAME, &sheet_name));
+ .join(SERVER_PATH_SHARES.replace(KEY_SHEET_NAME, &sheet_name));
let mut result = Vec::new();
if let Ok(mut entries) = fs::read_dir(shares_dir).await {
diff --git a/data/src/data/vault/virtual_file.rs b/data/src/data/vault/virtual_file.rs
index 8dbcb5d..28e9172 100644
--- a/data/src/data/vault/virtual_file.rs
+++ b/data/src/data/vault/virtual_file.rs
@@ -13,8 +13,9 @@ use uuid::Uuid;
use crate::{
constants::{
- SERVER_FILE_VF_META, SERVER_FILE_VF_VERSION_INSTANCE, SERVER_PATH_VF_ROOT,
- SERVER_PATH_VF_STORAGE, SERVER_PATH_VF_TEMP,
+ DEFAULT_VF_DESCRIPTION, DEFAULT_VF_VERSION, KEY_TEMP_NAME, KEY_VF_ID, KEY_VF_INDEX,
+ KEY_VF_VERSION, SERVER_FILE_VF_META, SERVER_FILE_VF_VERSION_INSTANCE, SERVER_PATH_VF_ROOT,
+ SERVER_PATH_VF_STORAGE, SERVER_PATH_VF_TEMP, VF_PREFIX,
},
data::{member::MemberId, vault::Vault},
};
@@ -22,12 +23,6 @@ use crate::{
pub type VirtualFileId = String;
pub type VirtualFileVersion = String;
-const VF_PREFIX: &str = "vf-";
-const ID_PARAM: &str = "{vf_id}";
-const ID_INDEX: &str = "{vf_index}";
-const VERSION_PARAM: &str = "{vf_version}";
-const TEMP_NAME: &str = "{temp_name}";
-
pub struct VirtualFile<'a> {
/// Unique identifier for the virtual file
id: VirtualFileId,
@@ -82,7 +77,7 @@ impl Vault {
pub fn virtual_file_temp_path(&self) -> PathBuf {
let random_receive_name = format!("{}", uuid::Uuid::new_v4());
self.vault_path
- .join(SERVER_PATH_VF_TEMP.replace(TEMP_NAME, &random_receive_name))
+ .join(SERVER_PATH_VF_TEMP.replace(KEY_TEMP_NAME, &random_receive_name))
}
/// Get the directory where virtual files are stored
@@ -94,8 +89,8 @@ impl Vault {
pub fn virtual_file_dir(&self, id: &VirtualFileId) -> Result<PathBuf, std::io::Error> {
Ok(self.vault_path().join(
SERVER_PATH_VF_STORAGE
- .replace(ID_PARAM, &id.to_string())
- .replace(ID_INDEX, &Self::vf_index(id)?),
+ .replace(KEY_VF_ID, &id.to_string())
+ .replace(KEY_VF_INDEX, &Self::vf_index(id)?),
))
}
@@ -145,9 +140,9 @@ impl Vault {
) -> PathBuf {
self.vault_path().join(
SERVER_FILE_VF_VERSION_INSTANCE
- .replace(ID_PARAM, &id.to_string())
- .replace(ID_INDEX, &Self::vf_index(id).unwrap_or_default())
- .replace(VERSION_PARAM, &version.to_string()),
+ .replace(KEY_VF_ID, &id.to_string())
+ .replace(KEY_VF_INDEX, &Self::vf_index(id).unwrap_or_default())
+ .replace(KEY_VF_VERSION, &version.to_string()),
)
}
@@ -155,8 +150,8 @@ impl Vault {
pub fn virtual_file_meta_path(&self, id: &VirtualFileId) -> PathBuf {
self.vault_path().join(
SERVER_FILE_VF_META
- .replace(ID_PARAM, &id.to_string())
- .replace(ID_INDEX, &Self::vf_index(id).unwrap_or_default()),
+ .replace(KEY_VF_ID, &id.to_string())
+ .replace(KEY_VF_INDEX, &Self::vf_index(id).unwrap_or_default()),
)
}
@@ -211,10 +206,9 @@ impl Vault {
instance: &mut ConnectionInstance,
member_id: &MemberId,
) -> Result<VirtualFileId, std::io::Error> {
- const FIRST_VERSION: &str = "0.1.0";
let receive_path = self.virtual_file_temp_path();
let new_id = format!("{}{}", VF_PREFIX, Uuid::new_v4());
- let move_path = self.virtual_file_real_path(&new_id, &FIRST_VERSION.to_string());
+ let move_path = self.virtual_file_real_path(&new_id, &DEFAULT_VF_VERSION.to_string());
match instance.read_file(receive_path.clone()).await {
Ok(_) => {
@@ -223,22 +217,22 @@ impl Vault {
let mut version_description =
HashMap::<VirtualFileVersion, VirtualFileVersionDescription>::new();
version_description.insert(
- FIRST_VERSION.to_string(),
+ DEFAULT_VF_VERSION.to_string(),
VirtualFileVersionDescription {
creator: member_id.clone(),
- description: "Track".to_string(),
+ description: DEFAULT_VF_DESCRIPTION.to_string(),
},
);
// Create metadata
let mut meta = VirtualFileMeta {
- current_version: FIRST_VERSION.to_string(),
+ current_version: DEFAULT_VF_VERSION.to_string(),
hold_member: member_id.clone(), // The holder of the newly created virtual file is the creator by default
version_description,
histories: Vec::default(),
};
// Add first version
- meta.histories.push(FIRST_VERSION.to_string());
+ meta.histories.push(DEFAULT_VF_VERSION.to_string());
// Write metadata to file
VirtualFileMeta::write_to(&meta, self.virtual_file_meta_path(&new_id)).await?;