aboutsummaryrefslogtreecommitdiff
path: root/ui/messages/imagemessage.go
diff options
context:
space:
mode:
Diffstat (limited to 'ui/messages/imagemessage.go')
-rw-r--r--ui/messages/imagemessage.go42
1 files changed, 37 insertions, 5 deletions
diff --git a/ui/messages/imagemessage.go b/ui/messages/imagemessage.go
index 7129e5a..5282d44 100644
--- a/ui/messages/imagemessage.go
+++ b/ui/messages/imagemessage.go
@@ -19,15 +19,16 @@ package messages
import (
"bytes"
"encoding/gob"
+ "fmt"
"time"
"image/color"
"maunium.net/go/gomuks/debug"
"maunium.net/go/gomuks/interface"
+ "maunium.net/go/gomuks/lib/ansimage"
"maunium.net/go/gomuks/ui/messages/tstring"
"maunium.net/go/gomuks/ui/widget"
- "maunium.net/go/gomuks/lib/ansimage"
"maunium.net/go/tcell"
)
@@ -37,12 +38,15 @@ func init() {
type UIImageMessage struct {
UITextMessage
- Path string
- data []byte
+ Homeserver string
+ FileID string
+ data []byte
+
+ gmx ifc.Gomuks
}
// NewImageMessage creates a new UIImageMessage object with the provided values and the default state.
-func NewImageMessage(id, sender, msgtype string, path string, data []byte, timestamp time.Time) UIMessage {
+func NewImageMessage(gmx ifc.Gomuks, id, sender, msgtype, homeserver, fileID string, data []byte, timestamp time.Time) UIMessage {
return &UIImageMessage{
UITextMessage{
MsgSender: sender,
@@ -55,11 +59,39 @@ func NewImageMessage(id, sender, msgtype string, path string, data []byte, times
MsgIsHighlight: false,
MsgIsService: false,
},
- path,
+ homeserver,
+ fileID,
data,
+ gmx,
+ }
+}
+
+func (msg *UIImageMessage) RegisterGomuks(gmx ifc.Gomuks) {
+ msg.gmx = gmx
+
+ debug.Print(len(msg.data), msg.data)
+ if len(msg.data) == 0 {
+ go func() {
+ defer gmx.Recover()
+ msg.updateData()
+ }()
}
}
+func (msg *UIImageMessage) updateData() {
+ debug.Print("Loading image:", msg.Homeserver, msg.FileID)
+ data, _, _, err := msg.gmx.Matrix().Download(fmt.Sprintf("mxc://%s/%s", msg.Homeserver, msg.FileID))
+ if err != nil {
+ debug.Print("Failed to download image %s/%s: %v", msg.Homeserver, msg.FileID, err)
+ return
+ }
+ msg.data = data
+}
+
+func (msg *UIImageMessage) Path() string {
+ return msg.gmx.Matrix().GetCachePath(msg.Homeserver, msg.FileID)
+}
+
// CopyFrom replaces the content of this message object with the content of the given object.
func (msg *UIImageMessage) CopyFrom(from ifc.MessageMeta) {
msg.MsgSender = from.Sender()