From 900375679bfa248bcf02c203e9265e5e93a17a73 Mon Sep 17 00:00:00 2001 From: Alexander Date: Sun, 24 May 2020 14:07:36 +0200 Subject: [PATCH] Prevent re-requesting avatar data (xmpp) (#1117) Prevent asking the server again and again for a user's avatar if the server does not respond to our initial request. --- bridge/xmpp/xmpp.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/bridge/xmpp/xmpp.go b/bridge/xmpp/xmpp.go index 75b2b598..ed99aac2 100644 --- a/bridge/xmpp/xmpp.go +++ b/bridge/xmpp/xmpp.go @@ -24,14 +24,16 @@ type Bxmpp struct { connected bool sync.RWMutex - avatarMap map[string]string + avatarAvailability map[string]bool + avatarMap map[string]string } func New(cfg *bridge.Config) bridge.Bridger { return &Bxmpp{ - Config: cfg, - xmppMap: make(map[string]string), - avatarMap: make(map[string]string), + Config: cfg, + xmppMap: make(map[string]string), + avatarAvailability: make(map[string]bool), + avatarMap: make(map[string]string), } } @@ -244,10 +246,14 @@ func (b *Bxmpp) handleXMPP() error { event = config.EventTopicChange } - avatar := getAvatar(b.avatarMap, v.Remote, b.General) - if avatar == "" { + available, sok := b.avatarAvailability[v.Remote] + avatar := "" + if !sok { b.Log.Debugf("Requesting avatar data") + b.avatarAvailability[v.Remote] = false b.xc.AvatarRequestData(v.Remote) + } else if available { + avatar = getAvatar(b.avatarMap, v.Remote, b.General) } msgID := v.ID @@ -278,6 +284,8 @@ func (b *Bxmpp) handleXMPP() error { } case xmpp.AvatarData: b.handleDownloadAvatar(v) + b.avatarAvailability[v.From] = true + b.Log.Debugf("Avatar for %s is now available", v.From) case xmpp.Presence: // Do nothing. }