Fix watcher

This commit is contained in:
Ultradesu
2025-07-22 17:41:48 +03:00
parent 6012728644
commit f6e3ad8558

View File

@@ -211,6 +211,7 @@ struct KhmSettingsWindow {
is_syncing: bool, is_syncing: bool,
sync_result_receiver: Option<mpsc::Receiver<Result<String, String>>>, sync_result_receiver: Option<mpsc::Receiver<Result<String, String>>>,
sync_status: SyncStatus, sync_status: SyncStatus,
operation_log: Vec<String>,
} }
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
@@ -250,10 +251,12 @@ impl eframe::App for KhmSettingsWindow {
let flow = self.settings.flow.clone(); let flow = self.settings.flow.clone();
self.connection_status = ConnectionStatus::Connected { keys_count, flow }; self.connection_status = ConnectionStatus::Connected { keys_count, flow };
self.add_log_entry(format!("✅ Connection test successful: Found {} keys", keys_count));
info!("Connection test successful: {}", message); info!("Connection test successful: {}", message);
} }
Err(error) => { Err(error) => {
self.connection_status = ConnectionStatus::Error(error.clone()); self.connection_status = ConnectionStatus::Error(error.clone());
self.add_log_entry(format!("❌ Connection test failed: {}", error));
error!("Connection test failed: {}", error); error!("Connection test failed: {}", error);
} }
} }
@@ -325,10 +328,12 @@ impl eframe::App for KhmSettingsWindow {
info!("Parsed keys count: {}", keys_count); info!("Parsed keys count: {}", keys_count);
self.sync_status = SyncStatus::Success { keys_count }; self.sync_status = SyncStatus::Success { keys_count };
self.add_log_entry(format!("✅ Sync completed successfully: {} keys", keys_count));
info!("Sync successful: {}", message); info!("Sync successful: {}", message);
} }
Err(error) => { Err(error) => {
self.sync_status = SyncStatus::Error(error.clone()); self.sync_status = SyncStatus::Error(error.clone());
self.add_log_entry(format!("❌ Sync failed: {}", error));
error!("Sync failed: {}", error); error!("Sync failed: {}", error);
} }
} }
@@ -400,6 +405,29 @@ impl eframe::App for KhmSettingsWindow {
} }
impl KhmSettingsWindow { impl KhmSettingsWindow {
fn add_log_entry(&mut self, message: String) {
let now = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap();
let secs = now.as_secs();
let millis = now.subsec_millis();
// Format as HH:MM:SS.mmm
let hours = (secs / 3600) % 24;
let minutes = (secs / 60) % 60;
let seconds = secs % 60;
let timestamp = format!("{:02}:{:02}:{:02}.{:03}", hours, minutes, seconds, millis);
let log_entry = format!("{} {}", timestamp, message);
self.operation_log.push(log_entry);
// Keep only last 20 entries to prevent memory growth
if self.operation_log.len() > 20 {
self.operation_log.remove(0);
}
}
fn render_connection_tab(&mut self, ui: &mut egui::Ui, ctx: &egui::Context) { fn render_connection_tab(&mut self, ui: &mut egui::Ui, ctx: &egui::Context) {
let available_height = ui.available_height(); let available_height = ui.available_height();
let button_area_height = 120.0; // Reserve space for buttons and status let button_area_height = 120.0; // Reserve space for buttons and status
@@ -533,27 +561,15 @@ impl KhmSettingsWindow {
ui.add_space(10.0); ui.add_space(10.0);
// Advanced settings (collapsible) // Configuration file location
ui.collapsing("🔧 Settings Info", |ui| { ui.group(|ui| {
ui.indent("advanced", |ui| { ui.set_min_width(ui.available_width());
ui.label("Configuration details:"); ui.horizontal(|ui| {
ui.add_space(5.0); ui.label("🗁 Config file:");
let config_path = get_config_path();
ui.horizontal(|ui| {
ui.label("Config file:");
let config_path = get_config_path();
ui.label(egui::RichText::new(config_path.display().to_string())
.font(egui::FontId::monospace(12.0))
.color(egui::Color32::LIGHT_GRAY));
});
ui.add_space(8.0);
ui.label("Current configuration:");
ui.add_sized( ui.add_sized(
[ui.available_width(), 120.0], [ui.available_width(), 20.0],
egui::TextEdit::multiline(&mut self.config_content.clone()) egui::TextEdit::singleline(&mut config_path.display().to_string())
.font(egui::FontId::monospace(11.0))
.interactive(false) .interactive(false)
); );
}); });
@@ -567,37 +583,20 @@ impl KhmSettingsWindow {
[ui.available_width(), button_area_height].into(), [ui.available_width(), button_area_height].into(),
egui::Layout::bottom_up(egui::Align::Min), egui::Layout::bottom_up(egui::Align::Min),
|ui| { |ui| {
// Status information block // Operation log area
ui.group(|ui| { ui.group(|ui| {
ui.set_min_width(ui.available_width()); ui.set_min_width(ui.available_width());
ui.vertical(|ui| { ui.vertical(|ui| {
// Show sync status ui.label(egui::RichText::new("📄 Operation Log").size(14.0).strong());
match &self.sync_status { ui.add_space(5.0);
SyncStatus::Success { keys_count } => {
ui.label(egui::RichText::new(format!("✅ Last sync successful: {} keys", keys_count))
.color(egui::Color32::GREEN));
}
SyncStatus::Error(err) => {
ui.label(egui::RichText::new(format!("❌ Sync failed: {}", err))
.color(egui::Color32::RED));
}
SyncStatus::Unknown => {}
}
// Show connection status let log_text = self.operation_log.join("\n");
if !self.is_testing_connection { ui.add_sized(
match &self.connection_status { [ui.available_width(), 60.0],
ConnectionStatus::Connected { keys_count, flow } => { egui::TextEdit::multiline(&mut log_text.clone())
ui.label(egui::RichText::new(format!("✅ Connected to '{}': {} keys available", flow, keys_count)) .font(egui::FontId::monospace(10.0))
.color(egui::Color32::LIGHT_GREEN)); .interactive(false)
} );
ConnectionStatus::Error(err) => {
ui.label(egui::RichText::new(format!("❌ Connection failed: {}", err))
.color(egui::Color32::RED));
}
ConnectionStatus::Unknown => {}
}
}
}); });
}); });
@@ -677,6 +676,7 @@ impl KhmSettingsWindow {
self.is_testing_connection = true; self.is_testing_connection = true;
self.connection_status = ConnectionStatus::Unknown; self.connection_status = ConnectionStatus::Unknown;
self.add_log_entry("🔍 Starting connection test...".to_string());
let (tx, rx) = mpsc::channel(); let (tx, rx) = mpsc::channel();
self.test_result_receiver = Some(rx); self.test_result_receiver = Some(rx);
@@ -704,6 +704,7 @@ impl KhmSettingsWindow {
self.is_syncing = true; self.is_syncing = true;
self.sync_status = SyncStatus::Unknown; self.sync_status = SyncStatus::Unknown;
self.add_log_entry("🔄 Starting manual sync...".to_string());
let (tx, rx) = mpsc::channel(); let (tx, rx) = mpsc::channel();
self.sync_result_receiver = Some(rx); self.sync_result_receiver = Some(rx);
@@ -1439,6 +1440,7 @@ pub fn run_settings_window() {
is_syncing: false, is_syncing: false,
sync_result_receiver: None, sync_result_receiver: None,
sync_status: SyncStatus::Unknown, sync_status: SyncStatus::Unknown,
operation_log: Vec::new(),
}))), }))),
); );
} }