commit 528f91784d10cd7116db9199ebb68d679d6ec938
parent 89ccc954f2974b76db9e90b05765ff5bcaccf005
Author: MTRNord <mtrnord1@gmail.com>
Date: Fri, 24 Nov 2017 07:04:48 +0100
Hopefully fix images from cache sometimes break
Signed-off-by: MTRNord <mtrnord1@gmail.com>
Diffstat:
3 files changed, 41 insertions(+), 32 deletions(-)
diff --git a/matrix/rooms.go b/matrix/rooms.go
@@ -2,7 +2,6 @@ package matrix
import (
"bytes"
- "fmt"
"image"
"image/draw"
"image/png"
@@ -62,24 +61,24 @@ func (r *Room) GetRoomAvatar() (avatarResp *gui.QPixmap, err error) {
}
// Get the image Data
- db, DBOpenErr := db.OpenCacheDB()
+ cacheDB, DBOpenErr := db.OpenCacheDB()
if DBOpenErr != nil {
localLog.Fatalln(DBOpenErr)
}
// Init local vars
- var roomAvatarData string
- var IMGdata string
+ var roomAvatarData []byte
+ var IMGdata []byte
// Get cache
- DBErr := db.View(func(txn *badger.Txn) error {
+ DBErr := cacheDB.View(func(txn *badger.Txn) error {
roomAvatarDataItem, QueryErr := txn.Get([]byte("room|" + r.RoomID + "|84x84"))
if QueryErr != nil && QueryErr != badger.ErrKeyNotFound {
return QueryErr
}
if QueryErr != badger.ErrKeyNotFound {
roomAvatarDataBytes, roomAvatarDataErr := roomAvatarDataItem.Value()
- roomAvatarData = fmt.Sprintf("%s", roomAvatarDataBytes)
+ roomAvatarData = roomAvatarDataBytes
return roomAvatarDataErr
}
return nil
@@ -90,7 +89,7 @@ func (r *Room) GetRoomAvatar() (avatarResp *gui.QPixmap, err error) {
}
//If cache is empty do a ServerQuery
- if roomAvatarData == "" {
+ if len(roomAvatarData) <= 0 {
// If avatarURL is not empty (aka. has a avatar set) download it at the size of 100x100. Else make the data string empty
if r.RoomAvatarURL != "" {
hsURL := r.cli.HomeserverURL.String()
@@ -103,7 +102,7 @@ func (r *Room) GetRoomAvatar() (avatarResp *gui.QPixmap, err error) {
err = ReqErr
return
}
- IMGdata = string(data[:])
+ IMGdata = data
} else {
localLog.Println("Generating Room Avatar")
var GenerateImgErr error
@@ -124,8 +123,8 @@ func (r *Room) GetRoomAvatar() (avatarResp *gui.QPixmap, err error) {
}
// Update cache
- DBSetErr := db.Update(func(txn *badger.Txn) error {
- DBSetErr := txn.Set([]byte("room|"+r.RoomID+"|84x84"), []byte(IMGdata))
+ DBSetErr := cacheDB.Update(func(txn *badger.Txn) error {
+ DBSetErr := txn.Set([]byte("room|"+r.RoomID+"|84x84"), IMGdata)
return DBSetErr
})
if DBSetErr != nil {
@@ -137,7 +136,7 @@ func (r *Room) GetRoomAvatar() (avatarResp *gui.QPixmap, err error) {
IMGdata = roomAvatarData
}
- reader := bytes.NewReader([]byte(IMGdata))
+ reader := bytes.NewReader(IMGdata)
srcIMG, _, DecodeErr := image.Decode(reader)
if DecodeErr != nil {
err = DecodeErr
diff --git a/matrix/user.go b/matrix/user.go
@@ -2,13 +2,16 @@ package matrix
import (
"bytes"
- "fmt"
"image"
"image/color"
"image/draw"
+ // image/gif needed to load gif images
+ _ "image/gif"
// image/jpeg needed to load jpeg images
_ "image/jpeg"
"image/png"
+ // image/png needed to load png images
+ _ "image/png"
"log"
"os"
"strconv"
@@ -28,6 +31,12 @@ import (
// golang.org/x/image/bmp needed to load bmp images
_ "golang.org/x/image/bmp"
+
+ // golang.org/x/image/riff needed to load riff images
+ _ "golang.org/x/image/riff"
+
+ // golang.org/x/image/tiff needed to load tiff images
+ _ "golang.org/x/image/tiff"
)
var localLog *log.Logger
@@ -60,12 +69,12 @@ func (c *circle) Bounds() image.Rectangle {
func (c *circle) At(x, y int) color.Color {
xx, yy, rr := float64(x-c.p.X)+0.5, float64(y-c.p.Y)+0.5, float64(c.r)
if xx*xx+yy*yy < rr*rr {
- return color.Alpha{255}
+ return color.Alpha{A: 255}
}
- return color.Alpha{0}
+ return color.Alpha{A: 0}
}
-func generateGenericImages(displayname string, size int) (imgData string, err error) {
+func generateGenericImages(displayname string, size int) (imgData []byte, err error) {
identifier := displayname
if (identifier[0] == '#' || identifier[0] == '!' || identifier[0] == '@') && len(identifier) > 1 {
identifier = identifier[1:]
@@ -85,7 +94,7 @@ func generateGenericImages(displayname string, size int) (imgData string, err er
err = EncodeErr
return
}
- imgData = buf.String()
+ imgData = buf.Bytes()
return
}
@@ -97,17 +106,17 @@ func GetOwnUserAvatar(cli *gomatrix.Client) (avatar *gui.QPixmap, err error) {
// GetUserAvatar returns a *gui.QPixmap of an UserAvatar
func GetUserAvatar(cli *gomatrix.Client, mxid string, size int) (avatarResp *gui.QPixmap, err error) {
- db, DBOpenErr := db.OpenCacheDB()
+ cacheDB, DBOpenErr := db.OpenCacheDB()
if DBOpenErr != nil {
localLog.Fatalln(DBOpenErr)
}
// Init local vars
- var avatarData string
- var IMGdata string
+ var avatarData []byte
+ var IMGdata []byte
// Get cache
- txn := db.NewTransaction(false)
+ txn := cacheDB.NewTransaction(false)
avatarDataItem, QueryErr := txn.Get([]byte("user|" + mxid + "|avatarData" + strconv.Itoa(size) + "x" + strconv.Itoa(size)))
if QueryErr != nil && QueryErr != badger.ErrKeyNotFound {
err = QueryErr
@@ -115,7 +124,7 @@ func GetUserAvatar(cli *gomatrix.Client, mxid string, size int) (avatarResp *gui
}
if QueryErr != badger.ErrKeyNotFound {
avatarDataByte, avatarDataErr := avatarDataItem.Value()
- avatarData = fmt.Sprintf("%s", avatarDataByte)
+ avatarData = avatarDataByte
if avatarDataErr != nil {
err = avatarDataErr
}
@@ -123,7 +132,7 @@ func GetUserAvatar(cli *gomatrix.Client, mxid string, size int) (avatarResp *gui
}
//If cache is empty do a ServerQuery
- if avatarData == "" {
+ if len(avatarData) <= 0 {
// Get avatarURL
urlPath := cli.BuildURL("profile", mxid, "avatar_url")
s := struct {
@@ -149,7 +158,7 @@ func GetUserAvatar(cli *gomatrix.Client, mxid string, size int) (avatarResp *gui
err = ReqErr
return
}
- IMGdata = string(data[:])
+ IMGdata = data
} else {
DisplayNameResp, _ := cli.GetDisplayName(mxid)
DisplayName := DisplayNameResp.DisplayName
@@ -162,8 +171,8 @@ func GetUserAvatar(cli *gomatrix.Client, mxid string, size int) (avatarResp *gui
}
// Update cache
- txn := db.NewTransaction(true)
- DBSetErr := txn.Set([]byte("user|"+mxid+"|avatarData"+strconv.Itoa(size)+"x"+strconv.Itoa(size)), []byte(IMGdata))
+ txn := cacheDB.NewTransaction(true)
+ DBSetErr := txn.Set([]byte("user|"+mxid+"|avatarData"+strconv.Itoa(size)+"x"+strconv.Itoa(size)), IMGdata)
if DBSetErr != nil {
err = DBSetErr
return
@@ -172,7 +181,7 @@ func GetUserAvatar(cli *gomatrix.Client, mxid string, size int) (avatarResp *gui
IMGdata = avatarData
}
- r := bytes.NewReader([]byte(IMGdata))
+ r := bytes.NewReader(IMGdata)
srcIMG, _, DecodeErr := image.Decode(r)
if DecodeErr != nil {
err = DecodeErr
@@ -191,8 +200,9 @@ func GetUserAvatar(cli *gomatrix.Client, mxid string, size int) (avatarResp *gui
err = ConvErr
}
- str := buf.String()
- avatar.LoadFromData(str, uint(len(str)), "", 0)
+ str := buf.Bytes()
+
+ avatar.LoadFromData(string(str[:]), uint(len(str)), "PNG", 0)
avatarResp = avatar
return
}
diff --git a/ui/MainUI.go b/ui/MainUI.go
@@ -362,11 +362,11 @@ func contains(slice []string, item string) bool {
}
func (m *MainUI) loadCache() (err error) {
- /*barAtBottom := false
+ barAtBottom := false
bar := m.messageScrollArea.VerticalScrollBar()
if bar.Value() == bar.Maximum() {
barAtBottom = true
- }*/
+ }
db, DBOpenErr := db.OpenCacheDB()
if DBOpenErr != nil {
@@ -595,9 +595,9 @@ func (m *MainUI) loadCache() (err error) {
return
}
- /*if barAtBottom {
+ if !barAtBottom {
bar.SetValue(bar.Maximum())
- }*/
+ }
return
}