diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 4d5c0e0..445affd 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -128,7 +128,8 @@ const RekordboxReader: React.FC = () => { totalDuration, loadNextPage, searchSongs, - searchQuery + searchQuery, + refresh } = usePaginatedSongs({ pageSize: 100, playlistName: currentPlaylist }); // Export library to XML @@ -660,7 +661,12 @@ const RekordboxReader: React.FC = () => { /> {/* Background Job Progress */} - + { + // Light refresh to pick up newly set hasS3File flags promptly + refresh(); + }} + /> ); }; diff --git a/packages/frontend/src/components/BackgroundJobProgress.tsx b/packages/frontend/src/components/BackgroundJobProgress.tsx index a648f69..0f794be 100644 --- a/packages/frontend/src/components/BackgroundJobProgress.tsx +++ b/packages/frontend/src/components/BackgroundJobProgress.tsx @@ -45,12 +45,15 @@ interface BackgroundJobProgressProps { jobId?: string; onJobComplete?: (result: any) => void; onJobError?: (error: string) => void; + // Called on each polling tick while an S3 sync job is running + onTickWhileS3Sync?: () => void; } export const BackgroundJobProgress: React.FC = ({ jobId, onJobComplete, onJobError, + onTickWhileS3Sync, }) => { const [jobs, setJobs] = useState([]); const [loading, setLoading] = useState(false); @@ -100,7 +103,8 @@ export const BackgroundJobProgress: React.FC = ({ intervalRef.current = setInterval(() => { // Update all active jobs - const activeJobIds = jobs.filter(job => job.status === 'running').map(job => job.jobId); + const activeJobs = jobs.filter(job => job.status === 'running'); + const activeJobIds = activeJobs.map(job => job.jobId); activeJobIds.forEach(jobId => { updateJobProgress(jobId); }); @@ -109,6 +113,11 @@ export const BackgroundJobProgress: React.FC = ({ if (jobId) { updateJobProgress(jobId); } + + // Notify consumer while an S3 sync is running (to refresh song list, etc.) + if (onTickWhileS3Sync && activeJobs.some(j => j.type === 's3-sync')) { + onTickWhileS3Sync(); + } }, 2000); // Poll every 2 seconds for less frequent updates };