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
};