1 import { Injectable } from '@angular/core'
2 import { Observable, Subject } from 'rxjs'
6 } from './peertube-web-storage'
7 import { filter } from 'rxjs/operators'
9 abstract class StorageService {
10 protected instance: Storage
11 static storageSub = new Subject<string>()
13 watch (keys?: string[]): Observable<string> {
14 return StorageService.storageSub.asObservable().pipe(filter(val => keys ? keys.includes(val) : true))
17 getItem (key: string) {
18 return this.instance.getItem(key)
21 setItem (key: string, data: any, notifyOfUpdate = true) {
22 this.instance.setItem(key, data)
23 if (notifyOfUpdate) StorageService.storageSub.next(key)
26 removeItem (key: string, notifyOfUpdate = true) {
27 this.instance.removeItem(key)
28 if (notifyOfUpdate) StorageService.storageSub.next(key)
33 export class LocalStorageService extends StorageService {
34 protected instance: Storage = peertubeLocalStorage
38 export class SessionStorageService extends StorageService {
39 protected instance: Storage = peertubeSessionStorage