diff --git a/package.json b/package.json index 0f2593b..b4bc1de 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Miru", - "version": "3.8.3", + "version": "3.9.0", "author": "ThaUnknown_ ", "description": "Stream anime torrents, real-time with no waiting for downloads.", "main": "src/index.js", diff --git a/src/renderer/src/lib/Player/Player.svelte b/src/renderer/src/lib/Player/Player.svelte index 87da3ed..fe3719e 100644 --- a/src/renderer/src/lib/Player/Player.svelte +++ b/src/renderer/src/lib/Player/Player.svelte @@ -69,12 +69,20 @@ $: safeduration = (isFinite(duration) ? duration : currentTime) || 0 function checkAudio () { - if ('audioTracks' in HTMLVideoElement.prototype && !video.audioTracks.length) { - addToast({ - text: "This torrent's audio codec is not supported, try a different release by disabling Autoplay Torrents in RSS settings.", - title: 'Audio Codec Unsupported', - type: 'danger' - }) + if ('audioTracks' in HTMLVideoElement.prototype) { + if (!video.audioTracks.length) { + addToast({ + text: "This torrent's audio codec is not supported, try a different release by disabling Autoplay Torrents in RSS settings.", + title: 'Audio Codec Unsupported', + type: 'danger' + }) + } else if (video.audioTracks.length > 1) { + const preferredTrack = [...video.audioTracks].find(({ language }) => language === set.audioLanguage) + if (preferredTrack) return selectAudio(preferredTrack.id) + + const japaneseTrack = [...video.audioTracks].find(({ language }) => language === 'jpn') + if (japaneseTrack) return selectAudio(japaneseTrack.id) + } } } diff --git a/src/renderer/src/lib/Settings.svelte b/src/renderer/src/lib/Settings.svelte index 8a6c3bd..3677646 100644 --- a/src/renderer/src/lib/Settings.svelte +++ b/src/renderer/src/lib/Settings.svelte @@ -13,7 +13,9 @@ torrentDHT: false, torrentPeX: false, missingFont: true, - maxConns: 20 + maxConns: 20, + subtitleLanguage: 'eng', + audioLanguage: 'jpn' } localStorage.removeItem('relations') // TODO: remove export const set = { ...defaults, ...(JSON.parse(localStorage.getItem('settings')) || {}) } @@ -234,6 +236,67 @@ +
+
+
translate
+ Language Settings +
+
+
+
+ Preferred Subtitle Language +
+ +
+
+
+ Preferred Audio Language +
+ +
diff --git a/src/renderer/src/modules/subtitles.js b/src/renderer/src/modules/subtitles.js index 9b04e7c..98e2ce0 100644 --- a/src/renderer/src/modules/subtitles.js +++ b/src/renderer/src/modules/subtitles.js @@ -66,14 +66,6 @@ export default class Subtitles { if (!this.tracks[track.number]) { // overwrite webvtt or other header with custom one if (track.type !== 'ass') track.header = defaultHeader - if (!this.current) { - this.current = track.number - const styleMatches = track.header.match(stylesRx) - for (let i = 0; i < styleMatches.length; ++i) { - const style = styleMatches[i].replace('Style:', '').trim() - this._stylesMap[style] = i + 1 - } - } this.tracks[track.number] = [] this._tracksString[track.number] = new Set() this.headers[track.number] = track @@ -82,6 +74,23 @@ export default class Subtitles { } } this.initSubtitleRenderer() + const tracks = this.headers?.filter(t => t) + if (tracks?.length && set.subtitleLanguage) { + if (tracks.length === 1) { + this.selectCaptions(tracks[0].number) + } else { + const wantedTrack = tracks.find(({ language }) => { + if (language == null) language = 'eng' + return language === set.subtitleLanguage + }) + if (wantedTrack) return this.selectCaptions(wantedTrack.number) + + const englishTrack = tracks.find(({ language }) => language === null || language === 'eng') + if (englishTrack) return this.selectCaptions(englishTrack.number) + + this.selectCaptions(tracks[0].number) + } + } } } @@ -133,7 +142,7 @@ export default class Subtitles { if (!this.renderer) { const options = { video: this.video, - subContent: this.headers[this.current].header.slice(0, -1), + subContent: defaultHeader, fonts: this.fonts, fallbackFont: set.font?.name || 'roboto medium', availableFonts: { @@ -146,7 +155,6 @@ export default class Subtitles { options.availableFonts[set.font.name.toLowerCase()] = new Uint8Array(set.font.data) } this.renderer = new JASSUB(options) - this.selectCaptions(this.current) } }