This repository has been archived by the owner on Jul 7, 2020. It is now read-only.
forked from keybase/client
/
utils.go
65 lines (59 loc) · 1.58 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package attachments
import (
"errors"
"github.com/keybase/client/go/chat/globals"
"github.com/keybase/client/go/libkb"
"github.com/keybase/client/go/protocol/chat1"
"github.com/keybase/client/go/protocol/gregor1"
"golang.org/x/net/context"
)
func AssetFromMessage(ctx context.Context, g *globals.Context, uid gregor1.UID, convID chat1.ConversationID,
msgID chat1.MessageID, preview bool) (res chat1.Asset, err error) {
msgs, err := g.ChatHelper.GetMessages(ctx, uid, convID, []chat1.MessageID{msgID}, true)
if err != nil {
return res, err
}
if len(msgs) == 0 {
return res, libkb.NotFoundError{}
}
first := msgs[0]
st, err := first.State()
if err != nil {
return res, err
}
if st == chat1.MessageUnboxedState_ERROR {
em := first.Error().ErrMsg
return res, errors.New(em)
}
msg := first.Valid()
body := msg.MessageBody
t, err := body.MessageType()
if err != nil {
return res, err
}
var attachment chat1.MessageAttachment
switch t {
case chat1.MessageType_ATTACHMENT:
attachment = msg.MessageBody.Attachment()
case chat1.MessageType_ATTACHMENTUPLOADED:
uploaded := msg.MessageBody.Attachmentuploaded()
attachment = chat1.MessageAttachment{
Object: uploaded.Object,
Previews: uploaded.Previews,
Metadata: uploaded.Metadata,
}
default:
return res, errors.New("not an attachment message")
}
res = attachment.Object
if preview {
if len(attachment.Previews) > 0 {
res = attachment.Previews[0]
} else if attachment.Preview != nil {
res = *attachment.Preview
} else {
return res, errors.New("no preview in attachment")
}
}
return res, nil
}