This commit is contained in:
yusing
2026-02-16 08:59:01 +08:00
parent 15b9635ee1
commit e4e6f6b3e8
242 changed files with 3953 additions and 3502 deletions

View File

@@ -9,8 +9,7 @@ import (
"github.com/fsnotify/fsnotify"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/yusing/godoxy/internal/watcher/events"
gperr "github.com/yusing/goutils/errs"
watcherEvents "github.com/yusing/godoxy/internal/watcher/events"
"github.com/yusing/goutils/task"
)
@@ -24,7 +23,7 @@ type DirWatcher struct {
mu sync.Mutex
eventCh chan Event
errCh chan gperr.Error
errCh chan error
task *task.Task
}
@@ -55,14 +54,17 @@ func NewDirectoryWatcher(parent task.Parent, dirPath string) *DirWatcher {
w: w,
fwMap: make(map[string]*fileWatcher),
eventCh: make(chan Event),
errCh: make(chan gperr.Error),
errCh: make(chan error),
task: parent.Subtask("dir_watcher("+dirPath+")", true),
}
go helper.start()
return helper
}
func (h *DirWatcher) Events(_ context.Context) (<-chan Event, <-chan gperr.Error) {
var _ Watcher = (*DirWatcher)(nil)
// Events implements the Watcher interface.
func (h *DirWatcher) Events(_ context.Context) (<-chan Event, <-chan error) {
return h.eventCh, h.errCh
}
@@ -78,7 +80,7 @@ func (h *DirWatcher) Add(relPath string) Watcher {
s = &fileWatcher{
relPath: relPath,
eventCh: make(chan Event),
errCh: make(chan gperr.Error),
errCh: make(chan error),
}
h.fwMap[relPath] = s
return s
@@ -113,23 +115,23 @@ func (h *DirWatcher) start() {
relPath := strings.TrimPrefix(fsEvent.Name, h.dir)
relPath = strings.TrimPrefix(relPath, "/")
if len(relPath) > 0 && relPath[0] == '.' { // hideden file
if len(relPath) > 0 && relPath[0] == '.' { // hidden file
continue
}
msg := Event{
Type: events.EventTypeFile,
Type: watcherEvents.EventTypeFile,
ActorName: relPath,
}
switch {
case fsEvent.Has(fsnotify.Write):
msg.Action = events.ActionFileWritten
msg.Action = watcherEvents.ActionFileWritten
case fsEvent.Has(fsnotify.Create):
msg.Action = events.ActionFileCreated
msg.Action = watcherEvents.ActionFileCreated
case fsEvent.Has(fsnotify.Remove):
msg.Action = events.ActionFileDeleted
msg.Action = watcherEvents.ActionFileDeleted
case fsEvent.Has(fsnotify.Rename):
msg.Action = events.ActionFileRenamed
msg.Action = watcherEvents.ActionFileRenamed
default: // ignore other events
continue
}
@@ -162,7 +164,7 @@ func (h *DirWatcher) start() {
return
}
select {
case h.errCh <- gperr.Wrap(err):
case h.errCh <- err:
default:
}
}