From 3eb53f690e84c0c2959883998b9e54e2eef4d585 Mon Sep 17 00:00:00 2001 From: stratuma Date: Fri, 21 Jun 2024 22:15:16 +0200 Subject: [PATCH] added max concurrent downloads selector --- components/Settings/Main.vue | 20 ++++++++++++++++++++ src/api/routes/service/service.service.ts | 16 ++++++++++++++-- src/electron/background.ts | 18 ++++++++++++++++++ src/electron/preload.ts | 4 +++- 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/components/Settings/Main.vue b/components/Settings/Main.vue index 44fcf1f..5ba6781 100644 --- a/components/Settings/Main.vue +++ b/components/Settings/Main.vue @@ -18,6 +18,10 @@ +
+
Max Concurrent Downloads
+ +
Default Dubs
@@ -115,6 +119,7 @@ const locales = ref>([ const selectedVideoQuality = ref() const selectedAudioQuality = ref() const selectedVideoFormat = ref() +const selectedMaxDownloads = ref() const toggleDub = (lang: { locale: string; name: string }) => { const index = dubLocales.value.findIndex((i) => i.locale === lang.locale) @@ -218,6 +223,18 @@ const selectOutputFormat = () => { } } +watch(selectedMaxDownloads, () => { + if (selectedMaxDownloads.value !== undefined && selectedMaxDownloads.value !== null) { + selectMaxDownloads() + } +}) + +const selectMaxDownloads = () => { + if (process.client) { + ;(window as any).myAPI.setDefaultMaxDownloads(selectedMaxDownloads.value) + } +} + onMounted(() => { ;(window as any).myAPI.getArray('defdubarray').then((result: any) => { dubLocales.value = JSON.parse(result) @@ -234,6 +251,9 @@ onMounted(() => { ;(window as any).myAPI.getDefaultOutputFormat().then((result: any) => { selectedVideoFormat.value = result }) + ;(window as any).myAPI.getDefaultMaxDownloads().then((result: any) => { + selectedMaxDownloads.value = result + }) }) diff --git a/src/api/routes/service/service.service.ts b/src/api/routes/service/service.service.ts index 3dbf4f1..0d1291f 100644 --- a/src/api/routes/service/service.service.ts +++ b/src/api/routes/service/service.service.ts @@ -269,14 +269,21 @@ export async function getDownloading(id: number) { // Define IsDownloading Count var isDownloading: number = 0 +var maxDownloading: number = 3 // Check Playlist every 2 seconds for new items async function checkPlaylists() { try { const eps = await Playlist.findAll({ where: { status: 'waiting' } }) + const maxd = await settings.get('DefaultMaxDownloads') as number + + if (maxd !== undefined && maxd !== null) { + maxDownloading = maxd + } + for (const e of eps) { - if (isDownloading < 3 && e.dataValues.status === 'waiting') { + if (isDownloading < maxDownloading && e.dataValues.status === 'waiting') { updatePlaylistByID(e.dataValues.id, 'preparing') isDownloading++ server.logger.log({ @@ -536,7 +543,12 @@ export async function downloadCrunchyrollPlaylist( var downloadDir: string = downloadPath - var isSeasonFolderActive = (await settings.get('seasonFolderActive')) as string + var isSeasonFolderActive = (await settings.get('seasonFolderActive')) as boolean + + if (isSeasonFolderActive === undefined || isSeasonFolderActive === null) { + await settings.set('seasonFolderActive', true) + isSeasonFolderActive = true + } if (isSeasonFolderActive) { var seasonFolderNaming = (await settings.get('SeasonTemp')) as string diff --git a/src/electron/background.ts b/src/electron/background.ts index 404457e..5f726dc 100644 --- a/src/electron/background.ts +++ b/src/electron/background.ts @@ -406,6 +406,24 @@ ipcMain.handle('dialog:getDefaultOutputFormatTemplate', async (events) => { return seTP }) +ipcMain.handle('dialog:setDefaultMaxDownloadsTemplate', async (events, max: number) => { + await settings.set('DefaultMaxDownloads', max) + + return max +}) + +ipcMain.handle('dialog:getDefaultMaxDownloadsTemplate', async (events) => { + const seTP = await settings.get('DefaultMaxDownloads') + + if (!seTP) { + await settings.set('DefaultMaxDownloads', 3) + + return 3 + } + + return seTP +}) + const openWindows = new Map() // Open New Window diff --git a/src/electron/preload.ts b/src/electron/preload.ts index fc969f1..8806b4d 100644 --- a/src/electron/preload.ts +++ b/src/electron/preload.ts @@ -32,5 +32,7 @@ contextBridge.exposeInMainWorld('myAPI', { setDefaultOutputFormat: (format: string) => ipcRenderer.invoke('dialog:setDefaultOutputFormatTemplate', format), getDefaultOutputFormat: () => ipcRenderer.invoke('dialog:getDefaultOutputFormatTemplate'), setDefaultCrunchyrollLanguage: (lang: string) => ipcRenderer.invoke('dialog:setDefaultCrunchyrollLanguageTemplate', lang), - getDefaultCrunchyrollLanguage: () => ipcRenderer.invoke('dialog:getDefaultCrunchyrollLanguageTemplate') + getDefaultCrunchyrollLanguage: () => ipcRenderer.invoke('dialog:getDefaultCrunchyrollLanguageTemplate'), + setDefaultMaxDownloads: (max: number) => ipcRenderer.invoke('dialog:setDefaultMaxDownloadsTemplate', max), + getDefaultMaxDownloads: () => ipcRenderer.invoke('dialog:getDefaultMaxDownloadsTemplate') })