cc8f7d1eb8
Uploads showed a bar + %; downloads showed nothing. On the native app that gap is worse than on web, because there is no browser download UI behind it — the app fetches the bytes itself, so a large video looked like a frozen tap. - Adds the same chip an upload uses (name, bar, %) driven by Content-Length. Falls back to an indeterminate "…" when the server sends no length. - Streams the response and appends to the file in 3-byte-aligned blocks rather than holding blob + base64 simultaneously. The old path peaked around 250 MB of memory for a 75 MB video, which is enough to get a WebView killed on a phone. Verified byte-exact against empty / 1 B / 2 B (base64 padding edges) / ragged chunk sizes / 27 MB, reassembling identical bytes every time. - Older WebViews without streams keep the previous one-shot path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>