Close open files on exit
This commit is contained in:
parent
7a54e5e40f
commit
e8ac6c60f1
|
|
@ -3,6 +3,8 @@
|
|||
windows_subsystem = "windows"
|
||||
)]
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::process::Child;
|
||||
use std::str::FromStr;
|
||||
use std::{path::PathBuf, process::Command};
|
||||
|
||||
|
|
@ -27,6 +29,8 @@ struct LogFile {
|
|||
#[derive(AppState, Serialize, Deserialize)]
|
||||
struct State {
|
||||
log_history: IndexSet<LogFile>,
|
||||
#[serde(skip)]
|
||||
open_files: HashMap<PathBuf, Child>,
|
||||
}
|
||||
|
||||
impl State {
|
||||
|
|
@ -64,7 +68,14 @@ fn update(_app: &mut App, _state: &mut State) {}
|
|||
|
||||
fn event(_app: &mut App, _assets: &mut Assets, state: &mut State, evt: Event) {
|
||||
match evt {
|
||||
Event::Exit => {}
|
||||
Event::Exit => {
|
||||
for (_, mut child) in state.open_files.drain() {
|
||||
if let Ok(Some(_)) = child.try_wait() {
|
||||
continue;
|
||||
}
|
||||
_ = child.kill();
|
||||
}
|
||||
}
|
||||
Event::Drop(file) => {
|
||||
if file.name.ends_with(".log") {
|
||||
state.log_history.shift_insert(
|
||||
|
|
@ -88,6 +99,8 @@ fn draw(app: &mut App, gfx: &mut Graphics, plugins: &mut Plugins, state: &mut St
|
|||
egui::SidePanel::left("side_panel")
|
||||
.exact_width(app.window().width() as f32)
|
||||
.show(ctx, |ui| {
|
||||
ui.heading("Log History");
|
||||
ui.separator();
|
||||
egui::ScrollArea::vertical().show(ui, |ui| {
|
||||
let mut to_swap = None;
|
||||
let mut to_delete = None;
|
||||
|
|
@ -108,7 +121,14 @@ fn draw(app: &mut App, gfx: &mut Graphics, plugins: &mut Plugins, state: &mut St
|
|||
}
|
||||
});
|
||||
if label.clicked() {
|
||||
_ = Command::new("fast_log_viewer.exe").arg(path_text).spawn();
|
||||
if let Some(child) = state.open_files.get_mut(&log.path) {
|
||||
if let Ok(Some(_)) = child.try_wait() {
|
||||
*child = Command::new("fast_log_viewer.exe")
|
||||
.arg(&path_text)
|
||||
.spawn()
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
to_swap = Some(i);
|
||||
}
|
||||
if i < history_len - 1 {
|
||||
|
|
@ -154,5 +174,6 @@ fn init(_gfx: &mut Graphics) -> State {
|
|||
|
||||
state.unwrap_or_else(|| State {
|
||||
log_history: IndexSet::new(),
|
||||
open_files: HashMap::new(),
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue