summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2025-11-17 17:39:33 +0800
committer魏曹先生 <1992414357@qq.com>2025-11-17 17:39:33 +0800
commit5055b1081be945f9c4191d0a83330683f6d151d3 (patch)
treeb3e043331ebfaf4628b6bb05f2c5d93c9d39637b
parentaf034c91f9405816cd08247b5e773595995cc46d (diff)
Track recent IP addresses in direct operations
Add IP address history functionality to store and retrieve recently used IP addresses when performing direct operations. Maintains a history file with up to 8 most recent IPs for quick access.
-rw-r--r--src/bin/jv.rs18
-rw-r--r--src/data.rs2
-rw-r--r--src/data/ipaddress_history.rs34
3 files changed, 48 insertions, 6 deletions
diff --git a/src/bin/jv.rs b/src/bin/jv.rs
index f793341..14ba9ef 100644
--- a/src/bin/jv.rs
+++ b/src/bin/jv.rs
@@ -28,10 +28,11 @@ use just_enough_vcs::{
current::{current_doc_dir, current_local_path},
data::{
local::{
- LocalWorkspace, config::LocalConfig, file_status::AnalyzeResult,
- latest_info::LatestInfo, local_files::get_relative_paths, member_held::MemberHeld,
+ LocalWorkspace, cached_sheet::CachedSheet, config::LocalConfig,
+ file_status::AnalyzeResult, latest_info::LatestInfo,
+ local_files::get_relative_paths, member_held::MemberHeld,
},
- member::Member,
+ member::{Member, MemberId},
user::UserDirectory,
},
docs::{ASCII_YIZI, document, documents},
@@ -50,7 +51,10 @@ use just_enough_vcs::{
vcs::{actions::local_actions::proc_set_upstream_vault_action, registry::client_registry},
};
use just_enough_vcs_cli::{
- data::compile_info::CompileInfo,
+ data::{
+ compile_info::CompileInfo,
+ ipaddress_history::{get_recent_ip_address, insert_recent_ip_address},
+ },
utils::{
display::{SimpleTable, md, size_str},
env::current_locales,
@@ -1944,13 +1948,15 @@ async fn jv_direct(args: DirectArgs) {
"jv.result.direct.directed_and_stained",
upstream = upstream
))
- )
+ );
+ insert_recent_ip_address(upstream.to_string().trim()).await;
}
SetUpstreamVaultActionResult::Redirected => {
println!(
"{}",
md(t!("jv.result.direct.redirected", upstream = upstream))
- )
+ );
+ insert_recent_ip_address(upstream.to_string().trim()).await;
}
SetUpstreamVaultActionResult::AlreadyStained => {
eprintln!(
diff --git a/src/data.rs b/src/data.rs
index 036fd98..d1c5d53 100644
--- a/src/data.rs
+++ b/src/data.rs
@@ -1,2 +1,4 @@
#[allow(dead_code)]
pub mod compile_info;
+
+pub mod ipaddress_history;
diff --git a/src/data/ipaddress_history.rs b/src/data/ipaddress_history.rs
new file mode 100644
index 0000000..3d2bb5b
--- /dev/null
+++ b/src/data/ipaddress_history.rs
@@ -0,0 +1,34 @@
+use just_enough_vcs::vcs::current::current_doc_dir;
+
+const IP_HISTORY_NAME: &str = "ip_history.txt";
+
+pub struct IpAddressHistory {
+ pub recent_ip_address: Vec<String>,
+}
+
+pub async fn get_recent_ip_address() -> Vec<String> {
+ if let Some(local) = current_doc_dir() {
+ let path = local.join(IP_HISTORY_NAME);
+ match tokio::fs::read_to_string(path).await {
+ Ok(content) => content.lines().map(String::from).collect(),
+ Err(_) => Vec::new(),
+ }
+ } else {
+ Vec::new()
+ }
+}
+
+pub async fn insert_recent_ip_address(ip: impl Into<String>) {
+ let ip = ip.into();
+ if let Some(local) = current_doc_dir() {
+ let path = local.join(IP_HISTORY_NAME);
+ let mut recent_ips = get_recent_ip_address().await;
+ recent_ips.retain(|existing_ip| existing_ip != &ip);
+ recent_ips.insert(0, ip);
+ if recent_ips.len() > 8 {
+ recent_ips.truncate(8);
+ }
+ let content = recent_ips.join("\n");
+ let _ = tokio::fs::write(path, content).await;
+ }
+}