Repository navigation
feat(release-editor): show upload progress and add an Upload button - #1223
Merged
Merged
Conversation
Saving a release fires a chain of requests — release metadata, cover art, then the audio, then the per-track edits — and the audio is the slow half, tens of megabytes a file. All the artist got was a disabled Save button: no way to tell an upload in flight from a stuck one, on the one action of the app that routinely takes minutes. - Queued audio is listed in the tracklist with its size, and the toolbar grows an "Upload N files" button that sends the audio on its own, without saving-and-closing the release (creating the release first when it does not exist yet, since a file needs somewhere to land). - A bar under the toolbar reports the whole chain: which file is going up, how far its bytes have got, and how much of the batch is left. Each queued row carries its own bar, so one stalled file is visible rather than averaged away. - Audio goes up one request per file instead of one request for the batch: the browser reports bytes for a request as a whole, so a single 400 MB request could only ever say "somewhere between 0 and 100%", and one failure partway through took every file with it. Per file, a failure costs only that file and the rest stay queued for a retry. - Save and Publish end in a toast rather than in silence. - The pending-upload list rendered <div> cards inside <tbody>; it is now proper rows, and the duplicate list below it became the upload strip. The same bar reached the Upload Tracks and Upload Sample dialogs. The tracks dialog counted finished files, so a single large file sat at 0% until it was completely done; it now weights progress by bytes and leaves the finished bar next to the result. `uploadProgressConfig` in the API client gives every upload endpoint the same optional `onProgress`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DtNRuZAEw5XA5HXBAJvs4x
scobru
marked this pull request as ready for review
September 10, 2026 07:28
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Saving a release fires a chain of requests — release metadata, cover art, then the audio, then the per-track edits — and the audio is the slow half, tens of megabytes a file. All the artist got was a disabled Save button: no way to tell an upload in flight from a stuck one, on the one action of the app that routinely takes minutes.
What changed
Release editor (
/admin/release/new,/admin/release/:id/edit)<div>cards inside<tbody>(invalid nesting) and was duplicated by a second list below the table; it is now proper rows, and the lower list became the upload strip that starts the transfer.Dialogs
Shared pieces
components/ui/UploadProgress.tsx— the one bar every upload surface uses (clamped percentage, indeterminate mode when the browser reports no total, theme-consistent colours).uploadProgressConfiginservices/api/client.tsgives every upload endpoint the same optionalonProgress; wired into tracks, cover, additional artworks, samples and sample packs.formatBytesinutils/format.ts.Testing
npx vitest run— 257 tests pass across 38 suites. The one failing suite,src/pages/__tests__/Collab.test.tsx, fails to load for an environment reason (vite-plugin-node-polyfillsshim resolution against the improvised dependency install in this container) and fails identically on a clean checkout of this branch's base.src/components/ui/UploadProgress.test.tsx(4 tests) andsrc/pages/__tests__/AdminReleaseEditor.test.tsx(3 tests — the Upload button appears only with audio queued, an upload reports its transfer and creates the release first, and a failed file stays queued for a retry).UploadTracksModal.test.tsxwith a test that the bar follows reported bytes rather than the file count.npx tsc --noEmitandnpx vite buildboth clean.npm run lintcould not run in this container (its ESLint dependencies are not installed).Docs (
docs/adding-music.mdand the Italian twin) describe the new button and bars; CHANGELOG and both versions bumped (6.1.0 / webapp 2.17.0).🤖 Generated with Claude Code
https://claude.ai/code/session_01DtNRuZAEw5XA5HXBAJvs4x
Generated by Claude Code