]> Sergey Matveev's repositories - mmc.git/blob - common.go
Bugfixed recfile library
[mmc.git] / common.go
1 // mmc -- Mattermost client
2 // Copyright (C) 2023 Sergey Matveev <stargrave@stargrave.org>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU Affero General Public License as
6 // published by the Free Software Foundation, either version 3 of the
7 // License.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU Affero General Public License for more details.
13 //
14 // You should have received a copy of the GNU Affero General Public License
15 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 package mmc
18
19 import (
20         "strings"
21         "time"
22
23         "github.com/mattermost/mattermost-server/v6/model"
24         "go.cypherpunks.ru/recfile"
25 )
26
27 const (
28         OutRec     = "out.rec"
29         OutRecLock = "out.rec.lock"
30         Last       = "last"
31 )
32
33 var SleepTime = 250 * time.Millisecond
34
35 type Post struct {
36         P *model.Post
37         E string
38 }
39
40 func PostToRec(w *recfile.Writer, users map[string]*model.User, post Post) error {
41         _, err := w.RecordStart()
42         if err != nil {
43                 return err
44         }
45         created := time.Unix(post.P.CreateAt/1000, 0)
46         user := users[post.P.UserId]
47         sender := "unknown"
48         if user != nil {
49                 sender = user.Username
50         }
51         fields := []recfile.Field{
52                 {Name: "Id", Value: post.P.Id},
53                 {Name: "Created", Value: created.Format("2006-01-02 15:04:05")},
54                 {Name: "Sender", Value: sender},
55         }
56         if post.E != model.WebsocketEventPosted {
57                 fields = append(fields, recfile.Field{Name: "Event", Value: post.E})
58         }
59         if post.P.RootId != "" {
60                 fields = append(fields, recfile.Field{Name: "RootId", Value: post.P.RootId})
61         }
62         if post.P.Metadata != nil {
63                 for _, fi := range post.P.Metadata.Files {
64                         fields = append(
65                                 fields,
66                                 recfile.Field{Name: "File", Value: fi.Id},
67                                 recfile.Field{Name: "FileName", Value: fi.Name},
68                         )
69                 }
70         }
71         if _, err = w.WriteFields(fields...); err != nil {
72                 return err
73         }
74         _, err = w.WriteFieldMultiline("Text", strings.Split(post.P.Message, "\n"))
75         return err
76 }