diff --git a/plugins/captions-selector/back.js b/plugins/captions-selector/back.js index de53d85a..59bb3802 100644 --- a/plugins/captions-selector/back.js +++ b/plugins/captions-selector/back.js @@ -1,15 +1,21 @@ -const { ipcMain, dialog } = require("electron"); +const { ipcMain } = require("electron"); -module.exports = () => { - ipcMain.handle('captionsSelector', async (_, captionLabels, currentIndex) => { - return await dialog.showMessageBox({ - type: "question", - buttons: captionLabels, - defaultId: currentIndex, - title: "Choose Caption", - message: "Choose Caption:", - detail: `Current Caption: ${captionLabels[currentIndex]}`, - cancelId: -1 - }) - }) +const prompt = require("custom-electron-prompt"); +const promptOptions = require("../../providers/prompt-options"); + +module.exports = (win) => { + ipcMain.handle("captionsSelector", async (_, captionLabels, currentIndex) => { + return await prompt( + { + title: "Choose Caption", + label: `Current Caption: ${captionLabels[currentIndex] || "None"}`, + type: "select", + value: currentIndex, + selectOptions: captionLabels, + resizable: true, + ...promptOptions(), + }, + win + ); + }); }; diff --git a/plugins/captions-selector/front.js b/plugins/captions-selector/front.js index 275d7803..6ed83d90 100644 --- a/plugins/captions-selector/front.js +++ b/plugins/captions-selector/front.js @@ -28,33 +28,33 @@ function setup(event, options) { $(".right-controls-buttons").append(captionsSettingsButton); - captionsSettingsButton.onclick = function chooseQuality() { + captionsSettingsButton.onclick = async () => { api.loadModule("captions"); const captionTrackList = api.getOption("captions", "tracklist"); if (captionTrackList?.length) { const currentCaptionTrack = api.getOption("captions", "track"); - const currentIndex = captionTrackList.indexOf(captionTrackList.find(track => track.languageCode === currentCaptionTrack.languageCode)); + let currentIndex = !currentCaptionTrack ? + null : + captionTrackList.indexOf(captionTrackList.find(track => track.languageCode === currentCaptionTrack.languageCode)); const captionLabels = [ ...captionTrackList.map(track => track.displayName), 'None' ]; - ipcRenderer.invoke('captionsSelector', captionLabels, currentIndex).then(promise => { - if (promise.response === -1) return; + currentIndex = await ipcRenderer.invoke('captionsSelector', captionLabels, currentIndex) + if (currentIndex === null) return; - const newCaptions = captionTrackList[promise.response]; - if (newCaptions) { - api.loadModule("captions"); - api.setOption("captions", "track", { languageCode: newCaptions.languageCode }); - } else { - api.unloadModule("captions"); - } + const newCaptions = captionTrackList[currentIndex]; + if (newCaptions) { + api.setOption("captions", "track", { languageCode: newCaptions.languageCode }); + } else { + api.setOption("captions", "track", {}); + } - setTimeout(() => api.playVideo()); - }); + setTimeout(() => api.playVideo()); } } }