diff options
author | Alan Pearce | 2025-01-30 22:16:09 +0100 |
---|---|---|
committer | Alan Pearce | 2025-01-30 22:16:09 +0100 |
commit | 99f8047ef20a64f948ac2b703c81eb49bed091c0 (patch) | |
tree | a0365a7b2e477467a91bef247db09624028e1807 /internal/server/dev.go | |
parent | 4566db657dab6af43f8fce814cd0e42cbcc788bf (diff) | |
download | website-99f8047ef20a64f948ac2b703c81eb49bed091c0.tar.lz website-99f8047ef20a64f948ac2b703c81eb49bed091c0.tar.zst website-99f8047ef20a64f948ac2b703c81eb49bed091c0.zip |
re-organise everything sqlite
Diffstat (limited to 'internal/server/dev.go')
-rw-r--r-- | internal/server/dev.go | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/internal/server/dev.go b/internal/server/dev.go deleted file mode 100644 index 6fcc93e..0000000 --- a/internal/server/dev.go +++ /dev/null @@ -1,109 +0,0 @@ -package server - -import ( - "fmt" - "io/fs" - "os" - "path" - "path/filepath" - "slices" - "time" - - "go.alanpearce.eu/x/log" - - "github.com/fsnotify/fsnotify" - "gitlab.com/tozd/go/errors" -) - -type FileWatcher struct { - *fsnotify.Watcher -} - -var ( - l *log.Logger - ignores = []string{ - "*.templ", - "*.go", - } - checkSettleInterval = 200 * time.Millisecond -) - -func matches(name string) func(string) bool { - return func(pattern string) bool { - matched, err := path.Match(pattern, name) - if err != nil { - l.Warn("error checking watcher ignores", "error", err) - } - - return matched - } -} - -func ignored(pathname string) bool { - return slices.ContainsFunc(ignores, matches(path.Base(pathname))) -} - -func NewFileWatcher(log *log.Logger) (*FileWatcher, error) { - watcher, err := fsnotify.NewWatcher() - if err != nil { - return nil, errors.WithMessage(err, "could not create watcher") - } - l = log - - return &FileWatcher{watcher}, nil -} - -func (watcher FileWatcher) AddRecursive(from string) error { - l.Debug("walking directory tree", "root", from) - err := filepath.WalkDir(from, func(path string, entry fs.DirEntry, err error) error { - if err != nil { - return errors.WithMessagef(err, "could not walk directory %s", path) - } - if entry.IsDir() { - l.Debug("adding directory to watcher", "path", path) - if err = watcher.Add(path); err != nil { - return errors.WithMessagef(err, "could not add directory %s to watcher", path) - } - } - - return nil - }) - - return errors.WithMessage(err, "error walking directory tree") -} - -func (watcher FileWatcher) Start(callback func(string)) { - var timer *time.Timer - for { - select { - case event := <-watcher.Events: - if !ignored(event.Name) { - l.Debug("watcher event", "name", event.Name, "op", event.Op.String()) - if event.Has(fsnotify.Create) || event.Has(fsnotify.Rename) { - f, err := os.Stat(event.Name) - if err != nil { - l.Error( - fmt.Sprintf("error handling %s event: %v", event.Op.String(), err), - ) - } else if f.IsDir() { - err = watcher.Add(event.Name) - if err != nil { - l.Error(fmt.Sprintf("error adding new folder to watcher: %v", err)) - } - } - } - if event.Has(fsnotify.Rename) || event.Has(fsnotify.Write) || - event.Has(fsnotify.Create) || event.Has(fsnotify.Chmod) { - if timer == nil { - timer = time.AfterFunc(checkSettleInterval, func() { - callback(event.Name) - }) - } - timer.Reset(checkSettleInterval) - } - } - case err := <-watcher.Errors: - l.Error("error in watcher", "error", err) - } - } -} |