aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app/shared/misc/peertube-web-storage.ts
diff options
context:
space:
mode:
authorRigel Kent <sendmemail@rigelk.eu>2019-12-11 22:13:20 +0100
committerChocobozzz <chocobozzz@cpy.re>2019-12-13 09:13:43 +0100
commit88a7f93f8e5666f44121a2e3cf9d33d74c472aa7 (patch)
tree01a5d765f9ffed5cc4cbfc7b8c5fc14eb61548a7 /client/src/app/shared/misc/peertube-web-storage.ts
parent12f18b90ba6395464606052bb1bdfedb6b83df13 (diff)
downloadPeerTube-88a7f93f8e5666f44121a2e3cf9d33d74c472aa7.tar.gz
PeerTube-88a7f93f8e5666f44121a2e3cf9d33d74c472aa7.tar.zst
PeerTube-88a7f93f8e5666f44121a2e3cf9d33d74c472aa7.zip
add loop setting for playlists, and use sessionStorage
Diffstat (limited to 'client/src/app/shared/misc/peertube-web-storage.ts')
-rw-r--r--client/src/app/shared/misc/peertube-web-storage.ts75
1 files changed, 75 insertions, 0 deletions
diff --git a/client/src/app/shared/misc/peertube-web-storage.ts b/client/src/app/shared/misc/peertube-web-storage.ts
new file mode 100644
index 000000000..fff209678
--- /dev/null
+++ b/client/src/app/shared/misc/peertube-web-storage.ts
@@ -0,0 +1,75 @@
1// Thanks: https://github.com/capaj/localstorage-polyfill
2
3const valuesMap = new Map()
4
5class MemoryStorage {
6 [key: string]: any
7 [index: number]: string
8
9 getItem (key: any) {
10 const stringKey = String(key)
11 if (valuesMap.has(key)) {
12 return String(valuesMap.get(stringKey))
13 }
14
15 return null
16 }
17
18 setItem (key: any, val: any) {
19 valuesMap.set(String(key), String(val))
20 }
21
22 removeItem (key: any) {
23 valuesMap.delete(key)
24 }
25
26 clear () {
27 valuesMap.clear()
28 }
29
30 key (i: any) {
31 if (arguments.length === 0) {
32 throw new TypeError('Failed to execute "key" on "Storage": 1 argument required, but only 0 present.')
33 }
34
35 const arr = Array.from(valuesMap.keys())
36 return arr[i]
37 }
38
39 get length () {
40 return valuesMap.size
41 }
42}
43
44let peertubeLocalStorage: Storage
45let peertubeSessionStorage: Storage
46try {
47 peertubeLocalStorage = localStorage
48 peertubeSessionStorage = sessionStorage
49} catch (err) {
50 const instance = new MemoryStorage()
51
52 peertubeLocalStorage = sessionStorage = new Proxy(instance, {
53 set: function (obj, prop: string | number, value) {
54 if (MemoryStorage.prototype.hasOwnProperty(prop)) {
55 instance[prop] = value
56 } else {
57 instance.setItem(prop, value)
58 }
59 return true
60 },
61 get: function (target, name: string | number) {
62 if (MemoryStorage.prototype.hasOwnProperty(name)) {
63 return instance[name]
64 }
65 if (valuesMap.has(name)) {
66 return instance.getItem(name)
67 }
68 }
69 })
70}
71
72export {
73 peertubeLocalStorage,
74 peertubeSessionStorage
75}