]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/src/app/core/wrappers/storage.service.ts
Merge branch 'release/3.2.0' into develop
[github/Chocobozzz/PeerTube.git] / client / src / app / core / wrappers / storage.service.ts
CommitLineData
d3217560 1import { Observable, Subject } from 'rxjs'
d3217560 2import { filter } from 'rxjs/operators'
67ed6552 3import { Injectable } from '@angular/core'
4504f09f 4import { peertubeLocalStorage, peertubeSessionStorage } from '@root-helpers/peertube-web-storage'
d3217560
RK
5
6abstract class StorageService {
7 protected instance: Storage
8 static storageSub = new Subject<string>()
9
10 watch (keys?: string[]): Observable<string> {
11 return StorageService.storageSub.asObservable().pipe(filter(val => keys ? keys.includes(val) : true))
12 }
13
288bcd7a
C
14 getItem <T extends string> (key: string) {
15 return this.instance.getItem(key) as T
d3217560
RK
16 }
17
18 setItem (key: string, data: any, notifyOfUpdate = true) {
19 this.instance.setItem(key, data)
20 if (notifyOfUpdate) StorageService.storageSub.next(key)
21 }
22
23 removeItem (key: string, notifyOfUpdate = true) {
24 this.instance.removeItem(key)
25 if (notifyOfUpdate) StorageService.storageSub.next(key)
26 }
27}
28
29@Injectable()
30export class LocalStorageService extends StorageService {
31 protected instance: Storage = peertubeLocalStorage
32}
33
34@Injectable()
35export class SessionStorageService extends StorageService {
36 protected instance: Storage = peertubeSessionStorage
37}