From f5ca5b14ccb95d86e020d76057eb353640b90fd2 Mon Sep 17 00:00:00 2001 From: vineyardbovines Date: Tue, 4 Aug 2026 09:32:23 -0400 Subject: [PATCH] Align video progress with backend job progress --- src/view/com/composer/Composer.tsx | 5 +---- src/view/com/composer/state/videoProgress.test.ts | 15 ++++++++------- src/view/com/composer/state/videoProgress.ts | 10 +++++----- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx index bba5c2a37f..fd7491c51f 100644 --- a/src/view/com/composer/Composer.tsx +++ b/src/view/com/composer/Composer.tsx @@ -2675,10 +2675,7 @@ function VideoUploadToolbar({state}: {state: VideoState}) { const processingProgress = state.status === 'processing' ? state.jobStatus?.progress : undefined const shouldRotate = - state.status === 'processing' && - (processingProgress === undefined || - processingProgress <= 0 || - processingProgress >= 100) + state.status === 'processing' && processingProgress === undefined let wheelProgress = progress const rotate = useDerivedValue(() => { diff --git a/src/view/com/composer/state/videoProgress.test.ts b/src/view/com/composer/state/videoProgress.test.ts index 6e7666d9e2..3ca703131c 100644 --- a/src/view/com/composer/state/videoProgress.test.ts +++ b/src/view/com/composer/state/videoProgress.test.ts @@ -3,16 +3,17 @@ import {advanceVideoProgress, videoProgressForPhase} from './videoProgress' describe('videoProgressForPhase', () => { it('maps each phase onto one continuous timeline', () => { expect(videoProgressForPhase('compressing', 0)).toBe(0) - expect(videoProgressForPhase('compressing', 1)).toBe(0.4) - expect(videoProgressForPhase('uploading', 0)).toBe(0.4) - expect(videoProgressForPhase('uploading', 1)).toBe(0.55) - expect(videoProgressForPhase('processing', 0)).toBe(0.55) - expect(videoProgressForPhase('processing', 1)).toBe(0.95) + expect(videoProgressForPhase('compressing', 1)).toBe(0.3) + expect(videoProgressForPhase('uploading', 0)).toBe(0.3) + expect(videoProgressForPhase('uploading', 1)).toBe(0.5) + expect(videoProgressForPhase('processing', 0)).toBe(0.5) + expect(videoProgressForPhase('processing', 0.5)).toBe(0.75) + expect(videoProgressForPhase('processing', 1)).toBe(1) }) it('clamps invalid phase progress', () => { - expect(videoProgressForPhase('uploading', -1)).toBe(0.4) - expect(videoProgressForPhase('uploading', 2)).toBe(0.55) + expect(videoProgressForPhase('uploading', -1)).toBe(0.3) + expect(videoProgressForPhase('uploading', 2)).toBe(0.5) }) }) diff --git a/src/view/com/composer/state/videoProgress.ts b/src/view/com/composer/state/videoProgress.ts index e6d4746302..ba63bb5ef7 100644 --- a/src/view/com/composer/state/videoProgress.ts +++ b/src/view/com/composer/state/videoProgress.ts @@ -1,12 +1,12 @@ export type VideoProgressPhase = 'compressing' | 'uploading' | 'processing' // Keep progress monotonic across the full client pipeline instead of showing -// three separate 0 -> 100 cycles. Processing stops short of complete because -// a server-reported 100% can precede the completed blob becoming available. +// three separate 0 -> 100 cycles. Backend processing progress covers the +// entire server-side job, so it maps directly onto the final half. const PHASE_RANGES: Record = { - compressing: [0, 0.4], - uploading: [0.4, 0.55], - processing: [0.55, 0.95], + compressing: [0, 0.3], + uploading: [0.3, 0.5], + processing: [0.5, 1], } export function videoProgressForPhase(