diff --git a/Public API v1.yaml b/Public API v1.yaml index dbd362f..83c742e 100644 --- a/Public API v1.yaml +++ b/Public API v1.yaml @@ -905,7 +905,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessObject' + $ref: '#/components/schemas/RestartDownloadResponse' requestBody: content: application/json: @@ -1722,6 +1722,13 @@ components: properties: download: $ref: '#/components/schemas/Download' + RestartDownloadResponse: + allOf: + - $ref: '#/components/schemas/SuccessObject' + - type: object + properties: + new_download_uid: + type: string GetAllDownloadsRequest: type: object properties: diff --git a/backend/app.js b/backend/app.js index 1f1970b..36169d0 100644 --- a/backend/app.js +++ b/backend/app.js @@ -1765,8 +1765,8 @@ app.post('/api/resumeAllDownloads', optionalJwt, async (req, res) => { app.post('/api/restartDownload', optionalJwt, async (req, res) => { const download_uid = req.body.download_uid; - const success = await downloader_api.restartDownload(download_uid); - res.send({success: success}); + const new_download = await downloader_api.restartDownload(download_uid); + res.send({success: !!new_download, new_download_uid: new_download ? new_download['uid'] : null}); }); app.post('/api/cancelDownload', optionalJwt, async (req, res) => { diff --git a/backend/downloader.js b/backend/downloader.js index 80ecaf4..0b62218 100644 --- a/backend/downloader.js +++ b/backend/downloader.js @@ -86,10 +86,10 @@ exports.resumeDownload = async (download_uid) => { exports.restartDownload = async (download_uid) => { const download = await db_api.getRecord('download_queue', {uid: download_uid}); await exports.clearDownload(download_uid); - const success = !!(await exports.createDownload(download['url'], download['type'], download['options'], download['user_uid'])); + const new_download = await exports.createDownload(download['url'], download['type'], download['options'], download['user_uid']); should_check_downloads = true; - return success; + return new_download; } exports.cancelDownload = async (download_uid) => { diff --git a/src/api-types/index.ts b/src/api-types/index.ts index 7826604..5da5b0a 100644 --- a/src/api-types/index.ts +++ b/src/api-types/index.ts @@ -90,6 +90,7 @@ export { NotificationType } from './models/NotificationType'; export type { Playlist } from './models/Playlist'; export type { RegisterRequest } from './models/RegisterRequest'; export type { RegisterResponse } from './models/RegisterResponse'; +export type { RestartDownloadResponse } from './models/RestartDownloadResponse'; export type { RestoreDBBackupRequest } from './models/RestoreDBBackupRequest'; export { Schedule } from './models/Schedule'; export type { SetConfigRequest } from './models/SetConfigRequest'; diff --git a/src/api-types/models/RestartDownloadResponse.ts b/src/api-types/models/RestartDownloadResponse.ts new file mode 100644 index 0000000..1cb0233 --- /dev/null +++ b/src/api-types/models/RestartDownloadResponse.ts @@ -0,0 +1,9 @@ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { SuccessObject } from './SuccessObject'; + +export type RestartDownloadResponse = (SuccessObject & { +new_download_uid?: string; +}); \ No newline at end of file diff --git a/src/app/components/downloads/downloads.component.ts b/src/app/components/downloads/downloads.component.ts index 45f1e7a..c0fde45 100644 --- a/src/app/components/downloads/downloads.component.ts +++ b/src/app/components/downloads/downloads.component.ts @@ -41,7 +41,7 @@ import { Download } from 'api-types'; }) export class DownloadsComponent implements OnInit, OnDestroy { - @Input() uids = null; + @Input() uids: string[] = null; downloads_check_interval = 1000; downloads = []; @@ -200,6 +200,10 @@ export class DownloadsComponent implements OnInit, OnDestroy { this.postsService.restartDownload(download_uid).subscribe(res => { if (!res['success']) { this.postsService.openSnackBar($localize`Failed to restart download! See server logs for more info.`); + } else { + if (this.uids && res['new_download_uid']) { + this.uids.push(res['new_download_uid']); + } } }); } diff --git a/src/app/posts.services.ts b/src/app/posts.services.ts index c42f6a0..d02463e 100644 --- a/src/app/posts.services.ts +++ b/src/app/posts.services.ts @@ -112,7 +112,8 @@ import { GetArchivesResponse, ImportArchiveRequest, Archive, - Subscription + Subscription, + RestartDownloadResponse } from '../api-types'; import { isoLangs } from './settings/locales_list'; import { Title } from '@angular/platform-browser'; @@ -621,7 +622,7 @@ export class PostsService implements CanActivate { restartDownload(download_uid: string) { const body: GetDownloadRequest = {download_uid: download_uid}; - return this.http.post(this.path + 'restartDownload', body, this.httpOptions); + return this.http.post(this.path + 'restartDownload', body, this.httpOptions); } cancelDownload(download_uid: string) {