add simple reload
This commit is contained in:
parent
c69798ffd6
commit
133c0fa31b
@ -6,5 +6,5 @@ delay = 2
|
|||||||
start = "11:50"
|
start = "11:50"
|
||||||
#end = { hour = 12, minute = 55 }
|
#end = { hour = 12, minute = 55 }
|
||||||
end = "12:55"
|
end = "12:55"
|
||||||
|
#exit_now = true
|
||||||
|
|
||||||
|
45
src/main.rs
45
src/main.rs
@ -6,6 +6,7 @@ use itertools::Itertools;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
use std::time::SystemTime;
|
||||||
use std::{thread, time::Duration};
|
use std::{thread, time::Duration};
|
||||||
use sysinfo::{System, SystemExt};
|
use sysinfo::{System, SystemExt};
|
||||||
|
|
||||||
@ -70,6 +71,9 @@ impl TryFrom<String> for TimeHM {
|
|||||||
/// Application config
|
/// Application config
|
||||||
#[derive(Deserialize, Default, Debug)]
|
#[derive(Deserialize, Default, Debug)]
|
||||||
struct Config {
|
struct Config {
|
||||||
|
/// modification time
|
||||||
|
#[serde(skip)]
|
||||||
|
modified: Option<SystemTime>,
|
||||||
/// is application active
|
/// is application active
|
||||||
#[serde(default = "default_true")]
|
#[serde(default = "default_true")]
|
||||||
active: bool,
|
active: bool,
|
||||||
@ -118,15 +122,49 @@ impl Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let path = path.unwrap();
|
let path = path.unwrap();
|
||||||
let cfg = Config::read(path);
|
let cfg = Config::read(&path);
|
||||||
match cfg {
|
match cfg {
|
||||||
Err(_e) => {
|
Err(_e) => {
|
||||||
//println!("{}", _e);
|
//println!("{}", _e);
|
||||||
Config::default()
|
Config::default()
|
||||||
}
|
}
|
||||||
Ok(cfg) => cfg,
|
Ok(mut cfg) => {
|
||||||
|
let metadata = fs::metadata(&path);
|
||||||
|
if let Ok(meta) = metadata {
|
||||||
|
if let Ok(time) = meta.modified() {
|
||||||
|
cfg.modified = Some(time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cfg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn is_file_modified(&self) -> bool {
|
||||||
|
if self.modified.is_none() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
let path = Config::file_location();
|
||||||
|
if let Err(_e) = path {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let path = path.unwrap();
|
||||||
|
let metadata = fs::metadata(path);
|
||||||
|
let mut result = false;
|
||||||
|
if let Ok(meta) = metadata {
|
||||||
|
if let Ok(time) = meta.modified() {
|
||||||
|
result = self.modified.unwrap() < time
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result
|
||||||
|
}
|
||||||
|
fn reload(&mut self) {
|
||||||
|
if !self.is_file_modified() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let new_cfg = Self::get();
|
||||||
|
*self = new_cfg;
|
||||||
|
}
|
||||||
fn target_name(&self) -> String {
|
fn target_name(&self) -> String {
|
||||||
if !self.target.is_empty() {
|
if !self.target.is_empty() {
|
||||||
self.target.clone()
|
self.target.clone()
|
||||||
@ -183,11 +221,12 @@ impl Laika {
|
|||||||
let _res = cmd.spawn();
|
let _res = cmd.spawn();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main_loop(self) {
|
fn main_loop(mut self) {
|
||||||
if !self.config.is_valid() {
|
if !self.config.is_valid() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
loop {
|
loop {
|
||||||
|
self.config.reload();
|
||||||
if self.config.exit_now {
|
if self.config.exit_now {
|
||||||
return;
|
return;
|
||||||
} else if self.is_active() && !self.is_target_alive() {
|
} else if self.is_active() && !self.is_target_alive() {
|
||||||
|
Loading…
Reference in New Issue
Block a user