From c15711aae83ff2d6c58ceb455442ca6785bb646c Mon Sep 17 00:00:00 2001 From: Mathias Rasmussen Date: Sat, 9 Jul 2016 03:26:30 +0200 Subject: [PATCH] Save selected subtitle (#702) --- renderer/controllers/playback-controller.js | 5 +++++ renderer/controllers/subtitles-controller.js | 15 +++++++++------ renderer/main.js | 1 + renderer/views/player.js | 9 +++++++++ 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/renderer/controllers/playback-controller.js b/renderer/controllers/playback-controller.js index de6c49fe..126fb5df 100644 --- a/renderer/controllers/playback-controller.js +++ b/renderer/controllers/playback-controller.js @@ -224,6 +224,11 @@ function openPlayerFromActiveTorrent (state, torrentSummary, index, timeout, cb) // if it's video, check for subtitles files that are done downloading dispatch('checkForSubtitles') + // enable previously selected subtitle track + if (fileSummary.selectedSubtitle) { + dispatch('addSubtitles', [fileSummary.selectedSubtitle], true) + } + ipcRenderer.send('wt-start-server', torrentSummary.infoHash, index) ipcRenderer.once('wt-server-' + torrentSummary.infoHash, (e, info) => { clearTimeout(timeout) diff --git a/renderer/controllers/subtitles-controller.js b/renderer/controllers/subtitles-controller.js index d95d7e98..e1cb1425 100644 --- a/renderer/controllers/subtitles-controller.js +++ b/renderer/controllers/subtitles-controller.js @@ -31,10 +31,11 @@ module.exports = class SubtitlesController { } addSubtitles (files, autoSelect) { + var state = this.state // Subtitles are only supported when playing video files - if (this.state.playing.type !== 'video') return + if (state.playing.type !== 'video') return if (files.length === 0) return - var subtitles = this.state.playing.subtitles + var subtitles = state.playing.subtitles // Read the files concurrently, then add all resulting subtitle tracks var tasks = files.map((file) => (cb) => loadSubtitle(file, cb)) @@ -44,15 +45,17 @@ module.exports = class SubtitlesController { for (var i = 0; i < tracks.length; i++) { // No dupes allowed var track = tracks[i] - if (subtitles.tracks.some( - (t) => track.filePath === t.filePath)) continue + var trackIndex = state.playing.subtitles.tracks + .findIndex((t) => track.filePath === t.filePath) // Add the track - subtitles.tracks.push(track) + if (trackIndex === -1) { + trackIndex = state.playing.subtitles.tracks.push(track) - 1 + } // If we're auto-selecting a track, try to find one in the user's language if (autoSelect && (i === 0 || isSystemLanguage(track.language))) { - subtitles.selectedIndex = subtitles.tracks.length - 1 + state.playing.subtitles.selectedIndex = trackIndex } } diff --git a/renderer/main.js b/renderer/main.js index b94c9875..2c29eaa6 100644 --- a/renderer/main.js +++ b/renderer/main.js @@ -199,6 +199,7 @@ const dispatchHandlers = { 'selectSubtitle': (index) => controllers.subtitles.selectSubtitle(index), 'toggleSubtitlesMenu': () => controllers.subtitles.toggleSubtitlesMenu(), 'checkForSubtitles': () => controllers.subtitles.checkForSubtitles(), + 'addSubtitles': (files, autoSelect) => controllers.subtitles.addSubtitles(files, autoSelect), // Local media: