PeerTube/client/src/assets/player/peertube-player-local-stora...

152 lines
3.4 KiB
TypeScript
Raw Normal View History

import { logger } from '@root-helpers/logger'
function getStoredVolume () {
const value = getLocalStorage('volume')
if (value !== null && value !== undefined) {
const valueNumber = parseFloat(value)
if (isNaN(valueNumber)) return undefined
return valueNumber
}
return undefined
}
function getStoredMute () {
const value = getLocalStorage('mute')
if (value !== null && value !== undefined) return value === 'true'
return undefined
}
function getStoredTheater () {
const value = getLocalStorage('theater-enabled')
if (value !== null && value !== undefined) return value === 'true'
2019-06-11 16:26:48 +02:00
return false
}
function saveVolumeInStore (value: number) {
return setLocalStorage('volume', value.toString())
}
function saveMuteInStore (value: boolean) {
return setLocalStorage('mute', value.toString())
}
function saveTheaterInStore (enabled: boolean) {
return setLocalStorage('theater-enabled', enabled.toString())
}
function saveAverageBandwidth (value: number) {
2021-04-12 10:26:30 +02:00
/** used to choose the most fitting resolution */
return setLocalStorage('average-bandwidth', value.toString())
}
function getAverageBandwidthInStore () {
const value = getLocalStorage('average-bandwidth')
if (value !== null && value !== undefined) {
const valueNumber = parseInt(value, 10)
if (isNaN(valueNumber)) return undefined
return valueNumber
}
return undefined
}
2018-12-17 14:14:54 +01:00
function saveLastSubtitle (language: string) {
return setLocalStorage('last-subtitle', language)
}
function getStoredLastSubtitle () {
return getLocalStorage('last-subtitle')
}
2021-06-25 15:40:59 +02:00
function saveVideoWatchHistory (videoUUID: string, duration: number) {
return setLocalStorage(`video-watch-history`, JSON.stringify({
...getStoredVideoWatchHistory(),
2021-06-25 15:40:59 +02:00
[videoUUID]: {
duration,
date: `${(new Date()).toISOString()}`
}
}))
}
2021-06-25 15:40:59 +02:00
function getStoredVideoWatchHistory (videoUUID?: string) {
let data
try {
2021-06-25 15:40:59 +02:00
const value = getLocalStorage('video-watch-history')
if (!value) return {}
data = JSON.parse(value)
} catch (error) {
logger.error('Cannot parse video watch history from local storage/', error)
}
data = data || {}
if (videoUUID) return data[videoUUID]
return data
}
2021-06-25 15:40:59 +02:00
function cleanupVideoWatch () {
const data = getStoredVideoWatchHistory()
2021-06-25 15:40:59 +02:00
if (!data) return
const newData = Object.keys(data).reduce((acc, videoUUID) => {
const date = Date.parse(data[videoUUID].date)
const diff = Math.ceil(((new Date()).getTime() - date) / (1000 * 3600 * 24))
if (diff > 30) return acc
return {
...acc,
[videoUUID]: data[videoUUID]
}
}, {})
setLocalStorage('video-watch-history', JSON.stringify(newData))
}
// ---------------------------------------------------------------------------
export {
getStoredVolume,
getStoredMute,
getStoredTheater,
saveVolumeInStore,
saveMuteInStore,
saveTheaterInStore,
saveAverageBandwidth,
2018-12-17 14:14:54 +01:00
getAverageBandwidthInStore,
saveLastSubtitle,
getStoredLastSubtitle,
saveVideoWatchHistory,
getStoredVideoWatchHistory,
cleanupVideoWatch
}
// ---------------------------------------------------------------------------
const KEY_PREFIX = 'peertube-videojs-'
function getLocalStorage (key: string) {
try {
return localStorage.getItem(KEY_PREFIX + key)
} catch {
return undefined
}
}
function setLocalStorage (key: string, value: string) {
try {
localStorage.setItem(KEY_PREFIX + key, value)
} catch { /* empty */
}
}