2018-06-18 09:46:58 +02:00
|
|
|
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
|
2018-06-18 09:46:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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 */
|
2018-06-18 09:46:58 +02:00
|
|
|
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) {
|
2021-03-31 11:26:32 +02:00
|
|
|
return setLocalStorage(`video-watch-history`, JSON.stringify({
|
|
|
|
...getStoredVideoWatchHistory(),
|
2021-06-25 15:40:59 +02:00
|
|
|
|
2021-03-31 11:26:32 +02:00
|
|
|
[videoUUID]: {
|
|
|
|
duration,
|
|
|
|
date: `${(new Date()).toISOString()}`
|
|
|
|
}
|
|
|
|
}))
|
|
|
|
}
|
|
|
|
|
2021-06-25 15:40:59 +02:00
|
|
|
function getStoredVideoWatchHistory (videoUUID?: string) {
|
2021-03-31 11:26:32 +02:00
|
|
|
let data
|
|
|
|
|
|
|
|
try {
|
2021-06-25 15:40:59 +02:00
|
|
|
const value = getLocalStorage('video-watch-history')
|
|
|
|
if (!value) return {}
|
|
|
|
|
|
|
|
data = JSON.parse(value)
|
2021-03-31 11:26:32 +02:00
|
|
|
} catch (error) {
|
|
|
|
console.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 () {
|
2021-03-31 11:26:32 +02:00
|
|
|
const data = getStoredVideoWatchHistory()
|
2021-06-25 15:40:59 +02:00
|
|
|
if (!data) return
|
2021-03-31 11:26:32 +02:00
|
|
|
|
|
|
|
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))
|
|
|
|
}
|
|
|
|
|
2018-06-18 09:46:58 +02:00
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
export {
|
|
|
|
getStoredVolume,
|
|
|
|
getStoredMute,
|
|
|
|
getStoredTheater,
|
|
|
|
saveVolumeInStore,
|
|
|
|
saveMuteInStore,
|
|
|
|
saveTheaterInStore,
|
|
|
|
saveAverageBandwidth,
|
2018-12-17 14:14:54 +01:00
|
|
|
getAverageBandwidthInStore,
|
|
|
|
saveLastSubtitle,
|
2021-03-31 11:26:32 +02:00
|
|
|
getStoredLastSubtitle,
|
|
|
|
saveVideoWatchHistory,
|
|
|
|
getStoredVideoWatchHistory,
|
|
|
|
cleanupVideoWatch
|
2018-06-18 09:46:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
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 */
|
|
|
|
}
|
|
|
|
}
|