perf: parallelize checkAllSources with Promise.allSettled

This commit is contained in:
2026-03-18 23:36:33 -04:00
parent 0f2901ef58
commit 4eac527f0f
+12 -12
View File
@@ -37,7 +37,7 @@
<v-icon>mdi-alert-circle</v-icon>
</v-avatar>
<div>
<div class="text-h4">{{ stats?.failed || 0 }}</div>
<div class="text-h4">{{ stats?.active_failed || 0 }}</div>
<div class="text-caption">Failed Downloads</div>
</div>
</v-card-text>
@@ -354,7 +354,7 @@ const sourcesWithErrors = computed(() => {
return Array.from(sourceMap.values()).slice(0, 5)
})
const failedCount = computed(() => stats.value?.failed || 0)
const failedCount = computed(() => stats.value?.active_failed || 0)
const activeDownloadsCount = computed(() =>
(stats.value?.queued || 0) + (stats.value?.running || 0)
)
@@ -461,16 +461,16 @@ async function checkAllSources() {
checkingAll.value = true
try {
const enabledSources = sourcesStore.sources.filter(s => s.enabled)
let queued = 0
for (const source of enabledSources) {
try {
await sourcesStore.triggerCheck(source.id)
queued++
} catch (e) {
console.error(`Failed to queue ${source.id}:`, e)
}
const results = await Promise.allSettled(
enabledSources.map(source => sourcesStore.triggerCheck(source.id))
)
const queued = results.filter(r => r.status === 'fulfilled').length
const failed = results.filter(r => r.status === 'rejected').length
if (failed > 0) {
notifications.success(`Queued ${queued} sources (${failed} failed to queue)`)
} else {
notifications.success(`Queued checks for ${queued} sources`)
}
notifications.success(`Queued checks for ${queued} sources`)
await fetchActiveDownloads()
await downloadsStore.fetchStats()
} catch (error) {
@@ -483,7 +483,7 @@ async function checkAllSources() {
async function retryAllFailed() {
retryingAll.value = true
try {
const response = await downloadsStore.fetchDownloads({ status: 'failed', per_page: 100 })
const response = await downloadsStore.fetchDownloads({ status: 'failed', per_page: 100, exclude_superseded: true })
const failed = response.items
let retried = 0
for (const dl of failed) {