import path from 'path'; import { createWriteStream } from 'fs-extra'; import { container } from '../../core/container'; import { IDialog } from '../dialog/i-dialog'; import { II18nTranslator } from '../i18n/i-i18n-translator'; import { answer } from '../ipc/annotations/answer'; import { INhentaiApi } from './i-nhentai-api'; import { IFavorite } from './nhentai'; export class NhentaiIpcController implements IIpcController { private readonly nhentaiApi: INhentaiApi; private readonly translator: II18nTranslator; private readonly dialog: IDialog; private constructor(nhentaiApi: INhentaiApi, translator: II18nTranslator, dialog: IDialog) { this.nhentaiApi = nhentaiApi; this.translator = translator; this.dialog = dialog; } @answer(IpcChannel.NHENTAI_SAVE_FAVORITES) public async nhentaiSaveFavorites(): Promise { const result = await this.dialog.selectFolder({ title: this.translator.t('Select torrent file save location'), }); if (result.canceled) { return; } const favoritesStream = await this.nhentaiApi.getFavorites(); return new Promise((resolve) => { favoritesStream.on('data', (favorite: IFavorite) => { const writable = createWriteStream(path.resolve(result.filePaths[0], favorite.name)); favorite.torrentFile.pipe(writable); }); favoritesStream.once('close', resolve); }); } public get(): NhentaiIpcController { const nhentaiApi: INhentaiApi = container.get('nhentai-api'); const translator: II18nTranslator = container.get('i18n-translator'); const dialog: IDialog = container.get('dialog'); return new NhentaiIpcController(nhentaiApi, translator, dialog); } }