mirror of https://github.com/FreeTubeApp/FreeTube
Merge a75d8d7e4e
into a94910df27
This commit is contained in:
commit
a5e3a52b76
|
@ -1,8 +1,34 @@
|
|||
import * as db from '../index'
|
||||
|
||||
/* Mapping of older settings whose variable names have changed to their newer values */
|
||||
const outdatedSettings = {
|
||||
defaultTheatreMode: 'defaultTheaterMode',
|
||||
playNextVideo: 'enableAutoplay',
|
||||
autoplayPlaylists: 'enablePlaylistAutoplay',
|
||||
hideUnsubscribeButton: 'hideSubscribeButton',
|
||||
autoplayVideos: 'startVideosAutomatically'
|
||||
}
|
||||
|
||||
class Settings {
|
||||
static find() {
|
||||
return db.settings.findAsync({ _id: { $ne: 'bounds' } })
|
||||
static async find() {
|
||||
const settings = await db.settings.findAsync({ _id: { $ne: 'bounds' } })
|
||||
// Apply existing values of outdated setting variables in the DB to their newer equivalents,
|
||||
// then delete those older settings
|
||||
const parseableSettings = {}
|
||||
settings.forEach(({ _id, value }) => { parseableSettings[_id] = value })
|
||||
for (const outdatedSetting of Object.keys(outdatedSettings)) {
|
||||
const outdatedSettingInDB = parseableSettings[outdatedSetting]
|
||||
if (!outdatedSettingInDB) {
|
||||
return
|
||||
}
|
||||
|
||||
const newSettingId = outdatedSettings[outdatedSetting]
|
||||
const outdatedSettingValue = outdatedSettingInDB[1]
|
||||
await this.upsert(newSettingId, outdatedSettingValue)
|
||||
await this.delete(outdatedSetting)
|
||||
}
|
||||
|
||||
return settings
|
||||
}
|
||||
|
||||
static upsert(_id, value) {
|
||||
|
@ -13,6 +39,10 @@ class Settings {
|
|||
return db.settings.compactDatafileAsync()
|
||||
}
|
||||
|
||||
static delete(setting) {
|
||||
return db.settings.removeAsync({ _id: setting })
|
||||
}
|
||||
|
||||
// ******************** //
|
||||
// Unique Electron main process handlers
|
||||
static _findAppReadyRelatedSettings() {
|
||||
|
|
|
@ -15,6 +15,13 @@ class Settings {
|
|||
{ action: DBActions.GENERAL.UPSERT, data: { _id, value } }
|
||||
)
|
||||
}
|
||||
|
||||
static delete(setting) {
|
||||
return ipcRenderer.invoke(
|
||||
IpcChannels.DB_SETTINGS,
|
||||
{ action: DBActions.GENERAL.DELETE, data: setting }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
class History {
|
||||
|
|
|
@ -18,6 +18,10 @@ class Settings {
|
|||
static upsert(_id, value) {
|
||||
return baseHandlers.settings.upsert(_id, value)
|
||||
}
|
||||
|
||||
static delete(setting) {
|
||||
return baseHandlers.settings.delete(setting)
|
||||
}
|
||||
}
|
||||
|
||||
class History {
|
||||
|
|
|
@ -925,7 +925,14 @@ function runApp() {
|
|||
// Do nothing for unmatched settings
|
||||
}
|
||||
return null
|
||||
|
||||
case DBActions.GENERAL.DELETE:
|
||||
await baseHandlers.settings.delete(data)
|
||||
syncOtherWindows(
|
||||
IpcChannels.SYNC_SETTINGS,
|
||||
event,
|
||||
{ event: SyncEvents.GENERAL.DELETE, data }
|
||||
)
|
||||
return null
|
||||
default:
|
||||
// eslint-disable-next-line no-throw-literal
|
||||
throw 'invalid settings db action'
|
||||
|
|
|
@ -137,7 +137,7 @@ export default defineComponent({
|
|||
methods: {
|
||||
handleHideRecommendedVideos: function (value) {
|
||||
if (value) {
|
||||
this.updatePlayNextVideo(false)
|
||||
this.updateEnableAutoplay(false)
|
||||
}
|
||||
|
||||
this.updateHideRecommendedVideos(value)
|
||||
|
@ -202,8 +202,8 @@ export default defineComponent({
|
|||
'updateHidePlaylists',
|
||||
'updateHideLiveChat',
|
||||
'updateHideActiveSubscriptions',
|
||||
'updatePlayNextVideo',
|
||||
'updateDefaultTheatreMode',
|
||||
'updateEnableAutoplay',
|
||||
'updateDefaultTheaterMode',
|
||||
'updateHideVideoDescription',
|
||||
'updateHideComments',
|
||||
'updateHideCommentPhotos',
|
||||
|
|
|
@ -108,16 +108,16 @@ export default defineComponent({
|
|||
type: Array,
|
||||
default: () => ([])
|
||||
},
|
||||
theatrePossible: {
|
||||
theaterPossible: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
useTheatreMode: {
|
||||
useTheaterMode: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
emits: ['ended', 'error', 'ready', 'store-caption-list', 'timeupdate', 'toggle-theatre-mode'],
|
||||
emits: ['ended', 'error', 'ready', 'store-caption-list', 'timeupdate', 'toggle-theater-mode'],
|
||||
data: function () {
|
||||
return {
|
||||
powerSaveBlocker: null,
|
||||
|
@ -175,7 +175,7 @@ export default defineComponent({
|
|||
'descriptionsButton',
|
||||
'subsCapsButton',
|
||||
'pictureInPictureToggle',
|
||||
'toggleTheatreModeButton',
|
||||
'toggleTheaterModeButton',
|
||||
'fullWindowButton',
|
||||
'qualitySelector',
|
||||
'fullscreenToggle'
|
||||
|
@ -213,8 +213,8 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
|
||||
autoplayVideos: function () {
|
||||
return this.$store.getters.getAutoplayVideos
|
||||
startVideosAutomatically: function () {
|
||||
return this.$store.getters.getStartVideosAutomatically
|
||||
},
|
||||
|
||||
videoVolumeMouseScroll: function () {
|
||||
|
@ -397,7 +397,7 @@ export default defineComponent({
|
|||
|
||||
this.createFullWindowButton()
|
||||
this.createLoopButton()
|
||||
this.createToggleTheatreModeButton()
|
||||
this.createToggleTheaterModeButton()
|
||||
this.createScreenshotButton()
|
||||
this.determineFormatType()
|
||||
|
||||
|
@ -594,7 +594,7 @@ export default defineComponent({
|
|||
})
|
||||
}
|
||||
|
||||
if (this.autoplayVideos) {
|
||||
if (this.startVideosAutomatically) {
|
||||
// Calling play() won't happen right away, so a quick timeout will make it function properly.
|
||||
setTimeout(() => {
|
||||
// `this.player` can be destroyed before this runs
|
||||
|
@ -1507,28 +1507,28 @@ export default defineComponent({
|
|||
videojs.registerComponent('fullWindowButton', fullWindowButton)
|
||||
},
|
||||
|
||||
createToggleTheatreModeButton: function () {
|
||||
if (!this.theatrePossible) {
|
||||
createToggleTheaterModeButton: function () {
|
||||
if (!this.theaterPossible) {
|
||||
return
|
||||
}
|
||||
|
||||
const theatreModeActive = this.useTheatreMode ? ' vjs-icon-theatre-active' : ''
|
||||
const theaterModeActive = this.useTheaterMode ? ' vjs-icon-theatre-active' : ''
|
||||
|
||||
const toggleTheatreMode = this.toggleTheatreMode
|
||||
const toggleTheaterMode = this.toggleTheaterMode
|
||||
|
||||
const VjsButton = videojs.getComponent('Button')
|
||||
class toggleTheatreModeButton extends VjsButton {
|
||||
class toggleTheaterModeButton extends VjsButton {
|
||||
handleClick() {
|
||||
toggleTheatreMode()
|
||||
toggleTheaterMode()
|
||||
}
|
||||
|
||||
createControlTextEl(button) {
|
||||
button.classList.add('vjs-button-theatre')
|
||||
button.title = 'Toggle Theatre Mode'
|
||||
button.title = 'Toggle Theater Mode'
|
||||
|
||||
const div = document.createElement('div')
|
||||
div.id = 'toggleTheatreModeButton'
|
||||
div.className = `vjs-icon-theatre-inactive${theatreModeActive} vjs-button`
|
||||
div.id = 'toggleTheaterModeButton'
|
||||
div.className = `vjs-icon-theatre-inactive${theaterModeActive} vjs-button`
|
||||
|
||||
button.appendChild(div)
|
||||
|
||||
|
@ -1536,20 +1536,20 @@ export default defineComponent({
|
|||
}
|
||||
}
|
||||
|
||||
videojs.registerComponent('toggleTheatreModeButton', toggleTheatreModeButton)
|
||||
videojs.registerComponent('toggleTheaterModeButton', toggleTheaterModeButton)
|
||||
},
|
||||
|
||||
toggleTheatreMode: function () {
|
||||
toggleTheaterMode: function () {
|
||||
if (!this.player.isFullscreen_) {
|
||||
const toggleTheatreModeButton = document.getElementById('toggleTheatreModeButton')
|
||||
if (!this.useTheatreMode) {
|
||||
toggleTheatreModeButton.classList.add('vjs-icon-theatre-active')
|
||||
const toggleTheaterModeButton = document.getElementById('toggleTheaterModeButton')
|
||||
if (!this.useTheaterMode) {
|
||||
toggleTheaterModeButton.classList.add('vjs-icon-theatre-active')
|
||||
} else {
|
||||
toggleTheatreModeButton.classList.remove('vjs-icon-theatre-active')
|
||||
toggleTheaterModeButton.classList.remove('vjs-icon-theatre-active')
|
||||
}
|
||||
}
|
||||
|
||||
this.$emit('toggle-theatre-mode')
|
||||
this.$emit('toggle-theater-mode')
|
||||
},
|
||||
|
||||
createScreenshotButton: function () {
|
||||
|
@ -2283,8 +2283,8 @@ export default defineComponent({
|
|||
break
|
||||
case 'T':
|
||||
case 't':
|
||||
// Toggle Theatre Mode
|
||||
this.toggleTheatreMode()
|
||||
// Toggle Theater Mode
|
||||
this.toggleTheaterMode()
|
||||
break
|
||||
case 'U':
|
||||
case 'u':
|
||||
|
|
|
@ -13,8 +13,8 @@ export default defineComponent({
|
|||
hideSearchBar: function () {
|
||||
return this.$store.getters.getHideSearchBar
|
||||
},
|
||||
hideUnsubscribeButton: function() {
|
||||
return this.$store.getters.getHideUnsubscribeButton
|
||||
hideSubscribeButton: function() {
|
||||
return this.$store.getters.getHideSubscribeButton
|
||||
},
|
||||
showFamilyFriendlyOnly: function() {
|
||||
return this.$store.getters.getShowFamilyFriendlyOnly
|
||||
|
@ -23,7 +23,7 @@ export default defineComponent({
|
|||
methods: {
|
||||
...mapActions([
|
||||
'updateHideSearchBar',
|
||||
'updateHideUnsubscribeButton',
|
||||
'updateHideSubscribeButton',
|
||||
'updateShowFamilyFriendlyOnly'
|
||||
])
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
<ft-toggle-switch
|
||||
:label="$t('Settings.Parental Control Settings.Hide Unsubscribe Button')"
|
||||
:compact="true"
|
||||
:default-value="hideUnsubscribeButton"
|
||||
@change="updateHideUnsubscribeButton"
|
||||
:default-value="hideSubscribeButton"
|
||||
@change="updateHideSubscribeButton"
|
||||
/>
|
||||
<ft-toggle-switch
|
||||
:label="$t('Settings.Parental Control Settings.Show Family Friendly Only')"
|
||||
|
|
|
@ -65,16 +65,16 @@ export default defineComponent({
|
|||
return this.$store.getters.getBackendPreference
|
||||
},
|
||||
|
||||
autoplayVideos: function () {
|
||||
return this.$store.getters.getAutoplayVideos
|
||||
startVideosAutomatically: function () {
|
||||
return this.$store.getters.getStartVideosAutomatically
|
||||
},
|
||||
|
||||
autoplayPlaylists: function () {
|
||||
return this.$store.getters.getAutoplayPlaylists
|
||||
enablePlaylistAutoplay: function () {
|
||||
return this.$store.getters.getEnablePlaylistAutoplay
|
||||
},
|
||||
|
||||
playNextVideo: function () {
|
||||
return this.$store.getters.getPlayNextVideo
|
||||
enableAutoplay: function () {
|
||||
return this.$store.getters.getEnableAutoplay
|
||||
},
|
||||
|
||||
enableSubtitlesByDefault: function () {
|
||||
|
@ -117,8 +117,8 @@ export default defineComponent({
|
|||
return this.$store.getters.getAllowDashAv1Formats
|
||||
},
|
||||
|
||||
defaultTheatreMode: function () {
|
||||
return this.$store.getters.getDefaultTheatreMode
|
||||
defaultTheaterMode: function () {
|
||||
return this.$store.getters.getDefaultTheaterMode
|
||||
},
|
||||
|
||||
hideRecommendedVideos: function () {
|
||||
|
@ -280,13 +280,13 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
...mapActions([
|
||||
'updateAutoplayVideos',
|
||||
'updateAutoplayPlaylists',
|
||||
'updatePlayNextVideo',
|
||||
'updateStartVideosAutomatically',
|
||||
'updateEnablePlaylistAutoplay',
|
||||
'updateEnableAutoplay',
|
||||
'updateEnableSubtitlesByDefault',
|
||||
'updateForceLocalBackendForLegacy',
|
||||
'updateProxyVideos',
|
||||
'updateDefaultTheatreMode',
|
||||
'updateDefaultTheaterMode',
|
||||
'updateDefaultSkipInterval',
|
||||
'updateDefaultInterval',
|
||||
'updateDefaultVolume',
|
||||
|
|
|
@ -28,8 +28,8 @@
|
|||
<ft-toggle-switch
|
||||
:label="$t('Settings.Player Settings.Enable Theatre Mode by Default')"
|
||||
:compact="true"
|
||||
:default-value="defaultTheatreMode"
|
||||
@change="updateDefaultTheatreMode"
|
||||
:default-value="defaultTheaterMode"
|
||||
@change="updateDefaultTheaterMode"
|
||||
/>
|
||||
<ft-toggle-switch
|
||||
:label="$t('Settings.Player Settings.Scroll Volume Over Video Player')"
|
||||
|
@ -58,21 +58,22 @@
|
|||
<ft-toggle-switch
|
||||
:label="$t('Settings.Player Settings.Autoplay Videos')"
|
||||
:compact="true"
|
||||
:default-value="autoplayVideos"
|
||||
@change="updateAutoplayVideos"
|
||||
/>
|
||||
<ft-toggle-switch
|
||||
:label="$t('Settings.Player Settings.Autoplay Playlists')"
|
||||
:compact="true"
|
||||
:default-value="autoplayPlaylists"
|
||||
@change="updateAutoplayPlaylists"
|
||||
:default-value="startVideosAutomatically"
|
||||
@change="updateStartVideosAutomatically"
|
||||
/>
|
||||
<ft-toggle-switch
|
||||
:label="$t('Settings.Player Settings.Play Next Video')"
|
||||
:compact="true"
|
||||
:disabled="hideRecommendedVideos"
|
||||
:default-value="playNextVideo"
|
||||
@change="updatePlayNextVideo"
|
||||
:default-value="enableAutoplay"
|
||||
@change="updateEnableAutoplay"
|
||||
/>
|
||||
<ft-toggle-switch
|
||||
:label="$t('Settings.Player Settings.Autoplay Playlists')"
|
||||
:compact="true"
|
||||
:disabled="enableAutoplay"
|
||||
:default-value="enablePlaylistAutoplay"
|
||||
@change="updateEnablePlaylistAutoplay"
|
||||
/>
|
||||
<ft-toggle-switch
|
||||
:label="$t('Settings.Player Settings.Display Play Button In Video Player')"
|
||||
|
|
|
@ -110,8 +110,8 @@ export default defineComponent({
|
|||
return this.$store.getters.getHideSharingActions
|
||||
},
|
||||
|
||||
hideUnsubscribeButton: function() {
|
||||
return this.$store.getters.getHideUnsubscribeButton
|
||||
hideSubscribeButton: function() {
|
||||
return this.$store.getters.getHideSubscribeButton
|
||||
},
|
||||
|
||||
currentLocale: function () {
|
||||
|
|
|
@ -222,7 +222,7 @@ export default defineComponent({
|
|||
|
||||
if ('mediaSession' in navigator) {
|
||||
navigator.mediaSession.setActionHandler('previoustrack', this.playPreviousVideo)
|
||||
navigator.mediaSession.setActionHandler('nexttrack', this.playNextVideo)
|
||||
navigator.mediaSession.setActionHandler('nexttrack', this.enableAutoplay)
|
||||
}
|
||||
},
|
||||
beforeDestroy: function () {
|
||||
|
@ -294,7 +294,7 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
|
||||
playNextVideo: function () {
|
||||
enableAutoplay: function () {
|
||||
const playlistInfo = {
|
||||
playlistId: this.playlistId,
|
||||
playlistType: this.playlistType,
|
||||
|
|
|
@ -101,9 +101,9 @@
|
|||
:title="$t('Video.Play Next Video')"
|
||||
role="button"
|
||||
tabindex="0"
|
||||
@click="playNextVideo"
|
||||
@keydown.enter.prevent="playNextVideo"
|
||||
@keydown.space.prevent="playNextVideo"
|
||||
@click="enableAutoplay"
|
||||
@keydown.enter.prevent="enableAutoplay"
|
||||
@keydown.space.prevent="enableAutoplay"
|
||||
/>
|
||||
<font-awesome-icon
|
||||
class="playlistIcon"
|
||||
|
|
|
@ -22,8 +22,8 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
computed: {
|
||||
playNextVideo: function () {
|
||||
return this.$store.getters.getPlayNextVideo
|
||||
enableAutoplay: function () {
|
||||
return this.$store.getters.getEnableAutoplay
|
||||
},
|
||||
hideRecommendedVideos: function () {
|
||||
return this.$store.getters.getHideRecommendedVideos
|
||||
|
@ -31,7 +31,7 @@ export default defineComponent({
|
|||
},
|
||||
methods: {
|
||||
...mapActions([
|
||||
'updatePlayNextVideo'
|
||||
'updateEnableAutoplay'
|
||||
])
|
||||
}
|
||||
})
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
class="autoPlayToggle"
|
||||
:label="$t('Video.Autoplay')"
|
||||
:compact="true"
|
||||
:default-value="playNextVideo"
|
||||
@change="updatePlayNextVideo"
|
||||
:default-value="enableAutoplay"
|
||||
@change="updateEnableAutoplay"
|
||||
/>
|
||||
</div>
|
||||
<ft-list-video-lazy
|
||||
|
|
|
@ -163,8 +163,8 @@ const defaultSideEffectsTriggerId = settingId =>
|
|||
|
||||
const state = {
|
||||
allSettingsSectionsExpandedByDefault: false,
|
||||
autoplayPlaylists: true,
|
||||
autoplayVideos: true,
|
||||
enablePlaylistAutoplay: true,
|
||||
startVideosAutomatically: true,
|
||||
backendFallback: process.env.SUPPORTS_LOCAL_API,
|
||||
backendPreference: !process.env.SUPPORTS_LOCAL_API ? 'invidious' : 'local',
|
||||
barColor: false,
|
||||
|
@ -179,7 +179,7 @@ const state = {
|
|||
defaultProfile: MAIN_PROFILE_ID,
|
||||
defaultQuality: '720',
|
||||
defaultSkipInterval: 5,
|
||||
defaultTheatreMode: false,
|
||||
defaultTheaterMode: false,
|
||||
defaultVideoFormat: 'dash',
|
||||
disableSmoothScrolling: false,
|
||||
displayVideoPlayButton: true,
|
||||
|
@ -221,7 +221,7 @@ const state = {
|
|||
hideSubscriptionsLive: false,
|
||||
hideSubscriptionsCommunity: false,
|
||||
hideTrendingVideos: false,
|
||||
hideUnsubscribeButton: false,
|
||||
hideSubscribeButton: false,
|
||||
hideUpcomingPremieres: false,
|
||||
hideVideoLikesAndDislikes: false,
|
||||
hideVideoViews: false,
|
||||
|
@ -232,8 +232,8 @@ const state = {
|
|||
landingPage: 'subscriptions',
|
||||
listType: 'grid',
|
||||
maxVideoPlaybackRate: 3,
|
||||
enableAutoplay: false,
|
||||
onlyShowLatestFromChannel: false,
|
||||
playNextVideo: false,
|
||||
proxyHostname: '127.0.0.1',
|
||||
proxyPort: '9050',
|
||||
proxyProtocol: 'socks5',
|
||||
|
@ -455,8 +455,7 @@ const customActions = {
|
|||
Object.fromEntries((await DBSettingHandlers.find()).map(({ _id, value }) => { return [_id, value] })))
|
||||
)
|
||||
|
||||
for (const setting of userSettings) {
|
||||
const [_id, value] = setting
|
||||
const loadSetting = (_id, value) => {
|
||||
if (getters.settingHasSideEffects(_id)) {
|
||||
dispatch(defaultSideEffectsTriggerId(_id), value)
|
||||
}
|
||||
|
@ -465,6 +464,11 @@ const customActions = {
|
|||
commit(defaultMutationId(_id), value)
|
||||
}
|
||||
}
|
||||
|
||||
for (const setting of userSettings) {
|
||||
const [_id, value] = setting
|
||||
loadSetting(_id, value)
|
||||
}
|
||||
} catch (errMessage) {
|
||||
console.error(errMessage)
|
||||
}
|
||||
|
@ -596,6 +600,10 @@ Object.assign(
|
|||
|
||||
// Build default getters, mutations and actions for every setting id
|
||||
for (const settingId of Object.keys(state)) {
|
||||
buildSettingsStoreMethods(settingId)
|
||||
}
|
||||
|
||||
function buildSettingsStoreMethods(settingId) {
|
||||
const getterId = defaultGetterId(settingId)
|
||||
const mutationId = defaultMutationId(settingId)
|
||||
const updaterId = defaultUpdaterId(settingId)
|
||||
|
|
|
@ -149,8 +149,8 @@ export default defineComponent({
|
|||
return this.$store.getters.getBackendFallback
|
||||
},
|
||||
|
||||
hideUnsubscribeButton: function() {
|
||||
return this.$store.getters.getHideUnsubscribeButton
|
||||
hideSubscribeButton: function() {
|
||||
return this.$store.getters.getHideSubscribeButton
|
||||
},
|
||||
|
||||
showFamilyFriendlyOnly: function() {
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
/>
|
||||
|
||||
<ft-subscribe-button
|
||||
v-if="!hideUnsubscribeButton && (!errorMessage || isSubscribed)"
|
||||
v-if="!hideSubscribeButton && (!errorMessage || isSubscribed)"
|
||||
:channel-id="id"
|
||||
:channel-name="channelName"
|
||||
:channel-thumbnail="thumbnailUrl"
|
||||
|
|
|
@ -50,8 +50,8 @@ export default defineComponent({
|
|||
}
|
||||
},
|
||||
|
||||
hideUnsubscribeButton: function() {
|
||||
return this.$store.getters.getHideUnsubscribeButton
|
||||
hideSubscribeButton: function() {
|
||||
return this.$store.getters.getHideSubscribeButton
|
||||
},
|
||||
|
||||
locale: function () {
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
{{ channel.name }}
|
||||
</router-link>
|
||||
<div
|
||||
v-if="!hideUnsubscribeButton"
|
||||
v-if="!hideSubscribeButton"
|
||||
class="unsubscribeContainer"
|
||||
>
|
||||
<ft-subscribe-button
|
||||
|
|
|
@ -74,7 +74,7 @@ export default defineComponent({
|
|||
return {
|
||||
isLoading: true,
|
||||
firstLoad: true,
|
||||
useTheatreMode: false,
|
||||
useTheaterMode: false,
|
||||
videoPlayerReady: false,
|
||||
hidePlayer: false,
|
||||
isFamilyFriendly: false,
|
||||
|
@ -159,8 +159,8 @@ export default defineComponent({
|
|||
defaultInterval: function () {
|
||||
return this.$store.getters.getDefaultInterval
|
||||
},
|
||||
defaultTheatreMode: function () {
|
||||
return this.$store.getters.getDefaultTheatreMode
|
||||
defaultTheaterMode: function () {
|
||||
return this.$store.getters.getDefaultTheaterMode
|
||||
},
|
||||
defaultVideoFormat: function () {
|
||||
return this.$store.getters.getDefaultVideoFormat
|
||||
|
@ -171,11 +171,11 @@ export default defineComponent({
|
|||
thumbnailPreference: function () {
|
||||
return this.$store.getters.getThumbnailPreference
|
||||
},
|
||||
playNextVideo: function () {
|
||||
return this.$store.getters.getPlayNextVideo
|
||||
enableAutoplay: function () {
|
||||
return this.$store.getters.getEnableAutoplay
|
||||
},
|
||||
autoplayPlaylists: function () {
|
||||
return this.$store.getters.getAutoplayPlaylists
|
||||
enablePlaylistAutoplay: function () {
|
||||
return this.$store.getters.getEnablePlaylistAutoplay
|
||||
},
|
||||
hideRecommendedVideos: function () {
|
||||
return this.$store.getters.getHideRecommendedVideos
|
||||
|
@ -198,7 +198,7 @@ export default defineComponent({
|
|||
hideVideoLikesAndDislikes: function () {
|
||||
return this.$store.getters.getHideVideoLikesAndDislikes
|
||||
},
|
||||
theatrePossible: function () {
|
||||
theaterPossible: function () {
|
||||
return !this.hideRecommendedVideos || (!this.hideLiveChat && this.isLive) || this.watchingPlaylist
|
||||
},
|
||||
currentLocale: function () {
|
||||
|
@ -273,7 +273,7 @@ export default defineComponent({
|
|||
mounted: function () {
|
||||
this.videoId = this.$route.params.id
|
||||
this.activeFormat = this.defaultVideoFormat
|
||||
this.useTheatreMode = this.defaultTheatreMode && this.theatrePossible
|
||||
this.useTheaterMode = this.defaultTheaterMode && this.theaterPossible
|
||||
|
||||
this.onMountedDependOnLocalStateLoading()
|
||||
},
|
||||
|
@ -1330,7 +1330,7 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
handleVideoEnded: function () {
|
||||
if ((!this.watchingPlaylist || !this.autoplayPlaylists) && !this.playNextVideo) {
|
||||
if ((!this.watchingPlaylist || !this.enablePlaylistAutoplay) && !this.enableAutoplay) {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1341,7 +1341,7 @@ export default defineComponent({
|
|||
|
||||
if (this.watchingPlaylist && this.$refs.watchVideoPlaylist.shouldStopDueToPlaylistEnd) {
|
||||
// Let `watchVideoPlaylist` handle end of playlist, no countdown needed
|
||||
this.$refs.watchVideoPlaylist.playNextVideo()
|
||||
this.$refs.watchVideoPlaylist.enableAutoplay()
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1362,7 +1362,7 @@ export default defineComponent({
|
|||
const player = this.$refs.videoPlayer.player
|
||||
if (player !== null && player.paused()) {
|
||||
if (this.watchingPlaylist) {
|
||||
this.$refs.watchVideoPlaylist.playNextVideo()
|
||||
this.$refs.watchVideoPlaylist.enableAutoplay()
|
||||
} else {
|
||||
this.$router.push({
|
||||
path: `/watch/${nextVideoId}`
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
grid-template: 'video video sidebar' 0fr 'info info sidebar' auto 'info info sidebar' 1fr / 1fr 1fr 1fr;
|
||||
}
|
||||
|
||||
@mixin theatre-mode-template {
|
||||
@mixin theater-mode-template {
|
||||
grid-template: 'video video video' auto 'info info sidebar' auto 'info info sidebar' auto / 1fr 1fr 1fr;
|
||||
}
|
||||
|
||||
|
@ -110,7 +110,7 @@
|
|||
|
||||
.watchVideoPlaylist,
|
||||
.watchVideoSidebar,
|
||||
.theatrePlaylist {
|
||||
.theaterPlaylist {
|
||||
margin-block: 0 16px;
|
||||
margin-inline: 8px;
|
||||
}
|
||||
|
@ -131,7 +131,7 @@
|
|||
}
|
||||
|
||||
.watchVideoRecommendations,
|
||||
.theatreRecommendations {
|
||||
.theaterRecommendations {
|
||||
margin-block: 0 16px;
|
||||
margin-inline: 0;
|
||||
|
||||
|
@ -142,12 +142,12 @@
|
|||
}
|
||||
|
||||
@media only screen and (width <= 1350px) {
|
||||
@include theatre-mode-template;
|
||||
@include theater-mode-template;
|
||||
}
|
||||
|
||||
@media only screen and (width >= 1051px) {
|
||||
&.useTheatreMode {
|
||||
@include theatre-mode-template;
|
||||
&.useTheaterMode {
|
||||
@include theater-mode-template;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
class="videoLayout"
|
||||
:class="{
|
||||
isLoading,
|
||||
useTheatreMode: useTheatreMode && !isLoading,
|
||||
noSidebar: !theatrePossible
|
||||
useTheaterMode: useTheaterMode && !isLoading,
|
||||
noSidebar: !theaterPossible
|
||||
}"
|
||||
>
|
||||
<ft-loader
|
||||
|
@ -31,15 +31,15 @@
|
|||
:length-seconds="videoLengthSeconds"
|
||||
:chapters="videoChapters"
|
||||
:current-chapter-index="videoCurrentChapterIndex"
|
||||
:theatre-possible="theatrePossible"
|
||||
:use-theatre-mode="useTheatreMode"
|
||||
:theater-possible="theaterPossible"
|
||||
:use-theater-mode="useTheaterMode"
|
||||
class="videoPlayer"
|
||||
:class="{ theatrePlayer: useTheatreMode }"
|
||||
:class="{ theaterPlayer: useTheaterMode }"
|
||||
@ready="handleVideoReady"
|
||||
@ended="handleVideoEnded"
|
||||
@error="handleVideoError"
|
||||
@store-caption-list="captionHybridList = $event"
|
||||
@toggle-theatre-mode="useTheatreMode = !useTheatreMode"
|
||||
@toggle-theater-mode="useTheaterMode = !useTheaterMode"
|
||||
v-on="!hideChapters && videoChapters.length > 0 ? { timeupdate: updateCurrentChapter } : {}"
|
||||
/>
|
||||
<div
|
||||
|
@ -120,7 +120,7 @@
|
|||
:length-seconds="videoLengthSeconds"
|
||||
:video-thumbnail="thumbnail"
|
||||
class="watchVideo"
|
||||
:class="{ theatreWatchVideo: useTheatreMode }"
|
||||
:class="{ theaterWatchVideo: useTheaterMode }"
|
||||
@change-format="handleFormatChange"
|
||||
@pause-player="pausePlayer"
|
||||
@set-info-area-sticky="infoAreaSticky = $event"
|
||||
|
@ -131,7 +131,7 @@
|
|||
:chapters="videoChapters"
|
||||
:current-chapter-index="videoCurrentChapterIndex"
|
||||
class="watchVideo"
|
||||
:class="{ theatreWatchVideo: useTheatreMode }"
|
||||
:class="{ theaterWatchVideo: useTheaterMode }"
|
||||
@timestamp-event="changeTimestamp"
|
||||
/>
|
||||
<watch-video-description
|
||||
|
@ -139,14 +139,14 @@
|
|||
:description="videoDescription"
|
||||
:description-html="videoDescriptionHtml"
|
||||
class="watchVideo"
|
||||
:class="{ theatreWatchVideo: useTheatreMode }"
|
||||
:class="{ theaterWatchVideo: useTheaterMode }"
|
||||
@timestamp-event="changeTimestamp"
|
||||
/>
|
||||
<watch-video-comments
|
||||
v-if="!isLoading && !isLive && !hideComments"
|
||||
:id="videoId"
|
||||
class="watchVideo"
|
||||
:class="{ theatreWatchVideo: useTheatreMode }"
|
||||
:class="{ theaterWatchVideo: useTheaterMode }"
|
||||
:channel-thumbnail="channelThumbnail"
|
||||
:channel-name="channelName"
|
||||
:video-player-ready="videoPlayerReady"
|
||||
|
@ -164,7 +164,7 @@
|
|||
:video-id="videoId"
|
||||
:channel-id="channelId"
|
||||
class="watchVideoSideBar watchVideoPlaylist"
|
||||
:class="{ theatrePlaylist: useTheatreMode }"
|
||||
:class="{ theaterPlaylist: useTheaterMode }"
|
||||
/>
|
||||
<watch-video-playlist
|
||||
v-if="watchingPlaylist"
|
||||
|
@ -176,7 +176,7 @@
|
|||
:video-id="videoId"
|
||||
:playlist-item-id="playlistItemId"
|
||||
class="watchVideoSideBar watchVideoPlaylist"
|
||||
:class="{ theatrePlaylist: useTheatreMode }"
|
||||
:class="{ theaterPlaylist: useTheaterMode }"
|
||||
@pause-player="pausePlayer"
|
||||
/>
|
||||
<watch-video-recommendations
|
||||
|
@ -185,7 +185,7 @@
|
|||
:data="recommendedVideos"
|
||||
class="watchVideoSideBar watchVideoRecommendations"
|
||||
:class="{
|
||||
theatreRecommendations: useTheatreMode,
|
||||
theaterRecommendations: useTheaterMode,
|
||||
watchVideoRecommendationsLowerCard: watchingPlaylist || isLive,
|
||||
watchVideoRecommendationsNoCard: !watchingPlaylist || !isLive
|
||||
}"
|
||||
|
|
|
@ -350,18 +350,18 @@ Settings:
|
|||
Player Settings:
|
||||
Player Settings: Player Settings
|
||||
Force Local Backend for Legacy Formats: Force Local Backend for Legacy Formats
|
||||
Play Next Video: Play Next Video
|
||||
Play Next Video: Autoplay (Recommended Videos and Playlists)
|
||||
Turn on Subtitles by Default: Turn on Subtitles by Default
|
||||
Autoplay Videos: Autoplay Videos
|
||||
Autoplay Videos: Start Videos Automatically
|
||||
Proxy Videos Through Invidious: Proxy Videos Through Invidious
|
||||
Autoplay Playlists: Autoplay Playlists
|
||||
Enable Theatre Mode by Default: Enable Theatre Mode by Default
|
||||
Autoplay Playlists: Autoplay (Playlists Only)
|
||||
Enable Theatre Mode by Default: Enable Theater Mode by Default
|
||||
Scroll Volume Over Video Player: Scroll Volume Over Video Player
|
||||
Scroll Playback Rate Over Video Player: Scroll Playback Rate Over Video Player
|
||||
Skip by Scrolling Over Video Player: Skip by Scrolling Over Video Player
|
||||
Display Play Button In Video Player: Display Play Button In Video Player
|
||||
Enter Fullscreen on Display Rotate: Enter Fullscreen on Display Rotate
|
||||
Next Video Interval: Next Video Interval
|
||||
Enter Fullscreen on Display Rotate: Enter Fullscreen On Rotating the Device
|
||||
Next Video Interval: Autoplay Countdown Timer
|
||||
Fast-Forward / Rewind Interval: Fast-Forward / Rewind Interval
|
||||
Default Volume: Default Volume
|
||||
Default Playback Rate: Default Playback Rate
|
||||
|
@ -386,7 +386,7 @@ Settings:
|
|||
8k: 8k
|
||||
Allow DASH AV1 formats: Allow DASH AV1 formats
|
||||
Screenshot:
|
||||
Enable: Enable Screenshot
|
||||
Enable: Enable Video Screenshot
|
||||
Format Label: Screenshot Format
|
||||
Quality Label: Screenshot Quality
|
||||
Ask Path: Ask for Save Folder
|
||||
|
@ -566,7 +566,7 @@ Settings:
|
|||
Category Color: Category Color
|
||||
Parental Control Settings:
|
||||
Parental Control Settings: Parental Control Settings
|
||||
Hide Unsubscribe Button: Hide Unsubscribe Button
|
||||
Hide Unsubscribe Button: Hide Subscribe Button
|
||||
Show Family Friendly Only: Show Family Friendly Only
|
||||
Hide Search Bar: Hide Search Bar
|
||||
Download Settings:
|
||||
|
|
Loading…
Reference in New Issue