4
0
mirror of https://github.com/cwinfo/matterbridge.git synced 2025-06-27 08:49:24 +00:00

Download files from slack and reupload to mattermost (slack/mattermost). Closes #255

Refactor message.Extra to a map[string][]interface{} to have a bit more flexibility
for stuffing extra stuff.

For attached files from slack, files < 1MB size get downloaded (in memory), and get
put into Extra["file"][]config.FileInfo (containing a pointer to the buffer and
the filename). This is not async so slack channels with lots of attached files
may suffer a slowdown. (the download timeout is set at 5 seconds).
This commit is contained in:
Wim
2017-09-21 22:35:21 +02:00
parent 6a7adb20a8
commit c4b75e5754
4 changed files with 65 additions and 8 deletions

View File

@ -26,7 +26,7 @@ type MMMessage struct {
UserID string
ID string
Event string
Extra []interface{}
Extra map[string][]interface{}
}
type Bmattermost struct {
@ -179,6 +179,21 @@ func (b *Bmattermost) Send(msg config.Message) (string, error) {
}
return msg.ID, b.mc.DeleteMessage(msg.ID)
}
if msg.Extra != nil {
for _, f := range msg.Extra["file"] {
fi := f.(config.FileInfo)
id, err := b.mc.UploadFile(*fi.Data, b.mc.GetChannelId(channel, ""), fi.Name)
if err != nil {
flog.Debugf("ERROR %#v", err)
return "", err
}
message = "uploaded a file: " + fi.Name
if b.Config.PrefixMessagesWithNick {
message = nick + "uploaded a file: " + fi.Name
}
return b.mc.PostMessageWithFiles(b.mc.GetChannelId(channel, ""), message, []string{id})
}
}
if msg.ID != "" {
return b.mc.EditMessage(msg.ID, message)
}
@ -225,7 +240,7 @@ func (b *Bmattermost) handleMatterClient(mchan chan *MMMessage) {
continue
}
m := &MMMessage{}
m := &MMMessage{Extra: make(map[string][]interface{})}
props := message.Post.Props
if props != nil {
@ -237,7 +252,7 @@ func (b *Bmattermost) handleMatterClient(mchan chan *MMMessage) {
message.Username = props["override_username"].(string)
}
if _, ok := props["attachments"].([]interface{}); ok {
m.Extra = props["attachments"].([]interface{})
m.Extra["attachments"] = props["attachments"].([]interface{})
}
}
// do not post our own messages back to irc