"log"
"os"
"path"
- "time"
+ "strings"
+ "unicode/utf8"
+ "github.com/fsnotify/fsnotify"
"github.com/mattermost/mattermost-server/v6/model"
"go.cypherpunks.ru/recfile"
"go.stargrave.org/mmc"
)
+var Threads = make(map[string]string)
+
+func rememberPost(post map[string][]string) {
+ text := strings.Split(post["Text"][0], "\n")[0]
+ i := 60
+ if len(text) > i {
+ for i > 0 && !utf8.Valid([]byte{text[i]}) {
+ i--
+ }
+ text = text[:i] + "..."
+ }
+ Threads[post["Id"][0]] = text
+}
+
func printPost(m map[string][]string) {
var tag string
if len(m["Event"]) > 0 {
tag += "[DEL] "
}
}
- fmt.Printf("\a%s <%s> %s%s\n", m["Created"][0], m["Sender"][0], tag, m["Text"][0])
+ var re string
+ if len(m["RootId"]) > 0 {
+ thread := Threads[m["RootId"][0]]
+ if thread == "" {
+ thread = m["RootId"][0]
+ }
+ re = " [RE]: " + thread
+ }
+ fmt.Printf(
+ "\a%s <%s> %s%s%s\n",
+ m["Created"][0], m["Sender"][0],
+ tag, m["Text"][0], re,
+ )
tag += "[FILE] "
- for _, fileId := range m["File"] {
- fmt.Printf("\a%s <%s> %s%s\n", m["Created"][0], m["Sender"][0], tag, fileId)
+ for i, fileId := range m["File"] {
+ fmt.Printf("\a%s%s (%s)\n", tag, fileId, m["FileName"][i])
}
}
ms = append(ms, m)
}
unlock()
+ for _, m := range ms {
+ rememberPost(m)
+ }
if len(ms) > *lastNum {
ms = ms[len(ms)-*lastNum:]
}
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 {
}
log.Fatalln(err)
}
+ rememberPost(m)
printPost(m)
}
- size = fi.Size()
unlock()
}
}