Skip to content

Use character avatars for Forever WoW characters - #36

Merged
Lucrona merged 1 commit into
wow-playedfrom
feat/forever-character-avatars
Nov 10, 2026
Merged

Lucrona merged 1 commit into
wow-playedfrom
feat/forever-character-avatars

Conversation

@Lucrona

@Lucrona Lucrona commented Nov 10, 2026 •

Copy link
Copy Markdown
Owner

Change

Forever character portraits now come from Battle.net character media on profile cards, the View all gallery, manager rows and the popup. Missing, failed or broken avatars fall back to the class icon. Retail rendering is unchanged.

The media-only endpoint uses the realmless US /profile/wow/character/<first>-<surname>/character-media?namespace=profile-forever-us URL. It reuses warm popup media or keeps a bounded in-memory cache (12 hours for found portraits, 10 minutes for misses). Client requests are deduplicated and limited to six at a time. The existing BNET_FOREVER_LOOKUP gate remains unchanged.

Public avatar requests pass the existing profile/character visibility checks before reading media. Signed-in owners can see their own hidden-character avatars in the manager. Responses are private/no-store. Only the Blizzard render host is accepted, and a known character id must match the media response.

Data safety

No migrations, persistent cache writes, character updates, hour updates, merges, rewrites or deletes. The new server route only reads the database and GETs public media. No OAuth or ownership changes. Base: c7e524784a900d4d3046633a3f6b870db96c6897 from latest wow-played.

Validation

  • cargo fmt --all --check: passed.
  • Core/sync/server all-target clippy with -D warnings: passed.
  • UI tests: 18 passed, including portrait/fallback rendering, six-request concurrency, deduplication, broken-image handling, all four surfaces, profile mount order and Retail regressions.
  • Complete core/sync/server serial suite against box-only Postgres: 337 passed, 0 failed, 3 ignored. Linux CI runs whole-workspace clippy/tests including desktop; Windows CI covers its platform paths.
  • Server tests cover media shapes, known-id mismatch, unsafe image hosts, gate/visibility/privacy, owner-only hidden rows, no-store headers and unchanged complete character rows/seconds.

Fixture-only static mock preview: /workspace/pr36-preview/forever-avatars.png (HTML, PDF and synthetic portrait fixtures alongside it). No live account data was used. It is a rendered mock, not signed-in browser QA.

No merge, deployment or live flag changes performed.

CI status

Green on 4b2552c993cae3c32a2f456c6c417be180be68ba: Linux whole-workspace fmt, clippy, tests and simulation passed; Windows tests, clippy and unsigned-installer packaging passed. The earlier Linux dependency-install delay cleared without workflow changes or reruns.

Run: https://github.com/Lucrona/fraglink/actions/runs/42819448530

@Lucrona
Lucrona merged commit 389388c into wow-played Nov 10, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant