summaryrefslogtreecommitdiff
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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;
+ }
+}