Repository navigation
perf(mobile): stop downloading whole videos for posterless stills - #9367
Conversation
|
@codex review |
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Codex Review: Didn't find any major issues. Can't wait for the next one! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Delete eager poster generation for videos without NIP-71 poster metadata. Each rendered bubble or stack card downloaded the whole video (up to 100 MB) to grab a frame, and desktop never writes posters, so this covered every desktop-sent video. Posterless videos go back to the static placeholder. Also route .3gpp and .3g2 picker results as videos now that the explicit Video attachment action is gone. Co-Authored-By: Claude Opus 5.5 <[email protected]> Signed-off-by: Tom Brow <[email protected]>
612b6fe to
518af3a
Compare
🔐 Codex Security Review
Review SummaryOverall Risk: NONE
FindingsNo concrete security, correctness, or reliability findings were identified. Notes
Generated by Codex Security Review | |
…small * origin/main: fix(db): seek replaceable heads by channel (#9147) buzz-db: check events created_at floor in app writers (phase 1) (#8325) fix(mobile): keep a thread tail behind the keyboard unread (#9295) fix(mobile): restore header cues and per-channel identity check for #9369 (#9370) fix(relay): treat empty filter sets as match-nothing in SQL (#9342) buzz-cli: add --before and --before-id to messages search (#9382) feat(relay): agents cannot write in DMs except with their owner (#9371) fix(relay): bound each cross-node delivery attempt (#9305) feat(mobile): add iOS Home Screen shortcuts for New chat, New DM and the Bestie (#9360) perf(mobile): stop downloading whole videos for posterless stills (#9367) Enforce single-community relay mode (#9149) fix(relay): match #a tag filters in SQL before LIMIT (#9339) Add participant avatars to mobile conversation headers (#9369) fix(mobile): stop asking for an API token when the channel list is refused (#9327) chore(release): release Buzz Relay version 0.3.0 (#9362) Fix gallery video selection, thumbnails, and swipe dismissal (#9356) Signed-off-by: dessert <7d616e7e143e5d408159614dccff1371350a1c1bd36c8de838a45ece5aca0aca@buzz.block.builderlab.xyz>
Follow-up to #9356 gallery video selection, merged as ef57fec4d. It makes two changes that came out of review.
1. Remove automatic stills for videos without poster metadata
#9356 generated a still for every rendered video bubble or stack card that had no NIP-71 poster. To do that it downloaded the whole video (up to the 100 MB limit), grabbed a frame and threw the file away. Desktop (buzz-app) never writes
image/thumbon video attachments, so this covered every desktop-sent video, not only old mobile messages. Before #9356 those bubbles were a static placeholder that used no network.The cost on a real timeline:
This PR deletes that path:
video_poster.dartand its test, plus the watchers andgeneratedPosterbranches invideo_preview.dartandmedia_stack.dart. Posterless videos are back to base behavior: "Video attachment" in a bubble, the plain surface on a stack card, and the source snapshot in the native viewer. The rest of #9356 stays: queued local stills (prepareVideoPosteron the local file, no network), the remote-poster preview in the native viewer, the picker changes and swipe dismissal.NativeVideoFiles._cancelTimeoutswas added for poster disposal. No remaining test depends on it, so it goes back to base too.If stills for desktop-sent videos are still wanted, a bounded follow-up is to generate and cache the still from the file that playback already downloaded, after the user opens it. That adds no network.
2. Route
.3gppand.3g2picks as videosThe Video row is gone from the attachment menu, so
_isPickedVideois now the only thing that classifies path-only picker results. Its extension list missed3gppand3g2. The recent-media grid returns the original library file, and PHPicker exports 3GPP2 as.3g2, so those videos were queued as images and then rejected byuploadImage. Before #9356, the explicit Video action uploaded them throughuploadVideo, which transcodes to MP4.Pareto
The change only removes work: no extra network or decoding for posterless videos, and no change for videos that carry a poster. The one thing we give up is the still on posterless videos that #9356 added and base never had.
Validation
clip.3gppandclip.3g2in the existing mixed-gallery composer journey. Both now queue as video.flutter testpasses on 518af3a0d: 4,688 passed, 71 skipped.flutter analyzeis clean.Review report:
buzz://message?channel=e71f9a2a-ac46-473d-a24e-5e16fd8cb7b1&id=bcae52d59c255add1a927e0135441a1c58115b6aa6cda8d9ff7e58d47a627a87🤖 Generated with Claude Code