]> Sergey Matveev's repositories - mmc.git/blobdiff - cmd/scrollback/main.go
cmd/scrollback -whole
[mmc.git] / cmd / scrollback / main.go
index 2f48d109cda30459928b93e32c11992fd76e660f..ddb29b68f44dc4c559de58d690bbee3dc2a93224 100644 (file)
@@ -20,20 +20,20 @@ import (
        "flag"
        "log"
        "os"
+       "time"
 
        "github.com/mattermost/mattermost-server/v6/model"
        "go.cypherpunks.ru/recfile"
        "go.stargrave.org/mmc"
 )
 
-const PerPage = 100
-
 func main() {
-       entrypoint := flag.String("entrypoint", "mm.rnd.stcnet.ru", "Entrypoint")
+       entrypoint := flag.String("entrypoint", mmc.GetEntrypoint(), "Entrypoint")
        pageNum := flag.Int("page", 0, "Page number")
+       whole := flag.Bool("whole", false, "Whole history")
+       direct := flag.Bool("direct", false, "Direct channel")
        flag.Parse()
        log.SetFlags(log.Lshortfile)
-       log.SetOutput(os.Stdout)
 
        chId := flag.Arg(0)
        postId := flag.Arg(1)
@@ -43,16 +43,44 @@ func main() {
        }
        c := model.NewAPIv4Client("https://" + *entrypoint)
        c.Login(login, password)
-       users, err := mmc.GetUsers(c, nil)
+       me, _, err := c.GetMe("")
        if err != nil {
                log.Fatalln(err)
        }
-       list, _, err := c.GetPostsBefore(chId, postId, *pageNum, PerPage, "", false)
+       users, err := mmc.GetUsers(c, nil)
        if err != nil {
                log.Fatalln(err)
        }
+       if *direct {
+               dc, _, err := c.CreateDirectChannel(me.Id, chId)
+               if err != nil {
+                       log.Fatalln(err)
+               }
+               chId = dc.Id
+       }
+       var slice []*model.Post
+       if *whole {
+               for n := 0; ; n++ {
+                       log.Println("page:", n)
+                       time.Sleep(mmc.SleepTime)
+                       list, _, err := c.GetPostsBefore(chId, postId, n, mmc.PerPage, "", false)
+                       if err != nil {
+                               log.Fatalln(err)
+                       }
+                       s := list.ToSlice()
+                       slice = append(slice, s...)
+                       if len(s) < mmc.PerPage {
+                               break
+                       }
+               }
+       } else {
+               list, _, err := c.GetPostsBefore(chId, postId, *pageNum, mmc.PerPage, "", false)
+               if err != nil {
+                       log.Fatalln(err)
+               }
+               slice = list.ToSlice()
+       }
        w := recfile.NewWriter(os.Stdout)
-       slice := list.ToSlice()
        for i := len(slice) - 1; i >= 0; i-- {
                if err = mmc.PostToRec(
                        w, users,