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.
This commit is contained in:
Alexander 2020-05-24 14:07:36 +02:00 committed by GitHub
parent 9440b9e313
commit 900375679b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 6 deletions

View File

@ -24,14 +24,16 @@ type Bxmpp struct {
connected bool connected bool
sync.RWMutex sync.RWMutex
avatarMap map[string]string avatarAvailability map[string]bool
avatarMap map[string]string
} }
func New(cfg *bridge.Config) bridge.Bridger { func New(cfg *bridge.Config) bridge.Bridger {
return &Bxmpp{ return &Bxmpp{
Config: cfg, Config: cfg,
xmppMap: make(map[string]string), xmppMap: make(map[string]string),
avatarMap: 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 event = config.EventTopicChange
} }
avatar := getAvatar(b.avatarMap, v.Remote, b.General) available, sok := b.avatarAvailability[v.Remote]
if avatar == "" { avatar := ""
if !sok {
b.Log.Debugf("Requesting avatar data") b.Log.Debugf("Requesting avatar data")
b.avatarAvailability[v.Remote] = false
b.xc.AvatarRequestData(v.Remote) b.xc.AvatarRequestData(v.Remote)
} else if available {
avatar = getAvatar(b.avatarMap, v.Remote, b.General)
} }
msgID := v.ID msgID := v.ID
@ -278,6 +284,8 @@ func (b *Bxmpp) handleXMPP() error {
} }
case xmpp.AvatarData: case xmpp.AvatarData:
b.handleDownloadAvatar(v) b.handleDownloadAvatar(v)
b.avatarAvailability[v.From] = true
b.Log.Debugf("Avatar for %s is now available", v.From)
case xmpp.Presence: case xmpp.Presence:
// Do nothing. // Do nothing.
} }