diff --git a/libs/hbb_common/src/config.rs b/libs/hbb_common/src/config.rs index 72eee9309..409a97439 100644 --- a/libs/hbb_common/src/config.rs +++ b/libs/hbb_common/src/config.rs @@ -646,7 +646,7 @@ impl PeerConfig { Config::path(path).with_extension("toml") } - pub fn peers() -> Vec<(String, SystemTime, PeerInfoSerde)> { + pub fn peers() -> Vec<(String, SystemTime, PeerConfig)> { if let Ok(peers) = Config::path(PEERS).read_dir() { if let Ok(peers) = peers .map(|res| res.map(|e| e.path())) @@ -667,13 +667,13 @@ impl PeerConfig { .map(|p| p.to_str().unwrap_or("")) .unwrap_or("") .to_owned(); - let info = PeerConfig::load(&id).info; - if info.platform.is_empty() { + let c = PeerConfig::load(&id); + if c.info.platform.is_empty() { fs::remove_file(&p).ok(); } - (id, t, info) + (id, t, c) }) - .filter(|p| !p.2.platform.is_empty()) + .filter(|p| !p.2.info.platform.is_empty()) .collect(); peers.sort_unstable_by(|a, b| b.1.cmp(&a.1)); return peers; diff --git a/src/ui.rs b/src/ui.rs index 4f4506d00..f4d6253c9 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -266,6 +266,21 @@ impl UI { } } + fn get_peer_option(&self, id: String, name: String) -> String { + let c = PeerConfig::load(&id); + c.options.get(&name).unwrap_or(&"".to_owned()).to_owned() + } + + fn set_peer_option(&self, id: String, name: String, value: String) { + let mut c = PeerConfig::load(&id); + if value.is_empty() { + c.options.remove(&name); + } else { + c.options.insert(name, value); + } + c.store(&id); + } + fn get_options(&self) -> Value { let mut m = Value::map(); for (k, v) in self.2.lock().unwrap().iter() { @@ -364,9 +379,13 @@ impl UI { .map(|p| { let values = vec![ p.0.clone(), - p.2.username.clone(), - p.2.hostname.clone(), - p.2.platform.clone(), + p.2.info.username.clone(), + p.2.info.hostname.clone(), + p.2.info.platform.clone(), + p.2.options + .get("alias") + .unwrap_or(&"".to_owned()) + .to_owned(), ]; Value::from_iter(values) }) @@ -535,6 +554,8 @@ impl sciter::EventHandler for UI { fn fix_login_wayland(); fn get_options(); fn get_option(String); + fn get_peer_option(String, String); + fn set_peer_option(String, String, String); fn test_if_valid_server(String); fn get_sound_inputs(); fn set_options(Value); diff --git a/src/ui/index.tis b/src/ui/index.tis index 1af803470..ae965ddf9 100644 --- a/src/ui/index.tis +++ b/src/ui/index.tis @@ -64,13 +64,14 @@ class RecentSessions: Reactor.Component { var username = s[1]; var hostname = s[2]; var platform = s[3]; + var alias = s[4]; return
{platformSvg(platform, "white")}
{username}@{hostname}
-
{formatId(id)}
+
{alias ? alias : formatId(id)}
{svg_menu}
; @@ -109,6 +110,17 @@ event click $(menu#remote-context li) (evt, me) { createNewConnect(id, "rdp"); } else if (action == "tunnel") { createNewConnect(id, "port-forward"); + } else if (action == "rename") { + var old_name = handler.get_peer_option(id, "alias"); + handler.msgbox("custom-rename", "Rename", "
\ +
\ +
\ + ", function(res=null) { + if (!res) return; + var name = (res.name || "").trim(); + if (name != old_name) handler.set_peer_option(id, "alias", name); + self.select('#' + id).select('#alias').text = name || id; + }); } } @@ -318,6 +330,7 @@ class App: Reactor.Component
  • Transfer File
  • TCP Tunneling
  • RDP
  • +
  • Rename
  • Remove
  • {is_win &&
  • Create Desktop Shortcut
  • }