Fix Locale issues and add Privacy Settings card to settings page
This commit is contained in:
parent
6a2e301d37
commit
602a140361
|
@ -0,0 +1,19 @@
|
||||||
|
.prompt {
|
||||||
|
position: fixed;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background-color: rgba(0, 0, 0, 0.7);
|
||||||
|
z-index: 10;
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.promptCard {
|
||||||
|
width: 95%;
|
||||||
|
margin-top: 40%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
import Vue from 'vue'
|
||||||
|
import FtCard from '../../components/ft-card/ft-card.vue'
|
||||||
|
import FtFlexBox from '../../components/ft-flex-box/ft-flex-box.vue'
|
||||||
|
import FtButton from '../../components/ft-button/ft-button.vue'
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
name: 'FtPrompt',
|
||||||
|
components: {
|
||||||
|
'ft-card': FtCard,
|
||||||
|
'ft-flex-box': FtFlexBox,
|
||||||
|
'ft-button': FtButton
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
label: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
optionNames: {
|
||||||
|
type: Array,
|
||||||
|
default: () => { return [] }
|
||||||
|
},
|
||||||
|
optionValues: {
|
||||||
|
type: Array,
|
||||||
|
default: () => { return [] }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleHide: function (event) {
|
||||||
|
if (event.target.className === 'prompt') {
|
||||||
|
this.$emit('click', null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
|
@ -0,0 +1,23 @@
|
||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="prompt"
|
||||||
|
@click="handleHide"
|
||||||
|
>
|
||||||
|
<ft-card class="promptCard">
|
||||||
|
<slot>
|
||||||
|
<h2 class="center">{{ label }}</h2>
|
||||||
|
<ft-flex-box>
|
||||||
|
<ft-button
|
||||||
|
v-for="(option, index) in optionNames"
|
||||||
|
:key="index"
|
||||||
|
:label="option"
|
||||||
|
@click="$emit('click', optionValues[index])"
|
||||||
|
/>
|
||||||
|
</ft-flex-box>
|
||||||
|
</slot>
|
||||||
|
</ft-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script src="./ft-prompt.js" />
|
||||||
|
<style scoped src="./ft-prompt.css" />
|
|
@ -2,7 +2,7 @@
|
||||||
background-color: var(--card-bg-color);
|
background-color: var(--card-bg-color);
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
padding-bottom: 70px;
|
padding-bottom: 70px;
|
||||||
max-height: 400px;
|
max-height: 410px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
box-shadow: 0 1px 2px rgba(0,0,0,.1);
|
box-shadow: 0 1px 2px rgba(0,0,0,.1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -635,6 +635,7 @@ export default Vue.extend({
|
||||||
|
|
||||||
updateLocale: function (locale) {
|
updateLocale: function (locale) {
|
||||||
this.$i18n.locale = locale
|
this.$i18n.locale = locale
|
||||||
|
this.currentLocale = locale
|
||||||
localStorage.setItem('locale', locale)
|
localStorage.setItem('locale', locale)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
@change="updateThumbnailPreference"
|
@change="updateThumbnailPreference"
|
||||||
/>
|
/>
|
||||||
<ft-select
|
<ft-select
|
||||||
placeholder="Change Locale"
|
:placeholder="$t('Settings.General Settings.Locale Preference')"
|
||||||
:value="currentLocale"
|
:value="currentLocale"
|
||||||
:select-names="localeOptions"
|
:select-names="localeOptions"
|
||||||
:select-values="localeOptions"
|
:select-values="localeOptions"
|
||||||
|
|
|
@ -37,10 +37,6 @@ export default Vue.extend({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
rememberHistory: function () {
|
|
||||||
return this.$store.getters.getRememberHistory
|
|
||||||
},
|
|
||||||
|
|
||||||
autoplayVideos: function () {
|
autoplayVideos: function () {
|
||||||
return this.$store.getters.getAutoplayVideos
|
return this.$store.getters.getAutoplayVideos
|
||||||
},
|
},
|
||||||
|
@ -114,7 +110,6 @@ export default Vue.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
...mapActions([
|
...mapActions([
|
||||||
'updateRememberHistory',
|
|
||||||
'updateAutoplayVideos',
|
'updateAutoplayVideos',
|
||||||
'updateAutoplayPlaylists',
|
'updateAutoplayPlaylists',
|
||||||
'updatePlayNextVideo',
|
'updatePlayNextVideo',
|
||||||
|
|
|
@ -9,12 +9,6 @@
|
||||||
</h3>
|
</h3>
|
||||||
<div class="switchColumnGrid">
|
<div class="switchColumnGrid">
|
||||||
<div class="switchColumn">
|
<div class="switchColumn">
|
||||||
<ft-toggle-switch
|
|
||||||
:label="$t('Settings.Player Settings.Remember History')"
|
|
||||||
:compact="true"
|
|
||||||
:default-value="rememberHistory"
|
|
||||||
@change="updateRememberHistory"
|
|
||||||
/>
|
|
||||||
<ft-toggle-switch
|
<ft-toggle-switch
|
||||||
v-if="false"
|
v-if="false"
|
||||||
label="Enable Subtitles by Default"
|
label="Enable Subtitles by Default"
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
import Vue from 'vue'
|
||||||
|
import { mapActions } from 'vuex'
|
||||||
|
import FtCard from '../ft-card/ft-card.vue'
|
||||||
|
import FtButton from '../ft-button/ft-button.vue'
|
||||||
|
import FtToggleSwitch from '../ft-toggle-switch/ft-toggle-switch.vue'
|
||||||
|
import FtFlexBox from '../ft-flex-box/ft-flex-box.vue'
|
||||||
|
import FtPrompt from '../ft-prompt/ft-prompt.vue'
|
||||||
|
|
||||||
|
export default Vue.extend({
|
||||||
|
name: 'PrivacySettings',
|
||||||
|
components: {
|
||||||
|
'ft-card': FtCard,
|
||||||
|
'ft-button': FtButton,
|
||||||
|
'ft-toggle-switch': FtToggleSwitch,
|
||||||
|
'ft-flex-box': FtFlexBox,
|
||||||
|
'ft-prompt': FtPrompt
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
showSearchCachePrompt: false,
|
||||||
|
showRemoveHistoryPrompt: false,
|
||||||
|
promptValues: [
|
||||||
|
'yes',
|
||||||
|
'no'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
rememberHistory: function () {
|
||||||
|
return this.$store.getters.getRememberHistory
|
||||||
|
},
|
||||||
|
saveWatchedProgress: function () {
|
||||||
|
return this.$store.getters.getSaveWatchedProgress
|
||||||
|
},
|
||||||
|
promptNames: function () {
|
||||||
|
return [
|
||||||
|
this.$t('Yes'),
|
||||||
|
this.$t('No')
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleSearchCache: function (option) {
|
||||||
|
this.showSearchCachePrompt = false
|
||||||
|
|
||||||
|
if (option === 'yes') {
|
||||||
|
this.clearSessionSearchHistory()
|
||||||
|
this.showToast({
|
||||||
|
message: this.$t('Settings.Privacy Settings.Search cache has been cleared')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
handleRemoveHistory: function (option) {
|
||||||
|
this.showRemoveHistoryPrompt = false
|
||||||
|
|
||||||
|
if (option === 'yes') {
|
||||||
|
this.removeAllHistory()
|
||||||
|
this.showToast({
|
||||||
|
message: this.$t('Settings.Privacy Settings.Watch history has been cleared')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
...mapActions([
|
||||||
|
'updateRememberHistory',
|
||||||
|
'removeAllHistory',
|
||||||
|
'updateSaveWatchedProgress',
|
||||||
|
'clearSessionSearchHistory',
|
||||||
|
'showToast'
|
||||||
|
])
|
||||||
|
}
|
||||||
|
})
|
|
@ -0,0 +1 @@
|
||||||
|
@use "../../sass-partials/settings"
|
|
@ -0,0 +1,59 @@
|
||||||
|
<template>
|
||||||
|
<ft-card
|
||||||
|
class="relative card"
|
||||||
|
>
|
||||||
|
<h3>
|
||||||
|
{{ $t("Settings.Privacy Settings.Privacy Settings") }}
|
||||||
|
</h3>
|
||||||
|
<div class="switchColumnGrid">
|
||||||
|
<div class="switchColumn">
|
||||||
|
<ft-toggle-switch
|
||||||
|
:label="$t('Settings.Privacy Settings.Remember History')"
|
||||||
|
:compact="true"
|
||||||
|
:default-value="rememberHistory"
|
||||||
|
@change="updateRememberHistory"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="switchColumn">
|
||||||
|
<ft-toggle-switch
|
||||||
|
:label="$t('Settings.Privacy Settings.Save Watched Progress')"
|
||||||
|
:compact="true"
|
||||||
|
:default-value="saveWatchedProgress"
|
||||||
|
@change="updateSaveWatchedProgress"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<ft-flex-box>
|
||||||
|
<ft-button
|
||||||
|
:label="$t('Settings.Privacy Settings.Clear Search Cache')"
|
||||||
|
text-color="var(--text-with-main-color)"
|
||||||
|
background-color="var(--primary-color)"
|
||||||
|
@click="showSearchCachePrompt = true"
|
||||||
|
/>
|
||||||
|
<ft-button
|
||||||
|
:label="$t('Settings.Privacy Settings.Remove Watch History')"
|
||||||
|
text-color="var(--text-with-main-color)"
|
||||||
|
background-color="var(--primary-color)"
|
||||||
|
@click="showRemoveHistoryPrompt = true"
|
||||||
|
/>
|
||||||
|
</ft-flex-box>
|
||||||
|
<ft-prompt
|
||||||
|
v-if="showSearchCachePrompt"
|
||||||
|
:label="$t('Settings.Privacy Settings.Are you sure you want to clear out your search cache?')"
|
||||||
|
:option-names="promptNames"
|
||||||
|
:option-values="promptValues"
|
||||||
|
@click="handleSearchCache"
|
||||||
|
/>
|
||||||
|
<ft-prompt
|
||||||
|
v-if="showRemoveHistoryPrompt"
|
||||||
|
:label="$t('Settings.Privacy Settings.Are you sure you want to remove your entire watch history?')"
|
||||||
|
:option-names="promptNames"
|
||||||
|
:option-values="promptValues"
|
||||||
|
@click="handleRemoveHistory"
|
||||||
|
/>
|
||||||
|
</ft-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script src="./privacy-settings.js" />
|
||||||
|
<style scoped lang="sass" src="./privacy-settings.sass" />
|
|
@ -63,6 +63,14 @@ const actions = {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
removeAllHistory ({ dispatch }) {
|
||||||
|
historyDb.remove({}, { multi: true }, (err, numReplaced) => {
|
||||||
|
if (!err) {
|
||||||
|
dispatch('grabHistory')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
updateWatchProgress ({ dispatch }, videoData) {
|
updateWatchProgress ({ dispatch }, videoData) {
|
||||||
historyDb.update({ videoId: videoData.videoId }, { $set: { watchProgress: videoData.watchProgress } }, { upsert: true }, (err, numReplaced) => {
|
historyDb.update({ videoId: videoData.videoId }, { $set: { watchProgress: videoData.watchProgress } }, { upsert: true }, (err, numReplaced) => {
|
||||||
if (!err) {
|
if (!err) {
|
||||||
|
|
|
@ -39,6 +39,7 @@ const state = {
|
||||||
barColor: false,
|
barColor: false,
|
||||||
enableSearchSuggestions: true,
|
enableSearchSuggestions: true,
|
||||||
rememberHistory: true,
|
rememberHistory: true,
|
||||||
|
saveWatchedProgress: true,
|
||||||
autoplayVideos: true,
|
autoplayVideos: true,
|
||||||
autoplayPlaylists: true,
|
autoplayPlaylists: true,
|
||||||
playNextVideo: false,
|
playNextVideo: false,
|
||||||
|
@ -105,6 +106,10 @@ const getters = {
|
||||||
return state.rememberHistory
|
return state.rememberHistory
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getSaveWatchedProgress: () => {
|
||||||
|
return state.saveWatchedProgress
|
||||||
|
},
|
||||||
|
|
||||||
getAutoplayVideos: () => {
|
getAutoplayVideos: () => {
|
||||||
return state.autoplayVideos
|
return state.autoplayVideos
|
||||||
},
|
},
|
||||||
|
@ -198,6 +203,9 @@ const actions = {
|
||||||
case 'rememberHistory':
|
case 'rememberHistory':
|
||||||
commit('setRememberHistory', result.value)
|
commit('setRememberHistory', result.value)
|
||||||
break
|
break
|
||||||
|
case 'saveWatchedProgress':
|
||||||
|
commit('setSaveWatchedProgress', result.value)
|
||||||
|
break
|
||||||
case 'autoplayVideos':
|
case 'autoplayVideos':
|
||||||
commit('setAutoplayVideos', result.value)
|
commit('setAutoplayVideos', result.value)
|
||||||
break
|
break
|
||||||
|
@ -327,6 +335,14 @@ const actions = {
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
updateSaveWatchedProgress ({ commit }, saveWatchedProgress) {
|
||||||
|
settingsDb.update({ _id: 'saveWatchedProgress' }, { _id: 'saveWatchedProgress', value: saveWatchedProgress }, { upsert: true }, (err, numReplaced) => {
|
||||||
|
if (!err) {
|
||||||
|
commit('setSaveWatchedProgress', saveWatchedProgress)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
updateAutoplayVideos ({ commit }, autoplayVideos) {
|
updateAutoplayVideos ({ commit }, autoplayVideos) {
|
||||||
settingsDb.update({ _id: 'autoplayVideos' }, { _id: 'autoplayVideos', value: autoplayVideos }, { upsert: true }, (err, numReplaced) => {
|
settingsDb.update({ _id: 'autoplayVideos' }, { _id: 'autoplayVideos', value: autoplayVideos }, { upsert: true }, (err, numReplaced) => {
|
||||||
if (!err) {
|
if (!err) {
|
||||||
|
@ -462,6 +478,9 @@ const mutations = {
|
||||||
setRememberHistory (state, rememberHistory) {
|
setRememberHistory (state, rememberHistory) {
|
||||||
state.rememberHistory = rememberHistory
|
state.rememberHistory = rememberHistory
|
||||||
},
|
},
|
||||||
|
setSaveWatchedProgress (state, saveWatchedProgress) {
|
||||||
|
state.saveWatchedProgress = saveWatchedProgress
|
||||||
|
},
|
||||||
setAutoplayVideos (state, autoplayVideos) {
|
setAutoplayVideos (state, autoplayVideos) {
|
||||||
state.autoplayVideos = autoplayVideos
|
state.autoplayVideos = autoplayVideos
|
||||||
},
|
},
|
||||||
|
|
|
@ -230,6 +230,10 @@ const actions = {
|
||||||
return publicationString
|
return publicationString
|
||||||
},
|
},
|
||||||
|
|
||||||
|
clearSessionSearchHistory ({ commit }) {
|
||||||
|
commit('setSessionSearchHistory', [])
|
||||||
|
},
|
||||||
|
|
||||||
showToast (_, payload) {
|
showToast (_, payload) {
|
||||||
FtToastEvents.$emit('toast.open', payload.message, payload.action, payload.time)
|
FtToastEvents.$emit('toast.open', payload.message, payload.action, payload.time)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import FtElementList from '../../components/ft-element-list/ft-element-list.vue'
|
||||||
import GeneralSettings from '../../components/general-settings/general-settings.vue'
|
import GeneralSettings from '../../components/general-settings/general-settings.vue'
|
||||||
import ThemeSettings from '../../components/theme-settings/theme-settings.vue'
|
import ThemeSettings from '../../components/theme-settings/theme-settings.vue'
|
||||||
import PlayerSettings from '../../components/player-settings/player-settings.vue'
|
import PlayerSettings from '../../components/player-settings/player-settings.vue'
|
||||||
|
import PrivacySettings from '../../components/privacy-settings/privacy-settings.vue'
|
||||||
import SubscriptionSettings from '../../components/subscription-settings/subscription-settings.vue'
|
import SubscriptionSettings from '../../components/subscription-settings/subscription-settings.vue'
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
|
@ -14,6 +15,7 @@ export default Vue.extend({
|
||||||
'general-settings': GeneralSettings,
|
'general-settings': GeneralSettings,
|
||||||
'theme-settings': ThemeSettings,
|
'theme-settings': ThemeSettings,
|
||||||
'player-settings': PlayerSettings,
|
'player-settings': PlayerSettings,
|
||||||
|
'privacy-settings': PrivacySettings,
|
||||||
'subscription-settings': SubscriptionSettings
|
'subscription-settings': SubscriptionSettings
|
||||||
},
|
},
|
||||||
mounted: function () {
|
mounted: function () {
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
<general-settings />
|
<general-settings />
|
||||||
<theme-settings />
|
<theme-settings />
|
||||||
<player-settings />
|
<player-settings />
|
||||||
|
<privacy-settings />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,10 @@ export default Vue.extend({
|
||||||
return this.$store.getters.getRememberHistory
|
return this.$store.getters.getRememberHistory
|
||||||
},
|
},
|
||||||
|
|
||||||
|
saveWatchedProgress: function () {
|
||||||
|
return this.$store.getters.getSaveWatchedProgress
|
||||||
|
},
|
||||||
|
|
||||||
backendPreference: function () {
|
backendPreference: function () {
|
||||||
return this.$store.getters.getBackendPreference
|
return this.$store.getters.getBackendPreference
|
||||||
},
|
},
|
||||||
|
@ -696,7 +700,7 @@ export default Vue.extend({
|
||||||
if (this.rememberHistory && !this.isLoading && !this.isLive) {
|
if (this.rememberHistory && !this.isLoading && !this.isLive) {
|
||||||
const player = this.$refs.videoPlayer.player
|
const player = this.$refs.videoPlayer.player
|
||||||
|
|
||||||
if (typeof player !== 'undefined') {
|
if (typeof player !== 'undefined' && this.saveWatchedProgress) {
|
||||||
const currentTime = this.$refs.videoPlayer.player.currentTime()
|
const currentTime = this.$refs.videoPlayer.player.currentTime()
|
||||||
console.log(currentTime)
|
console.log(currentTime)
|
||||||
const payload = {
|
const payload = {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# Put the name of your locale in the same language
|
||||||
|
Locale Name: English
|
||||||
FreeTube: FreeTube
|
FreeTube: FreeTube
|
||||||
# Currently on Subscriptions, Playlists, and History
|
# Currently on Subscriptions, Playlists, and History
|
||||||
'This part of the app is not ready yet. Come back later when progress has been made.': >-
|
'This part of the app is not ready yet. Come back later when progress has been made.': >-
|
||||||
|
@ -138,7 +140,6 @@ Settings:
|
||||||
Player Settings:
|
Player Settings:
|
||||||
Player Settings: Player Settings
|
Player Settings: Player Settings
|
||||||
Force Local Backend for Legacy Formats: Force Local Backend for Legacy Formats
|
Force Local Backend for Legacy Formats: Force Local Backend for Legacy Formats
|
||||||
Remember History: Remember History
|
|
||||||
Play Next Video: Play Next Video
|
Play Next Video: Play Next Video
|
||||||
Turn on Subtitles by Default: Turn on Subtitles by Default
|
Turn on Subtitles by Default: Turn on Subtitles by Default
|
||||||
Autoplay Videos: Autoplay Videos
|
Autoplay Videos: Autoplay Videos
|
||||||
|
@ -164,6 +165,16 @@ Settings:
|
||||||
1440p: 1440p
|
1440p: 1440p
|
||||||
4k: 4k
|
4k: 4k
|
||||||
8k: 8k
|
8k: 8k
|
||||||
|
Privacy Settings:
|
||||||
|
Privacy Settings: Privacy Settings
|
||||||
|
Remember History: Remember History
|
||||||
|
Save Watched Progress: Save Watched Progress
|
||||||
|
Clear Search Cache: Clear Search Cache
|
||||||
|
Are you sure you want to clear out your search cache?: Are you sure you want to clear out your search cache?
|
||||||
|
Search cache has been cleared: Search cache has been cleared
|
||||||
|
Remove Watch History: Remove Watch History
|
||||||
|
Are you sure you want to remove your entire watch history?: Are you sure you want to remove your entire watch history?
|
||||||
|
Watch history has been cleared: Watch history has been cleared
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: Subscription Settings
|
Subscription Settings: Subscription Settings
|
||||||
Hide Videos on Watch: Hide Videos on Watch
|
Hide Videos on Watch: Hide Videos on Watch
|
||||||
|
|
Loading…
Reference in New Issue