]> Sergey Matveev's repositories - mmc.git/blobdiff - cmd/scrollback/main.go
cmd/scrollback -whole
[mmc.git] / cmd / scrollback / main.go
index 638f38b34cecfa40088d076b45b5bc2229011752..ddb29b68f44dc4c559de58d690bbee3dc2a93224 100644 (file)
@@ -27,13 +27,13 @@ import (
        "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,35 +43,51 @@ func main() {
        }
        c := model.NewAPIv4Client("https://" + *entrypoint)
        c.Login(login, password)
-
-       users := make(map[string]*model.User)
-       for pageNum := 0; ; pageNum++ {
-               time.Sleep(mmc.SleepTime)
-               page, _, err := c.GetUsers(pageNum, PerPage, "")
+       me, _, err := c.GetMe("")
+       if err != nil {
+               log.Fatalln(err)
+       }
+       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)
                }
-               for _, u := range page {
-                       users[u.Id] = u
+               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
+                       }
                }
-               if len(page) < PerPage {
-                       break
+       } else {
+               list, _, err := c.GetPostsBefore(chId, postId, *pageNum, mmc.PerPage, "", false)
+               if err != nil {
+                       log.Fatalln(err)
                }
-       }
-
-       list, _, err := c.GetPostsBefore(chId, postId, 0, 200, "", false)
-       if err != nil {
-               log.Fatalln(err)
+               slice = list.ToSlice()
        }
        w := recfile.NewWriter(os.Stdout)
-       for _, post := range list.ToSlice() {
+       for i := len(slice) - 1; i >= 0; i-- {
                if err = mmc.PostToRec(
                        w, users,
-                       mmc.Post{P: post, E: model.WebsocketEventPosted},
+                       mmc.Post{P: slice[i], E: model.WebsocketEventPosted},
                ); err != nil {
                        log.Fatalln(err)
                }
        }
-
        c.Logout()
 }