From 0e3bf6a085163b242ace05daa432737d746fbb67 Mon Sep 17 00:00:00 2001 From: Mark Date: Fri, 25 Sep 2020 17:54:34 +0100 Subject: [PATCH] Fix logfile not updated (after initial logfile load) --- src/bin/logtail-crossterm.rs | 9 ++++----- src/bin/logtail-termion.rs | 8 +++----- src/custom/app.rs | 22 ++++++++++++++++++++++ 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/bin/logtail-crossterm.rs b/src/bin/logtail-crossterm.rs index aee946d..0d4822d 100644 --- a/src/bin/logtail-crossterm.rs +++ b/src/bin/logtail-crossterm.rs @@ -123,11 +123,10 @@ pub async fn main() -> Result<(), Box> { Some(Ok(line)) => { let source_str = line.source().to_str().unwrap(); let source = String::from(source_str); - - match app.monitors.get_mut(&source) { - None => (), - Some(monitor) => monitor.append_to_content(line.line()) - } + match app.get_monitor_for_file_path(&source) { + Some(monitor) => monitor.append_to_content(line.line()), + None => panic!("No monitor for file: {}",&source), + } }, Some(Err(e)) => panic!("{}", e), None => (), diff --git a/src/bin/logtail-termion.rs b/src/bin/logtail-termion.rs index e197f94..b787d70 100644 --- a/src/bin/logtail-termion.rs +++ b/src/bin/logtail-termion.rs @@ -134,11 +134,9 @@ async fn terminal_main() -> std::io::Result<()> { let source_str = line.source().to_str().unwrap(); let source = String::from(source_str); - match app.monitors.get_mut(&source) { - Some(monitor) => { - monitor.append_to_content(line.line()) - }, - None => (), + match app.get_monitor_for_file_path(&source) { + Some(monitor) => monitor.append_to_content(line.line()), + None => panic!("No monitor for file: {}",&source), } }, Some(Err(e)) => { diff --git a/src/custom/app.rs b/src/custom/app.rs index 00ebf02..c11e96a 100644 --- a/src/custom/app.rs +++ b/src/custom/app.rs @@ -89,6 +89,28 @@ impl App { Ok(app) } + pub fn get_monitor_for_file_path(&mut self, logfile: &String) -> Option<(&mut LogMonitor)> { + let mut index = 0; + let mut monitor_for_path = None; + for (monitor_file, mut monitor) in self.monitors.iter_mut() { + if monitor_file.eq(logfile) { + monitor_for_path = Some(monitor); + break; + } + use std::env::current_dir; + use std::path::Path; + if let Ok(current_dir) = current_dir() { + let logfile_path = Path::new(logfile.as_str()); + if current_dir.join(monitor_file).eq(&logfile_path) { + monitor_for_path = Some(monitor); + break; + } + } + index += 1; + } + return monitor_for_path; + } + pub fn get_monitor_with_focus(&mut self) -> Option<(&mut LogMonitor)> { match (&mut self.monitors).get_mut(&self.logfile_with_focus) { Some(mut monitor) => Some(monitor),