This commit is contained in:
Jason 2024-04-23 21:25:11 +00:00 committed by GitHub
commit a5e3a52b76
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 182 additions and 125 deletions

View File

@ -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() {

View File

@ -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 {

View File

@ -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 {

View File

@ -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'

View File

@ -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',

View File

@ -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':

View File

@ -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'
])
}

View File

@ -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')"

View File

@ -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',

View File

@ -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')"

View File

@ -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 () {

View File

@ -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,

View File

@ -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"

View File

@ -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'
])
}
})

View File

@ -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

View File

@ -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)

View File

@ -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() {

View File

@ -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"

View File

@ -50,8 +50,8 @@ export default defineComponent({
}
},
hideUnsubscribeButton: function() {
return this.$store.getters.getHideUnsubscribeButton
hideSubscribeButton: function() {
return this.$store.getters.getHideSubscribeButton
},
locale: function () {

View File

@ -49,7 +49,7 @@
{{ channel.name }}
</router-link>
<div
v-if="!hideUnsubscribeButton"
v-if="!hideSubscribeButton"
class="unsubscribeContainer"
>
<ft-subscribe-button

View File

@ -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}`

View File

@ -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;
}
}

View File

@ -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
}"

View File

@ -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: