From eca8e37e7aeae88525230804a711659f6c0b5dc4 Mon Sep 17 00:00:00 2001 From: Daniel Barlow Date: Fri, 26 Jul 2024 23:40:40 +0100 Subject: [PATCH] anoia.svc use timeout for inotify in case we miss a message, check the directory every 5s anyway --- pkgs/anoia/svc.fnl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pkgs/anoia/svc.fnl b/pkgs/anoia/svc.fnl index c473dc7..4978ecd 100644 --- a/pkgs/anoia/svc.fnl +++ b/pkgs/anoia/svc.fnl @@ -1,13 +1,14 @@ (local inotify (require :inotify)) (local { : file-exists? } (require :anoia)) (local { : file-type : dir &as fs } (require :anoia.fs)) +(local ll (require :lualinux)) (fn read-line [name] (with-open [f (assert (io.open name :r) (.. "can't open file " name))] (f:read "*l"))) (fn watch-fsevents [directory-name] - (let [handle (inotify.init)] + (let [handle (inotify.init { :blocking false})] (handle:addwatch directory-name inotify.IN_CREATE inotify.IN_MOVE @@ -39,11 +40,16 @@ (coroutine.yield self) (self:wait)))) +(fn read-with-timeout [watcher] + (let [fd (watcher:fileno)] + (ll.pollin fd 5000) + (watcher:read))) + (fn open [directory] (let [watcher (watch-fsevents directory) has-file? (fn [filename] (file-exists? (.. directory "/" filename)))] { - :wait #(watcher:read) + :wait #(read-with-timeout watcher) :ready? (fn [self] (and (has-file? "state") (not (has-file? ".lock")))) :output (fn [_ filename]