From fe2bae01c6b14eef0e61cd4a6bd50e814de4bb58 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sat, 14 Jun 2025 00:45:04 +0200 Subject: Move some packages to pkg/ --- pkg/watch/watch.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pkg/watch/watch.go (limited to 'pkg/watch') diff --git a/pkg/watch/watch.go b/pkg/watch/watch.go new file mode 100644 index 0000000..f409dac --- /dev/null +++ b/pkg/watch/watch.go @@ -0,0 +1,41 @@ +package watch + +import ( + "errors" + "io/fs" + "log" + "os" + "time" + + . "git.thomasvoss.com/euro-cash.eu/pkg/try" +) + +func File(path string, f func()) { + impl(path, os.Stat, f) +} + +func FileFS(dir fs.FS, path string, f func()) { + impl(path, func(path string) (os.FileInfo, error) { + return fs.Stat(dir, path) + }, f) +} + +func impl(path string, statfn func(string) (os.FileInfo, error), f func()) { + ostat := Try2(statfn(path)) + + for { + nstat, err := statfn(path) + switch { + case errors.Is(err, os.ErrNotExist): + return + case err != nil: + log.Println(err) + } + + if nstat.ModTime() != ostat.ModTime() { + f() + ostat = nstat + } + time.Sleep(1 * time.Second) + } +} -- cgit v1.2.3