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

/*
* 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;