bridgev2/ghost: consider avatar being set in Ghost.UpdateInfoIfNecessary (#453)
Some checks are pending
Go / Lint (latest) (push) Waiting to run
Go / Build (old, libolm) (push) Waiting to run
Go / Build (latest, libolm) (push) Waiting to run
Go / Build (old, goolm) (push) Waiting to run
Go / Build (latest, goolm) (push) Waiting to run

Co-authored-by: Tulir Asokan <tulir@maunium.net>
This commit is contained in:
Nick Mills-Barrett 2026-01-19 14:26:22 +00:00 committed by GitHub
commit f32af79d20
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -234,7 +234,7 @@ func (br *Bridge) allowAggressiveUpdateForType(evtType RemoteEventType) bool {
} }
func (ghost *Ghost) UpdateInfoIfNecessary(ctx context.Context, source *UserLogin, evtType RemoteEventType) { func (ghost *Ghost) UpdateInfoIfNecessary(ctx context.Context, source *UserLogin, evtType RemoteEventType) {
if ghost.Name != "" && ghost.NameSet && !ghost.Bridge.allowAggressiveUpdateForType(evtType) { if ghost.Name != "" && ghost.NameSet && ghost.AvatarSet && !ghost.Bridge.allowAggressiveUpdateForType(evtType) {
return return
} }
info, err := source.Client.GetUserInfo(ctx, ghost) info, err := source.Client.GetUserInfo(ctx, ghost)
@ -244,12 +244,16 @@ func (ghost *Ghost) UpdateInfoIfNecessary(ctx context.Context, source *UserLogin
zerolog.Ctx(ctx).Debug(). zerolog.Ctx(ctx).Debug().
Bool("has_name", ghost.Name != ""). Bool("has_name", ghost.Name != "").
Bool("name_set", ghost.NameSet). Bool("name_set", ghost.NameSet).
Bool("has_avatar", ghost.AvatarMXC != "").
Bool("avatar_set", ghost.AvatarSet).
Msg("Updating ghost info in IfNecessary call") Msg("Updating ghost info in IfNecessary call")
ghost.UpdateInfo(ctx, info) ghost.UpdateInfo(ctx, info)
} else { } else {
zerolog.Ctx(ctx).Trace(). zerolog.Ctx(ctx).Trace().
Bool("has_name", ghost.Name != ""). Bool("has_name", ghost.Name != "").
Bool("name_set", ghost.NameSet). Bool("name_set", ghost.NameSet).
Bool("has_avatar", ghost.AvatarMXC != "").
Bool("avatar_set", ghost.AvatarSet).
Msg("No ghost info received in IfNecessary call") Msg("No ghost info received in IfNecessary call")
} }
} }
@ -277,6 +281,11 @@ func (ghost *Ghost) UpdateInfo(ctx context.Context, info *UserInfo) {
} }
if info.Avatar != nil { if info.Avatar != nil {
update = ghost.UpdateAvatar(ctx, info.Avatar) || update update = ghost.UpdateAvatar(ctx, info.Avatar) || update
} else if oldAvatar == "" && !ghost.AvatarSet {
// Special case: nil avatar means we're not expecting one ever, if we don't currently have
// one we flag it as set to avoid constantly refetching in UpdateInfoIfNecessary.
ghost.AvatarSet = true
update = true
} }
if info.Identifiers != nil || info.IsBot != nil { if info.Identifiers != nil || info.IsBot != nil {
update = ghost.UpdateContactInfo(ctx, info.Identifiers, info.IsBot) || update update = ghost.UpdateContactInfo(ctx, info.Identifiers, info.IsBot) || update