summaryrefslogtreecommitdiff
path: root/src/bin
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/jv.rs81
1 files changed, 68 insertions, 13 deletions
diff --git a/src/bin/jv.rs b/src/bin/jv.rs
index fb72b06..8901a94 100644
--- a/src/bin/jv.rs
+++ b/src/bin/jv.rs
@@ -40,7 +40,7 @@ use just_enough_vcs::{
vault_modified::check_vault_modified,
},
member::{Member, MemberId},
- sheet::SheetData,
+ sheet::{SheetData, SheetMappingMetadata},
user::UserDirectory,
vault::virtual_file::VirtualFileVersion,
},
@@ -1268,7 +1268,7 @@ async fn jv_here(_args: HereArgs) {
Err(_) => path.display().to_string(),
};
- let remote_files = mapping_names_here(&path, &local_dir, &cached_sheet);
+ let mut remote_files = mapping_names_here(&path, &local_dir, &cached_sheet);
let duration_updated =
Instant::now().duration_since(latest_info.update_instant.unwrap_or(Instant::now()));
@@ -1325,6 +1325,11 @@ async fn jv_here(_args: HereArgs) {
// Add directory count
dir_count += 1;
+ let dir_name = format!("{}/", file_name);
+
+ // Remove remote dirs items that already exist locally
+ remote_files.remove(&dir_name);
+
// Add directory item
table.insert_item(
0,
@@ -1335,7 +1340,7 @@ async fn jv_here(_args: HereArgs) {
version.to_string(),
t!(
"jv.success.here.append_info.name",
- name = format!("{}/", file_name.cyan())
+ name = dir_name.to_string().cyan()
)
.trim()
.to_string(),
@@ -1432,6 +1437,10 @@ async fn jv_here(_args: HereArgs) {
}
}
+ // Remove remote file items that already exist locally
+ remote_files.remove(&file_name);
+
+ // Add Table Item
table.push_item(vec![
editing.to_string(),
hold.to_string(),
@@ -1455,6 +1464,53 @@ async fn jv_here(_args: HereArgs) {
}
}
+ for mapping in remote_files {
+ if let Some(metadata) = mapping.1 {
+ let mut hold = "-".to_string();
+ if let Some(holder) = latest_file_data.file_holder(&metadata.id) {
+ if holder == &local_cfg.current_account() {
+ hold = t!("jv.success.here.append_info.holder.yourself")
+ .trim()
+ .green()
+ .to_string();
+ } else {
+ let holder_text =
+ t!("jv.success.here.append_info.holder.others", holder = holder)
+ .trim()
+ .truecolor(128, 128, 128);
+ hold = holder_text.to_string();
+ }
+ }
+
+ // File
+ table.push_item(vec![
+ t!("jv.success.here.append_info.editing.not_local")
+ .trim()
+ .truecolor(128, 128, 128)
+ .to_string(),
+ hold.to_string(),
+ "-".to_string(),
+ metadata.version,
+ t!("jv.success.here.append_info.name", name = mapping.0)
+ .trim()
+ .truecolor(128, 128, 128)
+ .to_string(),
+ ]);
+ } else {
+ // Directory
+ table.push_item(vec![
+ "-".to_string(),
+ "-".to_string(),
+ "-".to_string(),
+ "-".to_string(),
+ t!("jv.success.here.append_info.name", name = mapping.0)
+ .trim()
+ .truecolor(128, 128, 128)
+ .to_string(),
+ ]);
+ }
+ }
+
println!("{}", table);
// Print directory info
@@ -1468,8 +1524,6 @@ async fn jv_here(_args: HereArgs) {
)
.trim()
);
-
- remote_files.iter().for_each(|f| println!("{}", f));
}
async fn jv_status(_args: StatusArgs) {
@@ -3447,29 +3501,29 @@ fn mapping_names_here(
current_dir: &PathBuf,
local_dir: &PathBuf,
cached_sheet: &SheetData,
-) -> Vec<String> {
+) -> HashMap<String, Option<SheetMappingMetadata>> {
let Ok(relative_path) = current_dir.strip_prefix(local_dir) else {
- return Vec::new();
+ return HashMap::new();
};
// Collect files directly under current directory
- let files_here: Vec<String> = cached_sheet
+ let files_here: HashMap<String, Option<SheetMappingMetadata>> = cached_sheet
.mapping()
.iter()
- .filter_map(|(f, _)| {
+ .filter_map(|(f, mapping)| {
// Check if the file is directly under the current directory
f.parent()
.filter(|&parent| parent == relative_path)
.and_then(|_| f.file_name())
.and_then(|name| name.to_str())
- .map(|s| s.to_string())
+ .map(|s| (s.to_string(), Some(mapping.clone())))
})
.collect();
// Collect directories that appear in the mapping
let mut dirs_set = std::collections::HashSet::new();
- for (f, _) in cached_sheet.mapping().iter() {
+ for (f, _mapping) in cached_sheet.mapping().iter() {
// Get all parent directories of the file relative to the current directory
let mut current = f.as_path();
@@ -3490,12 +3544,13 @@ fn mapping_names_here(
}
// Filter out directories that are actually files
- let filtered_dirs: Vec<String> = dirs_set
+ let filtered_dirs: HashMap<String, Option<SheetMappingMetadata>> = dirs_set
.into_iter()
.filter(|dir_with_slash| {
let dir_name = dir_with_slash.trim_end_matches('/');
- !files_here.iter().any(|file_name| file_name == dir_name)
+ !files_here.contains_key(dir_name)
})
+ .map(|dir_name| (dir_name, None))
.collect();
// Combine results