bug removed: now works with text editors
parent
99b8ed32e5
commit
9ec2375a4e
|
|
@ -137,9 +137,9 @@ checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
|
|||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.1.11"
|
||||
version = "1.1.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5fb8dd288a69fc53a1996d7ecfbf4a20d59065bff137ce7e56bbd620de191189"
|
||||
checksum = "72db2f7947ecee9b03b510377e8bb9077afa27176fdbff55c51027e976fdcc48"
|
||||
dependencies = [
|
||||
"shlex",
|
||||
]
|
||||
|
|
@ -320,9 +320,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.155"
|
||||
version = "0.2.158"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
|
||||
checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
|
|
@ -531,18 +531,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
|||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.207"
|
||||
version = "1.0.208"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2"
|
||||
checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.207"
|
||||
version = "1.0.208"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e"
|
||||
checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
@ -600,9 +600,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.74"
|
||||
version = "2.0.75"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7"
|
||||
checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
@ -626,9 +626,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
|||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.39.2"
|
||||
version = "1.39.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1"
|
||||
checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"filename": "config-file",
|
||||
"filename": "config-file.json",
|
||||
"src": "/home/vladislav/web/",
|
||||
"triggers": {
|
||||
"onDelete": "stop",
|
||||
|
|
|
|||
43
src/main.rs
43
src/main.rs
|
|
@ -9,6 +9,7 @@ use tokio::join;
|
|||
// use tokio::io::{AsyncRead, AsyncWrite};
|
||||
// fatal errors handler
|
||||
use core::panic;
|
||||
use std::borrow::BorrowMut;
|
||||
// utils
|
||||
use std::fmt::Debug;
|
||||
use std::fs;
|
||||
|
|
@ -16,7 +17,7 @@ use std::path::Path;
|
|||
use std::process::{ Command, Output };
|
||||
use std::sync::Arc;
|
||||
// file change handler
|
||||
use inotify::{ Inotify, WatchMask };
|
||||
use inotify::{ EventMask, Inotify, WatchMask };
|
||||
// logging
|
||||
use std::io::Write;
|
||||
use chrono::Local;
|
||||
|
|
@ -350,8 +351,25 @@ async fn create_watcher(filename: &str, path: &str) -> Result<Inotify, std::io::
|
|||
.watches()
|
||||
.add(
|
||||
&src,
|
||||
WatchMask::MODIFY
|
||||
WatchMask::ALL_EVENTS
|
||||
);
|
||||
// !
|
||||
// // let _ = stream
|
||||
// // .watches()
|
||||
// // .add(
|
||||
// // &src,
|
||||
// // WatchMask::ALL_EVENTS
|
||||
// // );
|
||||
// while let Some(a) = stream.next().await {
|
||||
// // println!("event - {:?}", a);
|
||||
// if a.unwrap().mask == EventMask::MODIFY {
|
||||
// counter+=1;
|
||||
// println!("mod {} - {:?}", counter, stream);
|
||||
// }
|
||||
// }
|
||||
|
||||
// todo!();
|
||||
// !
|
||||
Ok(inotify)
|
||||
}
|
||||
|
||||
|
|
@ -663,11 +681,29 @@ async fn file_handler
|
|||
}
|
||||
} else if is_active(name).await && !is_frozen(name).await{
|
||||
let watchers = watchers.clone();
|
||||
// println!("mutex: {:?}", watchers);
|
||||
let mut buffer = [0; 128];
|
||||
let mut mutex_guard = watchers.lock().await;
|
||||
if let Some(notify) = mutex_guard.get_mut(i) {
|
||||
let events = notify.read_events(&mut buffer);
|
||||
if events.is_ok() {
|
||||
// println!("{:?}", events);
|
||||
if events.is_ok(){
|
||||
let events: Vec<EventMask> = events.unwrap()
|
||||
.into_iter()
|
||||
.map(|mask| {mask.mask})
|
||||
.filter(|mask| {
|
||||
*mask == EventMask::MODIFY || *mask == EventMask::DELETE_SELF
|
||||
})
|
||||
.collect();
|
||||
for event in events {
|
||||
if let EventMask::DELETE_SELF = event {
|
||||
// ! warning (DELETE_SELF event) !
|
||||
// println!("! warning (DELETE_SELF event) !");
|
||||
// * watcher recreation after dealing with file recreation mech in text editors
|
||||
let mutex = notify.borrow_mut();
|
||||
|
||||
*mutex = create_watcher(&file.filename, &file.src).await.unwrap();
|
||||
}
|
||||
match file.triggers.on_change.as_str() {
|
||||
"stop" => {
|
||||
let _ = tx.send(7).await;
|
||||
|
|
@ -686,6 +722,7 @@ async fn file_handler
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
tokio::task::yield_now().await;
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue