go func(u *model.User) {
var dc *model.Channel
for {
- time.Sleep(mmc.SleepTime)
fd, err := os.OpenFile(pth, os.O_RDONLY, os.FileMode(0666))
if err != nil {
continue
}
go func(ch *model.Channel) {
for {
- time.Sleep(mmc.SleepTime)
fd, err := os.OpenFile(pth, os.O_RDONLY, os.FileMode(0666))
if err != nil {
continue
"log"
"os"
"path"
- "time"
+ "github.com/fsnotify/fsnotify"
"github.com/mattermost/mattermost-server/v6/model"
"go.cypherpunks.ru/recfile"
"go.stargrave.org/mmc"
for _, m := range ms {
printPost(m)
}
- fi, err := fd.Stat()
+
+ watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatalln(err)
}
- size := fi.Size()
+ if err = watcher.Add(pth); err != nil {
+ log.Fatalln(err)
+ }
for {
- time.Sleep(mmc.SleepTime)
- fi, err = os.Stat(pth)
- if fi.Size() == size {
- continue
+ select {
+ case err = <-watcher.Errors:
+ log.Fatalln(err)
+ case event := <-watcher.Events:
+ if !event.Has(fsnotify.Write) {
+ continue
+ }
}
unlock, err = mmc.Lock(lockPth)
if err != nil {
}
printPost(m)
}
- size = fi.Size()
unlock()
}
}
require (
github.com/davecgh/go-spew v1.1.1
+ github.com/fsnotify/fsnotify v1.6.0
github.com/mattermost/mattermost-server/v6 v6.7.2
go.cypherpunks.ru/recfile v0.5.1
golang.org/x/sys v0.6.0
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
+github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
+github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw=
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
github.com/gabriel-vasile/mimetype v1.3.1/go.mod h1:fA8fi6KUiG7MgQQ+mEWotXoEOvmxRtOJlERCzSmRvr8=
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220403205710-6acee93ad0eb/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
Type: unix.F_WRLCK,
Whence: io.SeekStart,
}
- if err = unix.FcntlFlock(fd.Fd(), unix.F_SETLK, &flock); err != nil {
+ if err = unix.FcntlFlock(fd.Fd(), unix.F_SETLKW, &flock); err != nil {
fd.Close()
return dummy, err
}