From 9ec2375a4e14f7260a4c82954271b4d86641ff6b Mon Sep 17 00:00:00 2001 From: prplV Date: Wed, 21 Aug 2024 17:00:04 +0300 Subject: [PATCH] bug removed: now works with text editors --- Cargo.lock | 24 +++++++++--------- settings.json | 2 +- src/main.rs | 69 +++++++++++++++++++++++++++++++++++++++------------ 3 files changed, 66 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c4393ad..6475956 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/settings.json b/settings.json index 094faf2..bcfea1d 100644 --- a/settings.json +++ b/settings.json @@ -16,7 +16,7 @@ } }, { - "filename": "config-file", + "filename": "config-file.json", "src": "/home/vladislav/web/", "triggers": { "onDelete": "stop", diff --git a/src/main.rs b/src/main.rs index 87b4a4f..b347128 100644 --- a/src/main.rs +++ b/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 { - let _ = tx.send(7).await; - }, - "restart" => { - let _ = tx.send(8).await; - }, - "stay" => { - let _ = tx.send(9).await; - }, - _ => { - let _ = tx.send(101).await; - }, + // println!("{:?}", events); + if events.is_ok(){ + let events: Vec = 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; + }, + "restart" => { + let _ = tx.send(8).await; + }, + "stay" => { + let _ = tx.send(9).await; + }, + _ => { + let _ = tx.send(101).await; + }, + } } } }