diff options
author | Tulir Asokan <tulir@maunium.net> | 2019-06-16 15:18:25 +0300 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2019-06-16 15:18:25 +0300 |
commit | 8b87809ac1cae1263d3591a1b9b5b88c944034d8 (patch) | |
tree | 25c6421dc5da1b96d2d7804eccad94ed8a2ee1a1 /ui/messages/imagemessage.go | |
parent | d3c18788dda5c2205a858c99afc75acc46c7ed33 (diff) | |
parent | 1ea6ba026aab8b9d3e66681c97043b5806ef4971 (diff) |
Merge branch 'break-things-again'
Diffstat (limited to 'ui/messages/imagemessage.go')
-rw-r--r-- | ui/messages/imagemessage.go | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/ui/messages/imagemessage.go b/ui/messages/imagemessage.go index 01a6500..6c31327 100644 --- a/ui/messages/imagemessage.go +++ b/ui/messages/imagemessage.go @@ -22,6 +22,7 @@ import ( "image/color" "maunium.net/go/mautrix" + "maunium.net/go/mauview" "maunium.net/go/tcell" "maunium.net/go/gomuks/config" @@ -32,32 +33,30 @@ import ( ) type ImageMessage struct { - BaseMessage Body string Homeserver string FileID string data []byte + buffer []tstring.TString matrix ifc.MatrixContainer } // NewImageMessage creates a new ImageMessage object with the provided values and the default state. -func NewImageMessage(matrix ifc.MatrixContainer, event *mautrix.Event, displayname string, body, homeserver, fileID string, data []byte) UIMessage { - return &ImageMessage{ - newBaseMessage(event, displayname), - body, - homeserver, - fileID, - data, - matrix, - } +func NewImageMessage(matrix ifc.MatrixContainer, event *mautrix.Event, displayname string, body, homeserver, fileID string, data []byte) *UIMessage { + return newUIMessage(event, displayname, &ImageMessage{ + Body: body, + Homeserver: homeserver, + FileID: fileID, + data: data, + matrix: matrix, + }) } -func (msg *ImageMessage) Clone() UIMessage { +func (msg *ImageMessage) Clone() MessageRenderer { data := make([]byte, len(msg.data)) copy(data, msg.data) return &ImageMessage{ - BaseMessage: msg.BaseMessage.clone(), Body: msg.Body, Homeserver: msg.Homeserver, FileID: msg.FileID, @@ -70,7 +69,7 @@ func (msg *ImageMessage) RegisterMatrix(matrix ifc.MatrixContainer) { msg.matrix = matrix if len(msg.data) == 0 { - go msg.updateData() + //FIXME go msg.updateData() } } @@ -82,6 +81,10 @@ func (msg *ImageMessage) PlainText() string { return fmt.Sprintf("%s: %s", msg.Body, msg.matrix.GetDownloadURL(msg.Homeserver, msg.FileID)) } +func (msg *ImageMessage) String() string { + return fmt.Sprintf(`&messages.ImageMessage{Body="%s", Homeserver="%s", FileID="%s"}`, msg.Body, msg.Homeserver, msg.FileID) +} + func (msg *ImageMessage) updateData() { defer debug.Recover() debug.Print("Loading image:", msg.Homeserver, msg.FileID) @@ -101,14 +104,13 @@ func (msg *ImageMessage) Path() string { // CalculateBuffer generates the internal buffer for this message that consists // of the text of this message split into lines at most as wide as the width // parameter. -func (msg *ImageMessage) CalculateBuffer(prefs config.UserPreferences, width int) { +func (msg *ImageMessage) CalculateBuffer(prefs config.UserPreferences, width int, uiMsg *UIMessage) { if width < 2 { return } - msg.CalculateReplyBuffer(prefs, width) if prefs.BareMessageView || prefs.DisableImages { - msg.calculateBufferWithText(prefs, tstring.NewTString(msg.PlainText()), width) + msg.buffer = calculateBufferWithText(prefs, tstring.NewTString(msg.PlainText()), width, uiMsg) return } @@ -121,3 +123,13 @@ func (msg *ImageMessage) CalculateBuffer(prefs config.UserPreferences, width int msg.buffer = image.Render() } + +func (msg *ImageMessage) Height() int { + return len(msg.buffer) +} + +func (msg *ImageMessage) Draw(screen mauview.Screen) { + for y, line := range msg.buffer { + line.Draw(screen, 0, y) + } +} |