-// mmc -- Mattermost client
-// Copyright (C) 2023 Sergey Matveev <stargrave@stargrave.org>
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as
-// published by the Free Software Foundation, either version 3 of the
-// License.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-package mmc
-
-import (
- "os"
- "strings"
- "time"
-
- "github.com/davecgh/go-spew/spew"
- "github.com/mattermost/mattermost-server/v6/model"
- "go.cypherpunks.ru/recfile"
-)
-
-const (
- PerPage = 100
- OutRec = "out.rec"
- OutRecLock = "out.rec.lock"
- Last = "last"
-)
-
-var SleepTime = 250 * time.Millisecond
-
-type Post struct {
- P *model.Post
- E string
-}
-
-func PostToRec(w *recfile.Writer, users map[string]*model.User, post Post) error {
- _, err := w.RecordStart()
- if err != nil {
- return err
- }
- created := time.Unix(post.P.CreateAt/1000, 0)
- user := users[post.P.UserId]
- sender := "unknown"
- if user != nil {
- sender = user.Username
- }
- fields := []recfile.Field{
- {Name: "Id", Value: post.P.Id},
- {Name: "Created", Value: created.Format("2006-01-02 15:04:05")},
- {Name: "Sender", Value: sender},
- }
- if post.E != model.WebsocketEventPosted {
- fields = append(fields, recfile.Field{Name: "Event", Value: post.E})
- }
- if post.P.RootId != "" {
- fields = append(fields, recfile.Field{Name: "RootId", Value: post.P.RootId})
- }
- if post.P.Metadata != nil {
- for _, fi := range post.P.Metadata.Files {
- fields = append(
- fields,
- recfile.Field{Name: "File", Value: fi.Id},
- recfile.Field{Name: "FileName", Value: fi.Name},
- )
- }
- }
- if _, err = w.WriteFields(fields...); err != nil {
- return err
- }
- _, err = w.WriteFieldMultiline("Text", strings.Split(post.P.Message, "\n"))
- return err
-}
-
-func GetUsers(c *model.Client4, debugFd *os.File) (map[string]*model.User, error) {
- users := make(map[string]*model.User)
- for n := 0; ; n++ {
- time.Sleep(SleepTime)
- page, resp, err := c.GetUsers(n, PerPage, "")
- if err != nil {
- if debugFd != nil {
- spew.Fdump(debugFd, resp)
- }
- return nil, err
- }
- if debugFd != nil {
- spew.Fdump(debugFd, page)
- }
- for _, u := range page {
- users[u.Id] = u
- }
- if len(page) < PerPage {
- break
- }
- }
- return users, nil
-}
-
-func GetEntrypoint() string {
- s := os.Getenv("MMC_ENTRYPOINT")
- if s == "" {
- return "mm.invalid"
- }
- return s
-}