/* * https://github.com/morethanwords/tweb * Copyright (C) 2019-2021 Eduard Kuzmenko * https://github.com/morethanwords/tweb/blob/master/LICENSE */ import type {State} from '../../config/state'; import rootScope from '../rootScope'; import stateStorage from '../stateStorage'; import setDeepProperty from '../../helpers/object/setDeepProperty'; import MTProtoMessagePort from '../mtproto/mtprotoMessagePort'; export class AppStateManager { private state: State = {} as any; private storage = stateStorage; // ! for mtproto worker use only public newVersion: string; public oldVersion: string; public userId: UserId; public getState() { return Promise.resolve(this.state); } public setByKey(key: string, value: any) { setDeepProperty(this.state, key, value); const first = key.split('.')[0] as keyof State; if(first === 'settings') { rootScope.dispatchEvent('settings_updated', {key, value, settings: this.state.settings}); } this.pushToState(first, this.state[first]); } public pushToState(key: T, value: State[T], direct = true, onlyLocal?: boolean) { if(direct) { this.state[key] = value; } this.setKeyValueToStorage(key, value, onlyLocal); } public setKeyValueToStorage(key: T, value: State[T] = this.state[key], onlyLocal?: boolean) { MTProtoMessagePort.getInstance().invokeVoid('mirror', {name: 'state', key, value}); this.storage.set({ [key]: value }, onlyLocal); } /* public resetState() { for(let i in this.state) { // @ts-ignore this.state[i] = false; } sessionStorage.set(this.state).then(() => { location.reload(); }); } */ } const appStateManager = new AppStateManager(); export default appStateManager;