]> Sergey Matveev's repositories - mmc.git/blobdiff - cmd/rd/main.go
fsnotify optimisation
[mmc.git] / cmd / rd / main.go
index 4bb8b2439cefcdccbeafdc6c69f7d3d733fa5b5b..0d7e70b65e9280fef79d140c3ff71deb134e62fe 100644 (file)
@@ -23,8 +23,8 @@ import (
        "log"
        "os"
        "path"
-       "time"
 
+       "github.com/fsnotify/fsnotify"
        "github.com/mattermost/mattermost-server/v6/model"
        "go.cypherpunks.ru/recfile"
        "go.stargrave.org/mmc"
@@ -84,16 +84,22 @@ func main() {
        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 {
@@ -110,7 +116,6 @@ func main() {
                        }
                        printPost(m)
                }
-               size = fi.Size()
                unlock()
        }
 }