morpheus

A Matrix client written in Go-QT
git clone git://archive.git.mtrnord.blog/Nordgedanken/morpheus.git
Log | Files | Refs | README | LICENSE

commit df4045ef159a9edb35754342975b15811c6428e1
parent 1a37dc02f9814ffe62470e8e19805575c006a80c
Author: MTRNord <mtrnord1@gmail.com>
Date:   Tue, 22 Aug 2017 23:13:51 +0200

Use cache when getting Avatar and Displayname and add comments

Diffstat:
Mmain.go | 2+-
Mmatrix/ownUser.go | 92+++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------
2 files changed, 61 insertions(+), 33 deletions(-)

diff --git a/main.go b/main.go @@ -9,11 +9,11 @@ import ( "github.com/therecipe/qt/widgets" ) -var localLog *log.Logger var window *widgets.QMainWindow func main() { var file *os.File + var localLog *log.Logger localLog = util.Logger() localLog, file = util.StartFileLog(localLog) defer file.Close() diff --git a/matrix/ownUser.go b/matrix/ownUser.go @@ -1,53 +1,82 @@ package matrix import ( - "log" - "os" "strings" - "github.com/Nordgedanken/Neo/util" "github.com/therecipe/qt/gui" "github.com/tidwall/buntdb" ) -var localLog *log.Logger - // getUserDisplayName returns the Dispaly name to a MXID -func getUserDisplayName(mxid string, cli *Client) (resp *RespUserDisplayName, err error) { - - urlPath := cli.BuildURL("profile", mxid, "displayname") - _, err = cli.MakeRequest("GET", urlPath, nil, &resp) - err = db.Update(func(tx *buntdb.Tx) error { - tx.Set("user:displayName", resp.DisplayName, nil) - return nil +func getUserDisplayName(mxid string, cli *Client) (displayName string, err error) { + // Get cache + db.View(func(tx *Tx) error { + tx.AscendKeys("user:displayName", + func(key, value string) bool { + displayName = value + return true + }) }) + + // If cache is empty query the api + if displayName == "" { + urlPath := cli.BuildURL("profile", mxid, "displayname") + var resp *RespUserDisplayName + _, err = cli.MakeRequest("GET", urlPath, nil, &resp) + + // Update cache + err = db.Update(func(tx *buntdb.Tx) error { + tx.Set("user:displayName", resp.DisplayName, nil) + return nil + }) + + displayName = resp.DisplayName + } return } // getOwnUserAvatar returns a *gui.QPixmap of an UserAvatar func getOwnUserAvatar(cli *Client) *gui.QPixmap { - var file *os.File - localLog = util.Logger() - localLog, file = util.StartFileLog(localLog) - defer file.Close() - avatarURL, avatarErr := cli.GetAvatarURL() - if avatarErr != nil { - localLog.Println(avatarErr) - } - + // Init local vars + var avatarData string var IMGdata string - if avatarURL != "" { - hsURL := cli.HomeserverURL.String() - avatarURL_splits := strings.Split(strings.Replace(avatarURL, "mxc://", "", -1), "/") - urlPath := hsURL + "/_matrix/media/r0/thumbnail/" + avatarURL_splits[0] + "/" + avatarURL_splits[1] + "?width=100&height=100" - println(urlPath) + // Get cache + db.View(func(tx *Tx) error { + tx.AscendKeys("user:avatarData100x100", + func(key, value string) bool { + avatarData = value + return true + }) + }) + + //If cache is empty do a ServerQuery + if avatarData == "" { + + // Get avatarURL + avatarURL, avatarErr := cli.GetAvatarURL() + if avatarErr != nil { + localLog.Println(avatarErr) + } + + // If avatarURL is not empty (aka. has a avatar set) download it at the size of 100x100. Else make the data string empty + if avatarURL != "" { + hsURL := cli.HomeserverURL.String() + avatarURL_splits := strings.Split(strings.Replace(avatarURL, "mxc://", "", -1), "/") - data, err := cli.MakeRequest("GET", urlPath, nil, nil) - if err != nil { - localLog.Println(err) + urlPath := hsURL + "/_matrix/media/r0/thumbnail/" + avatarURL_splits[0] + "/" + avatarURL_splits[1] + "?width=100&height=100" + + data, err := cli.MakeRequest("GET", urlPath, nil, nil) + if err != nil { + localLog.Println(err) + } + IMGdata = string(data[:]) + } else { + //TODO Generate default image (Step: AfterUI) + IMGdata = "" } - IMGdata = string(data[:]) + + // Update cache DBerr := db.Update(func(tx *buntdb.Tx) error { tx.Set("user:avatarData100x100", IMGdata, nil) return nil @@ -55,10 +84,9 @@ func getOwnUserAvatar(cli *Client) *gui.QPixmap { if DBerr != nil { localLog.Fatalln(err) } - } else { - IMGdata = "" } + // Convert avatarimage to QPixmap for usage in QT avatar := gui.NewQPixmap() avatar.LoadFromData(IMGdata, uint(len(IMGdata)), "", 0) return avatar