Skip to content

feat(media): draw gallery posts and enriched external cards - #262

Merged
ewanc26 merged 1 commit into
mainfrom
feat/external-media-v2
Oct 28, 2026
Merged

ewanc26 merged 1 commit into
mainfrom
feat/external-media-v2

Conversation

@ewanc26

@ewanc26 ewanc26 commented Oct 28, 2026

Copy link
Copy Markdown
Owner

What this changes

Implements the feed-side external-media variants left on #102.

  • app.bsky.embed.gallery#view is a separate view shape from images#view (its items use thumbnail). Gallery posts previously drew neither media nor a bracketed marker; they now draw their first four pictures in the same image row, including when the gallery is the media half of a recordWithMedia quote.
  • An enriched external#view can carry source.title and readingTime. The link card's footer now names the publication and reading time, falling back to the bare host it showed before. A plain link card is unchanged.
  • Both shapes are read through Wolfram's wf_embed_parse_view / wf_embed_parse_external_embed_view rather than a second cJSON reader. That parser takes JSON text, so fill_embed serialises the open embed subtree once per fetched post, and only for gallery or external media. The existing images, video poster/duration and quote paths are untouched.

This supersedes #261, which was stacked on the pre-rebase feat/settings-screen branch and became conflicting once #260 landed. The commit is unchanged; it is now cut from main as the flow requires.

The separate getEmbedExternalView article/livestream payloads are composer-side data, not post-view shapes, and are not part of this change.

Verification

  • make -C tests all — 1621 checks, 0 failures (sweep, linkcheck and unit tests), including the new gallery note case.
  • make -C tests snapshot — 658 checks, 0 failures. The fixtures carry a gallery post and an external card with readingTime and source.title; the flattened fields are asserted and timeline-gallery / timeline-external frames are written.
  • make -j4 with devkitPro — cobalt.wuhb built on the same tree before the rebase.
  • python3 tools/check-guide.py and bash tools/check-parity.sh pass.

Host-only and device-build verification. No Wii U or Cemu pass was run; the gallery layout and enriched card are not hardware-verified.

Refs #102. Supersedes #261.

Docs

AGENTS.md, README.md, docs/guide.md, docs/PARITY.md and CHANGELOG.md updated. The parity row remains partial for the separate article/livestream query payloads.

Checklist

  • CI is green (CI gate and flow / conventions)
  • No secrets, tokens or signing keys in the diff
  • Tests added or changed with the behaviour; none skipped, disabled or deleted

app.bsky.embed.gallery#view is a separate embed shape from images#view, so
those posts previously showed neither media nor a marker. Read it through
Wolfram's embed-view parser and draw its first four pictures in the same
image row, including when it is the media half of a quote post.

The enriched external#view can also carry source.title and readingTime.
Use them for the link card's footer, falling back to the host it showed
before, so a Standard.site article names its publication. The parser is
only invoked for gallery and external media, once per fetched post.

Fixtures now carry a gallery post and an external card with both fields;
snapshot cases check the flattened data and shoot both cards. (#102)

🤖 Generated with Codebuff
Co-Authored-By: Codebuff <noreply@codebuff.com>
@ewanc26
ewanc26 merged commit 5a174b9 into main Oct 28, 2026
13 checks passed
@ewanc26
ewanc26 deleted the feat/external-media-v2 branch October 28, 2026 20:33
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