feat(subscriptions): smarter-backfill UI — Start/Stop + state badge
Plan #693 (frontend). Backend landed in 96fffaf.
- sources store: setBackfill(runs) → startBackfill/stopBackfill ({action}).
- SubscriptionsTab: the deep-scan window.prompt for N runs becomes a
Start/Stop toggle keyed on source.backfill_state.
- SourceRow + SourceCard: the 'backfill (N×)' chip becomes a state badge —
Backfilling (chunk N) / Backfilled / Stalled — and the scan button
toggles between Backfill (mdi-magnify-scan) and Stop (mdi-stop).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -532,31 +532,23 @@ async function onCheck(source) {
|
||||
}
|
||||
}
|
||||
|
||||
// Plan #544: arm a source for backfill mode (gallery-dl walks the full
|
||||
// post history) for the next N download runs. Default 3 — enough budget
|
||||
// to finish a deep creator without re-prompting the operator across
|
||||
// timeout boundaries. The chip on the row reflects the remaining count.
|
||||
// Plan #693: toggle a run-until-done backfill. Starting walks the full post
|
||||
// history in time-boxed chunks across ticks until it reaches the bottom (the
|
||||
// row badge tracks progress / completion); stopping cancels back to tick mode.
|
||||
async function onBackfill(source) {
|
||||
const raw = globalThis.window?.prompt(
|
||||
`Deep scan "${source.artist_name} (${source.platform})" — walk full history for the next how many download runs? (1–10, default 3)`,
|
||||
'3',
|
||||
)
|
||||
if (raw == null) return
|
||||
const runs = parseInt(raw, 10)
|
||||
if (!Number.isFinite(runs) || runs < 1 || runs > 10) {
|
||||
toast({ text: 'Deep scan: runs must be 1–10', type: 'error' })
|
||||
return
|
||||
}
|
||||
const running = source.backfill_state === 'running'
|
||||
try {
|
||||
await store.setBackfill(source.id, runs, source.artist_id)
|
||||
toast({
|
||||
text: `Deep scan armed for ${runs} run${runs === 1 ? '' : 's'}`,
|
||||
type: 'success',
|
||||
})
|
||||
if (running) {
|
||||
await store.stopBackfill(source.id, source.artist_id)
|
||||
toast({ text: `Backfill stopped for ${source.artist_name}`, type: 'success' })
|
||||
} else {
|
||||
await store.startBackfill(source.id, source.artist_id)
|
||||
toast({ text: `Backfill started for ${source.artist_name}`, type: 'success' })
|
||||
}
|
||||
await store.loadAll()
|
||||
} catch (e) {
|
||||
toast({
|
||||
text: `Deep scan failed: ${e?.detail || e?.message || e}`,
|
||||
text: `Backfill ${running ? 'stop' : 'start'} failed: ${e?.detail || e?.message || e}`,
|
||||
type: 'error',
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user