FreeTube/src/renderer/store/modules/settings.js

450 lines
13 KiB
JavaScript

import electron from 'electron'
import Datastore from 'nedb'
// TODO: Add logic for database when electron is not in use
const localDataStorage = electron.remote.app.getPath('userData')
const settingsDb = new Datastore({
filename: localDataStorage + '/settings.db',
autoload: true
})
const state = {
currentTheme: 'lightRed',
backendFallback: true,
checkForUpdates: true,
backendPreference: 'local',
landingPage: 'subscriptions',
region: 'US',
listType: 'grid',
thumbnailPreference: '',
invidiousInstance: 'https://invidio.us',
barColor: false,
rememberHistory: true,
autoplayVideos: true,
autoplayPlaylists: true,
playNextVideo: false,
enableSubtitles: true,
forceLocalBackendForLegacy: true,
proxyVideos: false,
defaultVolume: 1,
defaultPlayback: 1,
defaultVideoFormat: 'dash',
defaultQuality: 'auto',
useTor: false,
proxy: 'SOCKS5://127.0.0.1:9050',
debugMode: false,
disctractionFreeMode: false,
hideWatchedSubs: false,
profileList: [{ name: 'All Channels', color: '#304FFE' }],
defaultProfile: 'All Channels'
}
const getters = {
getBackendFallback: () => {
return state.backendFallback
},
getCheckForUpdates: () => {
return state.checkForUpdates
},
getBarColor: () => {
return state.barColor
},
getBackendPreference: () => {
return state.backendPreference
},
getLandingPage: () => {
return state.landingPage
},
getRegion: () => {
return state.region
},
getListType: () => {
return state.listType
},
getThumbnailPreference: () => {
return state.thumbnailPreference
},
getInvidiousInstance: () => {
return state.invidiousInstance
},
getRememberHistory: () => {
return state.rememberHistory
},
getAutoplayVideos: () => {
return state.autoplayVideos
},
getAutoplayPlaylists: () => {
return state.autoplayPlaylists
},
getPlayNextVideo: () => {
return state.playNextVideo
},
getEnableSubtitles: () => {
return state.enableSubtitles
},
getForceLocalBackendForLegacy: () => {
return state.forceLocalBackendForLegacy
},
getProxyVideos: () => {
return state.proxyVideos
},
getDefaultVolume: () => {
return state.defaultVolume
},
getDefaultPlayback: () => {
return state.defaultPlayback
},
getDefaultVideoFormat: () => {
return state.defaultVideoFormat
},
getDefaultQuality: () => {
return state.defaultQuality
}
}
const actions = {
grabUserSettings ({ commit }) {
settingsDb.find({}, (err, results) => {
if (!err) {
console.log(results)
results.forEach((result) => {
switch (result._id) {
case 'backendFallback':
commit('setBackendFallback', result.value)
break
case 'checkForUpdates':
commit('setCheckForUpdates', result.value)
break
case 'backendPreference':
commit('setBackendPreference', result.value)
break
case 'landingPage':
commit('setLandingPage', result.value)
break
case 'region':
commit('setRegion', result.value)
break
case 'listType':
commit('setListType', result.value)
break
case 'thumbnailPreference':
commit('setThumbnailPreference', result.value)
break
case 'barColor':
commit('setBarColor', result.value)
break
case 'rememberHistory':
commit('setRememberHistory', result.value)
break
case 'autoplayVideos':
commit('setAutoplayVideos', result.value)
break
case 'autoplayPlaylists':
commit('setAutoplayPlaylists', result.value)
break
case 'playNextVideo':
commit('setPlayNextVideo', result.value)
break
case 'enableSubtitles':
commit('setEnableSubtitles', result.value)
break
case 'forceLocalBackendForLegacy':
commit('setForceLocalBackendForLegacy', result.value)
break
case 'proxyVideos':
commit('setProxyVideos', result.value)
break
case 'defaultVolume':
commit('setDefaultVolume', result.value)
sessionStorage.setItem('volume', result.value)
break
case 'defaultPlayback':
commit('setDefaultPlayback', result.value)
break
case 'defaultVideoFormat':
commit('setDefaultVideoFormat', result.value)
break
case 'defaultQuality':
commit('setDefaultQuality', result.value)
break
}
})
}
})
},
updateBackendFallback ({ commit }, backendFallback) {
settingsDb.update({ _id: 'backendFallback' }, { _id: 'backendFallback', value: backendFallback }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setBackendFallback', backendFallback)
}
})
},
updateCheckForUpdates ({ commit }, checkForUpdates) {
settingsDb.update({ _id: 'checkForUpdates' }, { _id: 'checkForUpdates', value: checkForUpdates }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setCheckForUpdates', checkForUpdates)
}
})
},
updateBackendPreference ({ commit }, backendPreference) {
settingsDb.update({ _id: 'backendPreference' }, { _id: 'backendPreference', value: backendPreference }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setBackendPreference', backendPreference)
}
})
},
updateLandingPage ({ commit }, landingPage) {
settingsDb.update({ _id: 'landingPage' }, { _id: 'landingPage', value: landingPage }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setLandingPage', landingPage)
}
})
},
updateRegion ({ commit }, region) {
settingsDb.update({ _id: 'region' }, { _id: 'region', value: region }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setRegion', region)
}
})
},
updateListType ({ commit }, listType) {
settingsDb.update({ _id: 'listType' }, { _id: 'listType', value: listType }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setListType', listType)
}
})
},
updateThumbnailPreference ({ commit }, thumbnailPreference) {
settingsDb.update({ _id: 'thumbnailPreference' }, { _id: 'thumbnailPreference', value: thumbnailPreference }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setThumbnailPreference', thumbnailPreference)
}
})
},
updateBarColor ({ commit }, barColor) {
settingsDb.update({ _id: 'barColor' }, { _id: 'barColor', value: barColor }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setBarColor', barColor)
}
})
},
updateRememberHistory ({ commit }, history) {
settingsDb.update({ _id: 'rememberHistory' }, { _id: 'rememberHistory', value: history }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setRememberHistory', history)
}
})
},
updateAutoplayVideos ({ commit }, autoplayVideos) {
settingsDb.update({ _id: 'autoplayVideos' }, { _id: 'autoplayVideos', value: autoplayVideos }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setAutoplayVideos', autoplayVideos)
}
})
},
updateAutoplayPlaylists ({ commit }, autoplayPlaylists) {
settingsDb.update({ _id: 'autoplayPlaylists' }, { _id: 'autoplayPlaylists', value: autoplayPlaylists }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setAutoplayPlaylists', autoplayPlaylists)
}
})
},
updatePlayNextVideo ({ commit }, playNextVideo) {
settingsDb.update({ _id: 'playNextVideo' }, { _id: 'playNextVideo', value: playNextVideo }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setPlayNextVideo', playNextVideo)
}
})
},
updateEnableSubtitles ({ commit }, enableSubtitles) {
settingsDb.update({ _id: 'enableSubtitles' }, { _id: 'enableSubtitles', value: enableSubtitles }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setEnableSubtitles', enableSubtitles)
}
})
},
updateForceLocalBackendForLegacy ({ commit }, forceLocalBackendForLegacy) {
settingsDb.update({ _id: 'forceLocalBackendForLegacy' }, { _id: 'forceLocalBackendForLegacy', value: forceLocalBackendForLegacy }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setForceLocalBackendForLegacy', forceLocalBackendForLegacy)
}
})
},
updateProxyVideos ({ commit }, proxyVideos) {
settingsDb.update({ _id: 'proxyVideos' }, { _id: 'proxyVideos', value: proxyVideos }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setProxyVideos', proxyVideos)
}
})
},
updateDefaultVolume ({ commit }, defaultVolume) {
settingsDb.update({ _id: 'defaultVolume' }, { _id: 'defaultVolume', value: defaultVolume }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setDefaultVolume', defaultVolume)
sessionStorage.setItem('volume', defaultVolume)
}
})
},
updateDefaultPlayback ({ commit }, defaultPlayback) {
settingsDb.update({ _id: 'defaultPlayback' }, { _id: 'defaultPlayback', value: defaultPlayback }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setDefaultPlayback', defaultPlayback)
}
})
},
updateDefaultVideoFormat ({ commit }, defaultVideoFormat) {
settingsDb.update({ _id: 'defaultVideoFormat' }, { _id: 'defaultVideoFormat', value: defaultVideoFormat }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setDefaultVideoFormat', defaultVideoFormat)
}
})
},
updateDefaultQuality ({ commit }, defaultQuality) {
settingsDb.update({ _id: 'defaultQuality' }, { _id: 'defaultQuality', value: defaultQuality }, { upsert: true }, (err, numReplaced) => {
if (!err) {
commit('setDefaultQuality', defaultQuality)
}
})
},
updateUseTor ({ commit }, useTor) {
settingsDb.update({ _id: useTor }, { value: useTor }, { upsert: true }, (err, useTor) => {
if (!err) {
commit('setUseTor', useTor)
}
})
}
}
const mutations = {
setCurrentTheme (state, currentTheme) {
state.barColor = currentTheme
},
setBackendFallback (state, backendFallback) {
state.backendFallback = backendFallback
},
setCheckForUpdates (state, checkForUpdates) {
state.checkForUpdates = checkForUpdates
},
setBackendPreference (state, backendPreference) {
state.backendPreference = backendPreference
},
setLandingPage (state, defaultLandingPage) {
state.defaultLandingPage = defaultLandingPage
},
setRegion (state, region) {
state.region = region
},
setListType (state, listType) {
state.listType = listType
},
setThumbnailPreference (state, thumbnailPreference) {
state.thumbnailPreference = thumbnailPreference
},
setBarColor (state, barColor) {
state.barColor = barColor
},
setRememberHistory (state, rememberHistory) {
state.rememberHistory = rememberHistory
},
setAutoplayVideos (state, autoplayVideos) {
state.autoplayVideos = autoplayVideos
},
setAutoplayPlaylists (state, autoplayPlaylists) {
state.autoplayPlaylists = autoplayPlaylists
},
setPlayNextVideo (state, playNextVideo) {
state.playNextVideo = playNextVideo
},
setEnableSubtitles (state, enableSubtitles) {
state.enableSubtitles = enableSubtitles
},
setForceLocalBackendForLegacy (state, forceLocalBackendForLegacy) {
state.forceLocalBackendForLegacy = forceLocalBackendForLegacy
},
setProxyVideos (state, proxyVideos) {
state.proxyVideos = proxyVideos
},
setDefaultVolume (state, defaultVolume) {
state.defaultVolume = defaultVolume
},
setDefaultPlayback (state, defaultPlayback) {
state.defaultPlayback = defaultPlayback
},
setDefaultVideoFormat (state, defaultVideoFormat) {
state.defaultVideoFormat = defaultVideoFormat
},
setDefaultQuality (state, defaultQuality) {
state.defaultQuality = defaultQuality
},
setProxy (state, proxy) {
state.proxy = proxy
},
setUseTor (state, useTor) {
state.useTor = useTor
},
setDebugMode (state, debugMode) {
state.debugMode = debugMode
},
setDistractionFreeMode (state, disctractionFreeMode) {
state.disctractionFreeMode = disctractionFreeMode
},
setHideWatchedSubs (state, hideWatchedSubs) {
state.hideWatchedSubs = hideWatchedSubs
},
setVideoView (state, videoView) {
state.videoView = videoView
},
setProfileList (state, profileList) {
state.profileList = profileList
},
setDefaultProfile (state, defaultProfile) {
state.defaultProfile = defaultProfile
}
}
export default {
state,
getters,
actions,
mutations
}