mirror of
https://github.com/FreeTubeApp/FreeTube
synced 2024-11-23 10:21:59 +01:00
b3ff837468
* Migrate video player from video.js to shaka-player * Fix syntax error introduced during cleanup * Fix typo Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com> * Show bitrate in stats for Invidious legacy formats * Sort legacy formats by bitrate instead of qualityLabel * Use Invidious' newly added isPostLiveDvr property * Invidious correctly returns the ratelimit for DASH manifests now * Properly hide unsupported screenshot functionality outside of Electron * Sort captions in data initialiser * Update shaka-player to version 4.8.1 * Use textTrackLabelFormat configuration option * Switch to manifestPreprocessorTXml * Add support for VR videos that use equirectangular projection * The AV1 video streams work okay for vr, so allow list them too * Use woff2 (169 KB) Material Icons font instead of otf (390 KB) * Use material icons for custom player elements * Fix legacy formats exception * Update shaka-player to version 4.8.3 * Sort default quality values the same as in the player * Cleanup representations search in live subtitle fix * Slightly speed up sortCaptions * Fix setPositionState error when playback rate is 0 * Update shaka-player to version 4.8.4 * Fix playback rate changes getting overridden * Fix current chapter index not updating * Fix next video not automatically playing * Fix volume changes not propagating to the mute button * Reduce work done during UI config updates * Fix UI customizations not applying after UI config changes * Update shaka-player to version 4.8.5 * Replace non-reactive workaround with a Vue 3 friendly one * Fix error when all sponsorblock segments are set to do nothing * Add some guards to hopefully reduce errors during fast naviagtions * Make SponsorBlock failure non-fatal * Update shaka-player to version 4.8.6 * Update shaka-player to version 4.8.8 * Update shaka-player to version 4.9.0 * Update shaka-player to version 4.9.1 * Minor performance improvements * Update shaka-player to version 4.9.6 * Update shaka-player to version 4.9.9 * Fix sponsor block markers not showing up * Add some basic error messages for expired urls and ratelimits * Add some basic error messages for 403s * Cleanup code comments * Migrate player to composition API for better performance * Use reactive for stats instead of ref, as it never gets reassigned * Update shaka-player to version 4.10.0 * Fix i18n import in custom player components * Add chapter markers * Move shaka-player CSS import into the Vue file * Bump mpd_version from 5 to 7 * Apply suggestions from code review Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com> * Fix seeking with the arrow keys * Update shaka-player to version 4.10.3 * Truncate long video titles to the screen width in the full screen overlay * Fix mouse scroll handlers firing multiple times * Cleanup unneeded code * Update shaka-player to version 4.10.6 * Various small optimisations * Move skipped sponsorblock segement messages to the top right corner * Support prefers-reduced-transparency in overlays * Fix stylelint errors * Update shaka-player to version 4.10.7 * Update shaka-player to version 4.10.8 * Only use variants that are predicted to play smoothly * Only set preferredDecodingAttributes for DASH playback * Implement a custom audio track selector instead of using shaka-player's * Move skipped sponsorblock segement messages to the bottom right corner * Fix scrolling over the big play pause button not working * Update shaka-player to version 4.10.9 * Fix some type issues * Add support for secondary audio tracks * Downgrade shaka-player to fix subtitle alignment * Actually downgrade shaka-player * Fix Invidious API error * Update outdated comment * Fix multiple audio track detection for Invidious * Fix duplicate qualities with the Invidious API * Use vp9 streams if the Invidious instance is running a new enough version * When an error occurs with the thumbnails just log it * Include the video ID in the error logs * Gracefully handle the internet connection disappearing during playback * Show a message while buffering if it was caused by the internet connection disappearing * Fix the text color and RTL handling * Cleanup the Invidious DASH manifest in builds without the local API * Fix quality selection when switching from audio to DASH Unfortunately shaka-player will still override the quality selections with its ABR bug. * Update shaka-player to version 4.10.10 * Fix position and alignment for auto-generated subtitles * Update shaka-player to version 4.10.11 * Use the HLS manifests for live streams The live DASH manifests are currently unusable on both API backends as they return 403s after 1 minute of playback. Unfortunately this means we lose the ability to seek and use the audio formats for live streams. * Update shaka-player to version 4.10.12 --------- Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
203 lines
4.9 KiB
JavaScript
203 lines
4.9 KiB
JavaScript
process.env.NODE_ENV = 'development'
|
|
|
|
const electron = require('electron')
|
|
const webpack = require('webpack')
|
|
const WebpackDevServer = require('webpack-dev-server')
|
|
const kill = require('tree-kill')
|
|
|
|
const path = require('path')
|
|
const { spawn } = require('child_process')
|
|
|
|
const ProcessLocalesPlugin = require('./ProcessLocalesPlugin')
|
|
|
|
let electronProcess = null
|
|
let manualRestart = null
|
|
|
|
const remoteDebugging = process.argv.indexOf('--remote-debug') !== -1
|
|
const web = process.argv.indexOf('--web') !== -1
|
|
|
|
let mainConfig
|
|
let rendererConfig
|
|
let webConfig
|
|
let SHAKA_LOCALES_TO_BE_BUNDLED
|
|
|
|
if (!web) {
|
|
mainConfig = require('./webpack.main.config')
|
|
rendererConfig = require('./webpack.renderer.config')
|
|
|
|
SHAKA_LOCALES_TO_BE_BUNDLED = rendererConfig.SHAKA_LOCALES_TO_BE_BUNDLED
|
|
delete rendererConfig.SHAKA_LOCALES_TO_BE_BUNDLED
|
|
} else {
|
|
webConfig = require('./webpack.web.config')
|
|
}
|
|
|
|
if (remoteDebugging) {
|
|
// disable dvtools open in electron
|
|
process.env.RENDERER_REMOTE_DEBUGGING = true
|
|
}
|
|
|
|
// Define exit code for relaunch and set it in the environment
|
|
const relaunchExitCode = 69
|
|
process.env.FREETUBE_RELAUNCH_EXIT_CODE = relaunchExitCode
|
|
|
|
const port = 9080
|
|
|
|
async function killElectron(pid) {
|
|
return new Promise((resolve, reject) => {
|
|
if (pid) {
|
|
kill(pid, err => {
|
|
if (err) reject(err)
|
|
|
|
resolve()
|
|
})
|
|
} else {
|
|
resolve()
|
|
}
|
|
})
|
|
}
|
|
|
|
async function restartElectron() {
|
|
console.log('\nStarting electron...')
|
|
|
|
const { pid } = electronProcess || {}
|
|
await killElectron(pid)
|
|
|
|
electronProcess = spawn(electron, [
|
|
path.join(__dirname, '../dist/main.js'),
|
|
// '--enable-logging', // Enable to show logs from all electron processes
|
|
remoteDebugging ? '--inspect=9222' : '',
|
|
remoteDebugging ? '--remote-debugging-port=9223' : ''
|
|
],
|
|
// { stdio: 'inherit' } // required for logs to actually appear in the stdout
|
|
)
|
|
|
|
electronProcess.on('exit', (code, _) => {
|
|
if (code === relaunchExitCode) {
|
|
electronProcess = null
|
|
restartElectron()
|
|
return
|
|
}
|
|
|
|
if (!manualRestart) process.exit(0)
|
|
})
|
|
}
|
|
|
|
/**
|
|
* @param {import('webpack').Compiler} compiler
|
|
* @param {WebpackDevServer} devServer
|
|
*/
|
|
function setupNotifyLocaleUpdate(compiler, devServer) {
|
|
const notifyLocaleChange = (updatedLocales) => {
|
|
devServer.sendMessage(devServer.webSocketServer.clients, "freetube-locale-update", updatedLocales)
|
|
}
|
|
|
|
compiler.options.plugins
|
|
.filter(plugin => plugin instanceof ProcessLocalesPlugin)
|
|
.forEach((/** @type {ProcessLocalesPlugin} */plugin) => {
|
|
plugin.notifyLocaleChange = notifyLocaleChange
|
|
})
|
|
}
|
|
|
|
function startMain() {
|
|
const compiler = webpack(mainConfig)
|
|
const { name } = compiler
|
|
|
|
compiler.hooks.afterEmit.tap('afterEmit', async () => {
|
|
console.log(`\nCompiled ${name} script!`)
|
|
|
|
manualRestart = true
|
|
await restartElectron()
|
|
setTimeout(() => {
|
|
manualRestart = false
|
|
}, 2500)
|
|
|
|
console.log(`\nWatching file changes for ${name} script...`)
|
|
})
|
|
|
|
compiler.watch({
|
|
aggregateTimeout: 500,
|
|
},
|
|
err => {
|
|
if (err) console.error(err)
|
|
})
|
|
}
|
|
|
|
function startRenderer(callback) {
|
|
const compiler = webpack(rendererConfig)
|
|
const { name } = compiler
|
|
|
|
compiler.hooks.afterEmit.tap('afterEmit', () => {
|
|
console.log(`\nCompiled ${name} script!`)
|
|
console.log(`\nWatching file changes for ${name} script...`)
|
|
})
|
|
|
|
const server = new WebpackDevServer({
|
|
static: [
|
|
{
|
|
directory: path.resolve(__dirname, '..', 'static'),
|
|
watch: {
|
|
ignored: [
|
|
/(dashFiles|storyboards)\/*/,
|
|
'/**/.DS_Store',
|
|
'**/static/locales/*'
|
|
]
|
|
},
|
|
publicPath: '/static'
|
|
},
|
|
{
|
|
directory: path.resolve(__dirname, '..', 'node_modules', 'shaka-player', 'ui', 'locales'),
|
|
publicPath: '/static/shaka-player-locales',
|
|
watch: {
|
|
// Ignore everything that isn't one of the locales that we would bundle in production mode
|
|
ignored: `**/!(${SHAKA_LOCALES_TO_BE_BUNDLED.join('|')}).json`
|
|
}
|
|
}
|
|
],
|
|
port
|
|
}, compiler)
|
|
|
|
server.startCallback(err => {
|
|
if (err) console.error(err)
|
|
|
|
setupNotifyLocaleUpdate(compiler, server)
|
|
|
|
callback()
|
|
})
|
|
}
|
|
|
|
function startWeb () {
|
|
const compiler = webpack(webConfig)
|
|
const { name } = compiler
|
|
|
|
compiler.hooks.afterEmit.tap('afterEmit', () => {
|
|
console.log(`\nCompiled ${name} script!`)
|
|
console.log(`\nWatching file changes for ${name} script...`)
|
|
})
|
|
|
|
const server = new WebpackDevServer({
|
|
open: true,
|
|
static: {
|
|
directory: path.resolve(__dirname, '..', 'static'),
|
|
watch: {
|
|
ignored: [
|
|
/(dashFiles|storyboards)\/*/,
|
|
'/**/.DS_Store',
|
|
'**/static/locales/*'
|
|
]
|
|
}
|
|
},
|
|
port
|
|
}, compiler)
|
|
|
|
server.startCallback(err => {
|
|
if (err) console.error(err)
|
|
|
|
setupNotifyLocaleUpdate(compiler, server)
|
|
})
|
|
}
|
|
if (!web) {
|
|
startRenderer(startMain)
|
|
} else {
|
|
startWeb()
|
|
}
|