init: pristine aerc 0.20.0 source
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
//go:build !darwin
|
||||
// +build !darwin
|
||||
|
||||
package watchers
|
||||
|
||||
import (
|
||||
"git.sr.ht/~rjarry/aerc/lib/log"
|
||||
"github.com/fsnotify/fsnotify"
|
||||
)
|
||||
|
||||
func init() {
|
||||
RegisterWatcherFactory(newInotifyWatcher)
|
||||
}
|
||||
|
||||
type inotifyWatcher struct {
|
||||
w *fsnotify.Watcher
|
||||
ch chan *FSEvent
|
||||
}
|
||||
|
||||
func newInotifyWatcher() (FSWatcher, error) {
|
||||
watcher := &inotifyWatcher{
|
||||
ch: make(chan *FSEvent),
|
||||
}
|
||||
w, err := fsnotify.NewWatcher()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
watcher.w = w
|
||||
|
||||
go watcher.watch()
|
||||
return watcher, nil
|
||||
}
|
||||
|
||||
func (w *inotifyWatcher) watch() {
|
||||
defer log.PanicHandler()
|
||||
for ev := range w.w.Events {
|
||||
// we only care about files being created, removed or renamed
|
||||
switch ev.Op {
|
||||
case fsnotify.Create:
|
||||
w.ch <- &FSEvent{
|
||||
Operation: FSCreate,
|
||||
Path: ev.Name,
|
||||
}
|
||||
case fsnotify.Remove:
|
||||
w.ch <- &FSEvent{
|
||||
Operation: FSRemove,
|
||||
Path: ev.Name,
|
||||
}
|
||||
case fsnotify.Rename:
|
||||
w.ch <- &FSEvent{
|
||||
Operation: FSRename,
|
||||
Path: ev.Name,
|
||||
}
|
||||
default:
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (w *inotifyWatcher) Configure(root string) error {
|
||||
return w.w.Add(root)
|
||||
}
|
||||
|
||||
func (w *inotifyWatcher) Events() chan *FSEvent {
|
||||
return w.ch
|
||||
}
|
||||
|
||||
func (w *inotifyWatcher) Add(p string) error {
|
||||
return w.w.Add(p)
|
||||
}
|
||||
|
||||
func (w *inotifyWatcher) Remove(p string) error {
|
||||
return w.w.Remove(p)
|
||||
}
|
||||
Reference in New Issue
Block a user