]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/assets/player/peertube-player-local-storage.ts
Bumped to version v5.2.1
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / peertube-player-local-storage.ts
CommitLineData
42b40636
C
1import { logger } from '@root-helpers/logger'
2
7b3a99d5
C
3function getStoredVolume () {
4 const value = getLocalStorage('volume')
5 if (value !== null && value !== undefined) {
6 const valueNumber = parseFloat(value)
7 if (isNaN(valueNumber)) return undefined
8
9 return valueNumber
10 }
11
12 return undefined
13}
14
15function getStoredMute () {
16 const value = getLocalStorage('mute')
17 if (value !== null && value !== undefined) return value === 'true'
18
19 return undefined
20}
21
22function getStoredTheater () {
23 const value = getLocalStorage('theater-enabled')
24 if (value !== null && value !== undefined) return value === 'true'
25
011e1e6b 26 return false
7b3a99d5
C
27}
28
29function saveVolumeInStore (value: number) {
30 return setLocalStorage('volume', value.toString())
31}
32
33function saveMuteInStore (value: boolean) {
34 return setLocalStorage('mute', value.toString())
35}
36
37function saveTheaterInStore (enabled: boolean) {
38 return setLocalStorage('theater-enabled', enabled.toString())
39}
40
41function saveAverageBandwidth (value: number) {
ff563914 42 /** used to choose the most fitting resolution */
7b3a99d5
C
43 return setLocalStorage('average-bandwidth', value.toString())
44}
45
46function getAverageBandwidthInStore () {
47 const value = getLocalStorage('average-bandwidth')
48 if (value !== null && value !== undefined) {
49 const valueNumber = parseInt(value, 10)
50 if (isNaN(valueNumber)) return undefined
51
52 return valueNumber
53 }
54
55 return undefined
56}
57
3b019808
C
58function saveLastSubtitle (language: string) {
59 return setLocalStorage('last-subtitle', language)
60}
61
62function getStoredLastSubtitle () {
63 return getLocalStorage('last-subtitle')
64}
65
c6bfbaeb 66function saveVideoWatchHistory (videoUUID: string, duration: number) {
58b9ce30 67 return setLocalStorage(`video-watch-history`, JSON.stringify({
68 ...getStoredVideoWatchHistory(),
c6bfbaeb 69
58b9ce30 70 [videoUUID]: {
71 duration,
72 date: `${(new Date()).toISOString()}`
73 }
74 }))
75}
76
c6bfbaeb 77function getStoredVideoWatchHistory (videoUUID?: string) {
58b9ce30 78 let data
79
80 try {
c6bfbaeb
C
81 const value = getLocalStorage('video-watch-history')
82 if (!value) return {}
83
84 data = JSON.parse(value)
58b9ce30 85 } catch (error) {
42b40636 86 logger.error('Cannot parse video watch history from local storage/', error)
58b9ce30 87 }
88
89 data = data || {}
90
91 if (videoUUID) return data[videoUUID]
92
93 return data
94}
95
c6bfbaeb 96function cleanupVideoWatch () {
58b9ce30 97 const data = getStoredVideoWatchHistory()
c6bfbaeb 98 if (!data) return
58b9ce30 99
100 const newData = Object.keys(data).reduce((acc, videoUUID) => {
101 const date = Date.parse(data[videoUUID].date)
102
103 const diff = Math.ceil(((new Date()).getTime() - date) / (1000 * 3600 * 24))
104
105 if (diff > 30) return acc
106
107 return {
108 ...acc,
109 [videoUUID]: data[videoUUID]
110 }
111 }, {})
112
113 setLocalStorage('video-watch-history', JSON.stringify(newData))
114}
115
7b3a99d5
C
116// ---------------------------------------------------------------------------
117
118export {
119 getStoredVolume,
120 getStoredMute,
121 getStoredTheater,
122 saveVolumeInStore,
123 saveMuteInStore,
124 saveTheaterInStore,
125 saveAverageBandwidth,
3b019808
C
126 getAverageBandwidthInStore,
127 saveLastSubtitle,
58b9ce30 128 getStoredLastSubtitle,
129 saveVideoWatchHistory,
130 getStoredVideoWatchHistory,
131 cleanupVideoWatch
7b3a99d5
C
132}
133
134// ---------------------------------------------------------------------------
135
136const KEY_PREFIX = 'peertube-videojs-'
137
138function getLocalStorage (key: string) {
139 try {
140 return localStorage.getItem(KEY_PREFIX + key)
141 } catch {
142 return undefined
143 }
144}
145
146function setLocalStorage (key: string, value: string) {
147 try {
148 localStorage.setItem(KEY_PREFIX + key, value)
149 } catch { /* empty */
150 }
151}