]> Sergey Matveev's repositories - mmc.git/commitdiff
Deal with channels first
authorSergey Matveev <stargrave@stargrave.org>
Mon, 13 Mar 2023 10:48:11 +0000 (13:48 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 13 Mar 2023 10:48:12 +0000 (13:48 +0300)
Because dealing with users opens direct channels first.

cmd/mmc/main.go

index f3faa860dcd223a08dde9535eba9885da22cb6a9..c383cff2c1c92f0ea645440989a8bb8b850316f6 100644 (file)
@@ -114,6 +114,105 @@ func main() {
        var updateQueue []string
        LastSent := time.Now()
 
+       Chans := make(map[string]*model.Channel)
+       time.Sleep(mmc.SleepTime)
+       page, resp, err := c.GetChannelsForTeamForUser(Team.Id, me.Id, false, "")
+       if err != nil {
+               if DebugFd != nil {
+                       spew.Fdump(DebugFd, resp)
+               }
+               log.Fatalln(err)
+       }
+       if DebugFd != nil {
+               spew.Fdump(DebugFd, page)
+       }
+       for _, ch := range page {
+               if ch.Type == "D" {
+                       continue
+               }
+               Chans[ch.Name] = ch
+               pth := path.Join("chans", strings.ReplaceAll(ch.Name, ".", "_"))
+               updateQueue = append(updateQueue, pth, ch.Id)
+               os.MkdirAll(pth, 0777)
+               rewriteIfChanged(path.Join(pth, "id"), ch.Id+"\n")
+               rewriteIfChanged(path.Join(pth, "info"), fmt.Sprintf(
+                       "%s\n%s\n%s\n",
+                       ch.DisplayName,
+                       ch.Header,
+                       ch.Purpose,
+               ))
+               if _, err := os.Stat(path.Join(pth, mmc.OutRec)); err != nil &&
+                       errors.Is(err, fs.ErrNotExist) {
+                       if _, err = os.OpenFile(
+                               path.Join(pth, mmc.OutRec), os.O_WRONLY|os.O_CREATE, 0o666,
+                       ); err != nil {
+                               log.Fatalln(err)
+                       }
+               }
+
+               usersPth := path.Join(pth, "users")
+               os.Remove(usersPth)
+               if err := syscall.Mkfifo(usersPth, 0666); err != nil {
+                       log.Fatalln(err)
+               }
+               go func(ch *model.Channel) {
+                       for {
+                               time.Sleep(mmc.SleepTime)
+                               fd, err := os.OpenFile(
+                                       usersPth, os.O_WRONLY|os.O_APPEND, os.FileMode(0666),
+                               )
+                               if err != nil {
+                                       log.Println("OpenFile:", usersPth, err)
+                                       continue
+                               }
+                               for n := 0; ; n++ {
+                                       users, resp, err := c.GetUsersInChannel(ch.Id, n, mmc.PerPage, "")
+                                       if err != nil {
+                                               if DebugFd != nil {
+                                                       spew.Fdump(DebugFd, resp)
+                                               }
+                                               log.Println("GetUsersInChannel:", err)
+                                               fd.Close()
+                                               continue
+                                       }
+                                       if DebugFd != nil {
+                                               spew.Fdump(DebugFd, users)
+                                       }
+                                       for _, u := range users {
+                                               fmt.Fprintf(fd, "%s\n", u.Username)
+                                       }
+                                       if len(users) < mmc.PerPage {
+                                               break
+                                       }
+                               }
+                               fd.Close()
+                       }
+               }(ch)
+
+               pth = path.Join(pth, "in")
+               os.Remove(pth)
+               if err := syscall.Mkfifo(pth, 0666); err != nil {
+                       log.Fatalln(err)
+               }
+               go func(ch *model.Channel) {
+                       for {
+                               fd, err := os.OpenFile(pth, os.O_RDONLY, os.FileMode(0666))
+                               if err != nil {
+                                       continue
+                               }
+                               data, err := io.ReadAll(fd)
+                               fd.Close()
+                               if err != nil {
+                                       continue
+                               }
+                               if _, err = makePost(c, ch.Id, string(data)); err != nil {
+                                       log.Println("makePost:", err)
+                               }
+                               LastSent = time.Now()
+                       }
+               }(ch)
+       }
+
        Users, err := mmc.GetUsers(c, DebugFd)
        if err != nil {
                log.Fatalln(err)
@@ -273,105 +372,6 @@ func main() {
                }()
        }
 
-       Chans := make(map[string]*model.Channel)
-       time.Sleep(mmc.SleepTime)
-       page, resp, err := c.GetChannelsForTeamForUser(Team.Id, me.Id, false, "")
-       if err != nil {
-               if DebugFd != nil {
-                       spew.Fdump(DebugFd, resp)
-               }
-               log.Fatalln(err)
-       }
-       if DebugFd != nil {
-               spew.Fdump(DebugFd, page)
-       }
-       for _, ch := range page {
-               if ch.Type == "D" {
-                       continue
-               }
-               Chans[ch.Name] = ch
-               pth := path.Join("chans", strings.ReplaceAll(ch.Name, ".", "_"))
-               updateQueue = append(updateQueue, pth, ch.Id)
-               os.MkdirAll(pth, 0777)
-               rewriteIfChanged(path.Join(pth, "id"), ch.Id+"\n")
-               rewriteIfChanged(path.Join(pth, "info"), fmt.Sprintf(
-                       "%s\n%s\n%s\n",
-                       ch.DisplayName,
-                       ch.Header,
-                       ch.Purpose,
-               ))
-               if _, err := os.Stat(path.Join(pth, mmc.OutRec)); err != nil &&
-                       errors.Is(err, fs.ErrNotExist) {
-                       if _, err = os.OpenFile(
-                               path.Join(pth, mmc.OutRec), os.O_WRONLY|os.O_CREATE, 0o666,
-                       ); err != nil {
-                               log.Fatalln(err)
-                       }
-               }
-
-               usersPth := path.Join(pth, "users")
-               os.Remove(usersPth)
-               if err := syscall.Mkfifo(usersPth, 0666); err != nil {
-                       log.Fatalln(err)
-               }
-               go func(ch *model.Channel) {
-                       for {
-                               time.Sleep(mmc.SleepTime)
-                               fd, err := os.OpenFile(
-                                       usersPth, os.O_WRONLY|os.O_APPEND, os.FileMode(0666),
-                               )
-                               if err != nil {
-                                       log.Println("OpenFile:", usersPth, err)
-                                       continue
-                               }
-                               for n := 0; ; n++ {
-                                       users, resp, err := c.GetUsersInChannel(ch.Id, n, mmc.PerPage, "")
-                                       if err != nil {
-                                               if DebugFd != nil {
-                                                       spew.Fdump(DebugFd, resp)
-                                               }
-                                               log.Println("GetUsersInChannel:", err)
-                                               fd.Close()
-                                               continue
-                                       }
-                                       if DebugFd != nil {
-                                               spew.Fdump(DebugFd, users)
-                                       }
-                                       for _, u := range users {
-                                               fmt.Fprintf(fd, "%s\n", u.Username)
-                                       }
-                                       if len(users) < mmc.PerPage {
-                                               break
-                                       }
-                               }
-                               fd.Close()
-                       }
-               }(ch)
-
-               pth = path.Join(pth, "in")
-               os.Remove(pth)
-               if err := syscall.Mkfifo(pth, 0666); err != nil {
-                       log.Fatalln(err)
-               }
-               go func(ch *model.Channel) {
-                       for {
-                               fd, err := os.OpenFile(pth, os.O_RDONLY, os.FileMode(0666))
-                               if err != nil {
-                                       continue
-                               }
-                               data, err := io.ReadAll(fd)
-                               fd.Close()
-                               if err != nil {
-                                       continue
-                               }
-                               if _, err = makePost(c, ch.Id, string(data)); err != nil {
-                                       log.Println("makePost:", err)
-                               }
-                               LastSent = time.Now()
-                       }
-               }(ch)
-       }
-
        log.Println("syncing", len(updateQueue)/2, "rooms")
        for len(updateQueue) > 0 {
                err := updatePosts(c, Users, updateQueue[0], updateQueue[1])