Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.8 KiB
65 lines
1.8 KiB
/* |
|
* 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<T extends keyof State>(key: T, value: State[T], direct = true, onlyLocal?: boolean) { |
|
if(direct) { |
|
this.state[key] = value; |
|
} |
|
|
|
this.setKeyValueToStorage(key, value, onlyLocal); |
|
} |
|
|
|
public setKeyValueToStorage<T extends keyof State>(key: T, value: State[T] = this.state[key], onlyLocal?: boolean) { |
|
MTProtoMessagePort.getInstance<false>().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;
|
|
|