summaryrefslogtreecommitdiff
path: root/legacy_data/src/data/local/latest_info.rs
diff options
context:
space:
mode:
Diffstat (limited to 'legacy_data/src/data/local/latest_info.rs')
-rw-r--r--legacy_data/src/data/local/latest_info.rs81
1 files changed, 81 insertions, 0 deletions
diff --git a/legacy_data/src/data/local/latest_info.rs b/legacy_data/src/data/local/latest_info.rs
new file mode 100644
index 0000000..5748793
--- /dev/null
+++ b/legacy_data/src/data/local/latest_info.rs
@@ -0,0 +1,81 @@
+use std::{
+ collections::{HashMap, HashSet},
+ path::{Path, PathBuf},
+ time::SystemTime,
+};
+
+use cfg_file::ConfigFile;
+use serde::{Deserialize, Serialize};
+
+use crate::{
+ constants::{CLIENT_FILE_LATEST_INFO, CLIENT_FILE_LATEST_INFO_NOSET, KEY_ACCOUNT},
+ data::{
+ member::{Member, MemberId},
+ sheet::{SheetData, SheetName, SheetPathBuf},
+ vault::{
+ mapping_share::{Share, SheetShareId},
+ virtual_file::VirtualFileId,
+ },
+ },
+};
+
+/// # Latest Info
+/// Locally cached latest information,
+/// used to cache personal information from upstream for querying and quickly retrieving member information.
+#[derive(Default, Serialize, Deserialize, ConfigFile)]
+#[cfg_file(path = CLIENT_FILE_LATEST_INFO_NOSET)]
+pub struct LatestInfo {
+ // Sheets
+ /// Visible sheets,
+ /// indicating which sheets I can edit
+ #[serde(rename = "my")]
+ pub visible_sheets: Vec<SheetName>,
+
+ /// Invisible sheets,
+ /// indicating which sheets I can export files to (these sheets are not readable to me)
+ #[serde(rename = "others")]
+ 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
+ #[serde(rename = "refsheets")]
+ pub reference_sheets: HashSet<SheetName>,
+
+ /// Reference sheet data, indicating what files I can get from the reference sheet
+ #[serde(rename = "ref")]
+ pub ref_sheet_content: SheetData,
+
+ /// Reverse mapping from virtual file IDs to actual paths in reference sheets
+ #[serde(rename = "ref_vfs")]
+ pub ref_sheet_vfs_mapping: HashMap<VirtualFileId, SheetPathBuf>,
+
+ /// Shares in my sheets, indicating which external merge requests have entries that I can view
+ #[serde(rename = "shares")]
+ pub shares_in_my_sheets: HashMap<SheetName, HashMap<SheetShareId, Share>>,
+
+ /// Update instant
+ #[serde(rename = "update")]
+ pub update_instant: Option<SystemTime>,
+
+ // Members
+ /// All member information of the vault, allowing me to contact them more conveniently
+ #[serde(rename = "members")]
+ pub vault_members: Vec<Member>,
+}
+
+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(KEY_ACCOUNT, member_id))
+ }
+}
+
+#[derive(Default, Serialize, Deserialize)]
+pub struct SheetInfo {
+ #[serde(rename = "name")]
+ pub sheet_name: SheetName,
+
+ #[serde(rename = "holder")]
+ pub holder_name: Option<MemberId>,
+}