diff --git a/src/main/modules/app-window/i-url-app-window.d.ts b/src/main/modules/app-window/i-url-app-window.d.ts index 8a2c7fb..136e69e 100644 --- a/src/main/modules/app-window/i-url-app-window.d.ts +++ b/src/main/modules/app-window/i-url-app-window.d.ts @@ -2,5 +2,7 @@ import { LoadURLOptions } from 'electron'; import { IAppWindow } from './i-app-window'; export interface IUrlAppWindow extends IAppWindow { + downloadUrlSafe(url: string, savePath: string, options?: LoadURLOptions): Promise; + loadUrlSafe(url: string, options?: LoadURLOptions): Promise; } diff --git a/src/main/modules/app-window/url-app-window.ts b/src/main/modules/app-window/url-app-window.ts index 0b730f1..aef7aa0 100644 --- a/src/main/modules/app-window/url-app-window.ts +++ b/src/main/modules/app-window/url-app-window.ts @@ -28,6 +28,33 @@ export abstract class UrlAppWindow extends AppWindow implements IUrlAppWindow { this.loadOptions = loadOptions; } + public downloadUrlSafe(url: string, savePath: string, options?: LoadURLOptions): Promise { + return new Promise((resolve, reject) => { + if (!this._window) { + throw new WindowClosedError(); + } + this._window.webContents.session.once('will-download', (event, item) => { + item.setSavePath(savePath); + item.once('done', (doneEvent, state) => { + switch (state) { + case 'completed': + resolve(); + break; + case 'cancelled': + case 'interrupted': + default: + reject(new Error(state)); + break; + } + }); + item.on('updated', () => { + item.resume(); + }); + }); + void this.loadUrlSafe(url, options); + }); + } + public async loadUrlSafe(url: string, options?: LoadURLOptions): Promise { if (!this._window) { throw new WindowClosedError(); diff --git a/src/main/modules/nhentai/nhentai-app-window.ts b/src/main/modules/nhentai/nhentai-app-window.ts index ff2a87c..acb4d8f 100644 --- a/src/main/modules/nhentai/nhentai-app-window.ts +++ b/src/main/modules/nhentai/nhentai-app-window.ts @@ -190,30 +190,7 @@ export class NhentaiAppWindow extends UrlAppWindow implements INhentaiAppWindow const downloadLink: string = (await this._window.webContents.executeJavaScript( `document.getElementById('${downloadLinkId}').href` )) as string; - await new Promise((resolve, reject) => { - if (!this._window) { - throw new WindowClosedError(); - } - this._window.webContents.session.once('will-download', (event, item) => { - item.setSavePath(filePath); - item.once('done', (doneEvent, state) => { - switch (state) { - case 'completed': - resolve(); - break; - case 'cancelled': - case 'interrupted': - default: - reject(new Error(state)); - break; - } - }); - item.on('updated', () => { - item.resume(); - }); - }); - void this.loadUrlSafe(downloadLink); - }); + await this.downloadUrlSafe(downloadLink, filePath); const readable = createReadStream(filePath, { emitClose: true });