mirror of
https://github.com/A-Star100/simpliplay-desktop.git
synced 2025-09-18 14:42:16 +00:00
Update player.js
This commit is contained in:
parent
2176853993
commit
6e4f9d0459
@ -66,9 +66,13 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
async function addSubtitles(url) {
|
async function addSubtitles(url) {
|
||||||
// Remove existing tracks
|
// Remove existing tracks and revoke any previous blob URLs
|
||||||
const existingTracks = mediaPlayer.getElementsByTagName('track');
|
const existingTracks = mediaPlayer.getElementsByTagName('track');
|
||||||
for (let track of existingTracks) track.remove();
|
for (let i = existingTracks.length - 1; i >= 0; i--) {
|
||||||
|
const track = existingTracks[i];
|
||||||
|
if (track.src.startsWith('blob:')) URL.revokeObjectURL(track.src);
|
||||||
|
track.remove();
|
||||||
|
}
|
||||||
|
|
||||||
// Fetch subtitle content
|
// Fetch subtitle content
|
||||||
let text = '';
|
let text = '';
|
||||||
@ -84,26 +88,28 @@ async function addSubtitles(url) {
|
|||||||
const firstLine = text.split(/\r?\n/)[0].trim();
|
const firstLine = text.split(/\r?\n/)[0].trim();
|
||||||
const format = firstLine.startsWith('WEBVTT') || url.toLowerCase().endsWith('.vtt') ? 'vtt' : 'srt';
|
const format = firstLine.startsWith('WEBVTT') || url.toLowerCase().endsWith('.vtt') ? 'vtt' : 'srt';
|
||||||
|
|
||||||
// Convert SRT → VTT if needed
|
// Determine track source
|
||||||
|
let trackSrc = url;
|
||||||
if (format === 'srt') {
|
if (format === 'srt') {
|
||||||
|
// Convert SRT → VTT
|
||||||
text = 'WEBVTT\n\n' + text
|
text = 'WEBVTT\n\n' + text
|
||||||
.replace(/\r+/g, '')
|
.replace(/\r+/g, '')
|
||||||
.replace(/^\s+|\s+$/g, '')
|
.replace(/^\s+|\s+$/g, '')
|
||||||
.split('\n')
|
.split('\n')
|
||||||
.map(line => line.replace(/(\d+):(\d+):(\d+),(\d+)/g, '$1:$2:$3.$4'))
|
.map(line => line.replace(/(\d+):(\d+):(\d+),(\d+)/g, '$1:$2:$3.$4'))
|
||||||
.join('\n');
|
.join('\n');
|
||||||
}
|
|
||||||
|
|
||||||
// Create Blob URL
|
// Create Blob URL for converted subtitles
|
||||||
const blob = new Blob([text], { type: 'text/vtt' });
|
const blob = new Blob([text], { type: 'text/vtt' });
|
||||||
const blobUrl = URL.createObjectURL(blob);
|
trackSrc = URL.createObjectURL(blob);
|
||||||
|
}
|
||||||
|
|
||||||
// Create and append track
|
// Create and append track
|
||||||
const track = document.createElement('track');
|
const track = document.createElement('track');
|
||||||
track.kind = 'subtitles';
|
track.kind = 'subtitles';
|
||||||
track.label = 'English';
|
track.label = 'English';
|
||||||
track.srclang = 'en';
|
track.srclang = 'en';
|
||||||
track.src = blobUrl;
|
track.src = trackSrc;
|
||||||
track.default = true;
|
track.default = true;
|
||||||
mediaPlayer.appendChild(track);
|
mediaPlayer.appendChild(track);
|
||||||
|
|
||||||
@ -111,10 +117,11 @@ async function addSubtitles(url) {
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
for (let t of mediaPlayer.textTracks) t.mode = 'disabled';
|
for (let t of mediaPlayer.textTracks) t.mode = 'disabled';
|
||||||
track.track.mode = 'showing';
|
track.track.mode = 'showing';
|
||||||
}, 50); // slight delay ensures the browser registers it
|
}, 50);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*// Handle submit subtitle URL
|
/*// Handle submit subtitle URL
|
||||||
function clearSubtitles() {
|
function clearSubtitles() {
|
||||||
const tracks = mediaPlayer.getElementsByTagName('track');
|
const tracks = mediaPlayer.getElementsByTagName('track');
|
||||||
@ -123,14 +130,18 @@ function clearSubtitles() {
|
|||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
// Handle submit subtitle URL
|
|
||||||
function clearSubtitles() {
|
function clearSubtitles() {
|
||||||
const tracks = mediaPlayer.getElementsByTagName('track');
|
const tracks = mediaPlayer.getElementsByTagName('track');
|
||||||
for (let i = tracks.length - 1; i >= 0; i--) {
|
for (let i = tracks.length - 1; i >= 0; i--) {
|
||||||
tracks[i].remove();
|
const track = tracks[i];
|
||||||
|
if (track.src.startsWith('blob:')) {
|
||||||
|
URL.revokeObjectURL(track.src); // free memory leaks from SRT to VTT converted subtitles
|
||||||
|
}
|
||||||
|
track.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Use this function when a new video is loaded
|
// Use this function when a new video is loaded
|
||||||
|
|
||||||
submitSubtitlesBtn.addEventListener('click', () => {
|
submitSubtitlesBtn.addEventListener('click', () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user