5 NNCP -- Node to Node copy, utilities for store-and-forward data exchange
6 Copyright (C) 2016-2021 Sergey Matveev <stargrave@stargrave.org>
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, version 3 of the License.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
28 "github.com/fsnotify/fsnotify"
31 type DirWatcher struct {
37 func (ctx *Ctx) NewDirWatcher(dir string, d time.Duration) (*DirWatcher, error) {
38 w, err := fsnotify.NewWatcher()
44 if !os.IsNotExist(err) {
48 if err = os.MkdirAll(dir, os.FileMode(0777)); err != nil {
60 C: make(chan struct{}),
61 isDead: make(chan struct{}),
64 ticker := time.NewTicker(d)
69 case err := <-w.Errors:
70 ctx.LogE("dir-watch", LEs{{"Dir", dir}}, err, func(les LEs) string {
71 return "fsnotify error: " + err.Error()
74 ctx.LogD("dir-watch-event", LEs{{"Dir", dir}}, func(les LEs) string {
75 return fmt.Sprintf("fsnotify event: %v", e)
77 if e.Op&(fsnotify.Create|fsnotify.Rename) > 0 {
96 func (dw *DirWatcher) Close() {