mirror of
https://github.com/Crosstalk-Solutions/project-nomad.git
synced 2026-03-30 21:49:26 +02:00
Redesign the Active Downloads UI with four improvements: - Rich progress: BullMQ jobs now report downloadedBytes/totalBytes instead of just a percentage, showing "2.3 GB / 5.1 GB" instead of "78% / 100%" - Friendly names: dispatch title metadata from curated categories, Content Explorer library, Wikipedia selector, and map collections - Cancel button: Redis-based cross-process abort signal lets users cancel active downloads with file cleanup. Confirmation step prevents accidents. - Live status indicator: green pulsing dot with transfer speed for active downloads, orange stall warning after 60s of no data, gray dot for queued Backward compatible with in-flight jobs that have integer-only progress. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
28 lines
861 B
TypeScript
28 lines
861 B
TypeScript
import type { HttpContext } from '@adonisjs/core/http'
|
|
import { DownloadService } from '#services/download_service'
|
|
import { downloadJobsByFiletypeSchema } from '#validators/download'
|
|
import { inject } from '@adonisjs/core'
|
|
|
|
@inject()
|
|
export default class DownloadsController {
|
|
constructor(private downloadService: DownloadService) {}
|
|
|
|
async index() {
|
|
return this.downloadService.listDownloadJobs()
|
|
}
|
|
|
|
async filetype({ request }: HttpContext) {
|
|
const payload = await request.validateUsing(downloadJobsByFiletypeSchema)
|
|
return this.downloadService.listDownloadJobs(payload.params.filetype)
|
|
}
|
|
|
|
async removeJob({ params }: HttpContext) {
|
|
await this.downloadService.removeFailedJob(params.jobId)
|
|
return { success: true }
|
|
}
|
|
|
|
async cancelJob({ params }: HttpContext) {
|
|
return this.downloadService.cancelJob(params.jobId)
|
|
}
|
|
}
|