fix: 修复设置窗口死锁问题
This commit is contained in:
34
src/gui.rs
34
src/gui.rs
@@ -379,6 +379,12 @@ impl eframe::App for App {
|
|||||||
// 设置窗口
|
// 设置窗口
|
||||||
let show_settings = st.show_settings;
|
let show_settings = st.show_settings;
|
||||||
let state_clone = state.clone();
|
let state_clone = state.clone();
|
||||||
|
let mut st_host = st.host.clone();
|
||||||
|
let mut st_port = st.port;
|
||||||
|
let mut st_token_id = st.token_id.clone();
|
||||||
|
let mut st_token_secret = st.token_secret.clone();
|
||||||
|
|
||||||
|
drop(st);
|
||||||
|
|
||||||
if show_settings {
|
if show_settings {
|
||||||
egui::Window::new("设置")
|
egui::Window::new("设置")
|
||||||
@@ -393,36 +399,34 @@ impl eframe::App for App {
|
|||||||
ui.separator();
|
ui.separator();
|
||||||
ui.add_space(8.0);
|
ui.add_space(8.0);
|
||||||
|
|
||||||
let mut state = state_clone.write().unwrap();
|
|
||||||
|
|
||||||
// Base URL 显示
|
// Base URL 显示
|
||||||
ui.label("API 地址:");
|
ui.label("API 地址:");
|
||||||
ui.colored_label(egui::Color32::GRAY, format!("https://{}:{}/api2/json/", state.host, state.port));
|
ui.colored_label(egui::Color32::GRAY, format!("https://{}:{}/api2/json/", st_host, st_port));
|
||||||
|
|
||||||
ui.add_space(8.0);
|
ui.add_space(8.0);
|
||||||
|
|
||||||
// Host 输入
|
// Host 输入
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label("Host:");
|
ui.label("Host:");
|
||||||
ui.add(egui::TextEdit::singleline(&mut state.host).desired_width(200.0));
|
ui.add(egui::TextEdit::singleline(&mut st_host).desired_width(200.0));
|
||||||
});
|
});
|
||||||
|
|
||||||
// Port 输入
|
// Port 输入
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label("端口:");
|
ui.label("端口:");
|
||||||
ui.add(egui::DragValue::new(&mut state.port).range(1..=65535).speed(1));
|
ui.add(egui::DragValue::new(&mut st_port).range(1..=65535).speed(1));
|
||||||
});
|
});
|
||||||
|
|
||||||
// 令牌ID 输入
|
// 令牌ID 输入
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label("令牌ID:");
|
ui.label("令牌ID:");
|
||||||
ui.add(egui::TextEdit::singleline(&mut state.token_id).desired_width(200.0));
|
ui.add(egui::TextEdit::singleline(&mut st_token_id).desired_width(200.0));
|
||||||
});
|
});
|
||||||
|
|
||||||
// 密钥 输入(密码框)
|
// 密钥 输入(密码框)
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
ui.label("密钥:");
|
ui.label("密钥:");
|
||||||
ui.add(egui::TextEdit::singleline(&mut state.token_secret).password(true).desired_width(200.0));
|
ui.add(egui::TextEdit::singleline(&mut st_token_secret).password(true).desired_width(200.0));
|
||||||
});
|
});
|
||||||
|
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
@@ -433,15 +437,15 @@ impl eframe::App for App {
|
|||||||
let cancel_clicked = ui.button("取消").clicked();
|
let cancel_clicked = ui.button("取消").clicked();
|
||||||
|
|
||||||
if save_clicked {
|
if save_clicked {
|
||||||
let h = state.host.clone();
|
if !st_host.is_empty() && !st_token_id.is_empty() && !st_token_secret.is_empty() {
|
||||||
let p = state.port;
|
let client = ProxmoxClient::new(&st_host, st_port, &st_token_id, &st_token_secret);
|
||||||
let tid = state.token_id.clone();
|
let mut state = state_clone.write().unwrap();
|
||||||
let ts = state.token_secret.clone();
|
state.host = st_host;
|
||||||
if !h.is_empty() && !tid.is_empty() && !ts.is_empty() {
|
state.port = st_port;
|
||||||
let client = ProxmoxClient::new(&h, p, &tid, &ts);
|
state.token_id = st_token_id;
|
||||||
|
state.token_secret = st_token_secret;
|
||||||
state.client = Arc::new(Mutex::new(Some(client)));
|
state.client = Arc::new(Mutex::new(Some(client)));
|
||||||
state.is_connected = true;
|
state.is_connected = true;
|
||||||
|
|
||||||
state.save_config();
|
state.save_config();
|
||||||
state.add_log("配置已保存");
|
state.add_log("配置已保存");
|
||||||
state.show_settings = false;
|
state.show_settings = false;
|
||||||
@@ -449,7 +453,7 @@ impl eframe::App for App {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if cancel_clicked {
|
if cancel_clicked {
|
||||||
state.show_settings = false;
|
state_clone.write().unwrap().show_settings = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user