* 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>
77 lines
2.1 KiB
JavaScript
77 lines
2.1 KiB
JavaScript
import shaka from 'shaka-player'
|
|
|
|
import i18n from '../../../i18n/index'
|
|
|
|
export class StatsButton extends shaka.ui.Element {
|
|
/**
|
|
* @param {boolean} showStats
|
|
* @param {EventTarget} events
|
|
* @param {HTMLElement} parent
|
|
* @param {shaka.ui.Controls} controls
|
|
*/
|
|
constructor(showStats, events, parent, controls) {
|
|
super(parent, controls)
|
|
|
|
/** @private */
|
|
this.button_ = document.createElement('button')
|
|
this.button_.classList.add('stats-button')
|
|
|
|
/** @private */
|
|
this.icon_ = document.createElement('i')
|
|
this.icon_.classList.add('material-icons-round')
|
|
this.icon_.textContent = 'insert_chart_outlined'
|
|
|
|
this.button_.appendChild(this.icon_)
|
|
|
|
const label = document.createElement('label')
|
|
label.classList.add('shaka-overflow-button-label')
|
|
|
|
/** @private */
|
|
this.nameSpan_ = document.createElement('span')
|
|
label.appendChild(this.nameSpan_)
|
|
|
|
/** @private */
|
|
this.currentState_ = document.createElement('span')
|
|
this.currentState_.classList.add('shaka-current-selection-span')
|
|
label.appendChild(this.currentState_)
|
|
|
|
this.button_.appendChild(label)
|
|
|
|
this.parent.appendChild(this.button_)
|
|
|
|
/** @private */
|
|
this.showStats_ = showStats
|
|
|
|
// listeners
|
|
|
|
this.eventManager.listen(this.button_, 'click', () => {
|
|
events.dispatchEvent(new CustomEvent('setStatsVisibility', {
|
|
detail: !this.showStats_
|
|
}))
|
|
})
|
|
|
|
this.eventManager.listen(events, 'setStatsVisibility', (/** @type {CustomEvent} */ event) => {
|
|
this.showStats_ = event.detail
|
|
|
|
this.updateLocalisedStrings_()
|
|
})
|
|
|
|
this.eventManager.listen(events, 'localeChanged', () => {
|
|
this.updateLocalisedStrings_()
|
|
})
|
|
|
|
this.updateLocalisedStrings_()
|
|
}
|
|
|
|
/** @private */
|
|
updateLocalisedStrings_() {
|
|
this.nameSpan_.textContent = i18n.t('Video.Player.Stats.Stats')
|
|
|
|
this.icon_.textContent = this.showStats_ ? 'insert_chart' : 'insert_chart_outlined'
|
|
|
|
this.currentState_.textContent = this.localization.resolve(this.showStats_ ? 'ON' : 'OFF')
|
|
|
|
this.button_.ariaLabel = this.showStats_ ? i18n.t('Video.Player.Hide Stats') : i18n.t('Video.Player.Show Stats')
|
|
}
|
|
}
|