diff --git a/internal/processing/workers/fromclientapi.go b/internal/processing/workers/fromclientapi.go index 8cd67dd2a..0e27eea0e 100644 --- a/internal/processing/workers/fromclientapi.go +++ b/internal/processing/workers/fromclientapi.go @@ -750,6 +750,9 @@ func (p *clientAPI) UpdateAccount(ctx context.Context, cMsg *messages.FromClient log.Errorf(ctx, "error federating account update: %v", err) } + // Account representation has changed, invalidate from timelines. + p.surface.invalidateTimelineEntriesByAccount(account.ID) + return nil } diff --git a/internal/processing/workers/fromfediapi.go b/internal/processing/workers/fromfediapi.go index 0f0c7549e..93dd5b00e 100644 --- a/internal/processing/workers/fromfediapi.go +++ b/internal/processing/workers/fromfediapi.go @@ -811,6 +811,9 @@ func (p *fediAPI) UpdateAccount(ctx context.Context, fMsg *messages.FromFediAPI) log.Errorf(ctx, "error refreshing account: %v", err) } + // Account representation has changed, invalidate from timelines. + p.surface.invalidateTimelineEntriesByAccount(account.ID) + return nil } diff --git a/internal/processing/workers/surfacetimeline.go b/internal/processing/workers/surfacetimeline.go index 2046d1995..ebb77b6bb 100644 --- a/internal/processing/workers/surfacetimeline.go +++ b/internal/processing/workers/surfacetimeline.go @@ -826,6 +826,12 @@ func (s *Surface) removeTimelineEntriesByAccount(accountID string) { s.State.Caches.Timelines.List.RemoveByAccountIDs(accountID) } +// removeTimelineEntriesByAccount invalidates all cached timeline entries authored by account ID. +func (s *Surface) invalidateTimelineEntriesByAccount(accountID string) { + s.State.Caches.Timelines.Home.UnprepareByAccountIDs(accountID) + s.State.Caches.Timelines.List.UnprepareByAccountIDs(accountID) +} + func (s *Surface) removeRelationshipFromTimelines(ctx context.Context, timelineAccountID string, targetAccountID string) { // Remove all statuses by target account // from given account's home timeline.