131 lines
3.8 KiB
TypeScript
131 lines
3.8 KiB
TypeScript
import './util/handleError';
|
|
import './util/setupServiceWorker';
|
|
import './global/init';
|
|
|
|
import TeactDOM from './lib/teact/teact-dom';
|
|
import {
|
|
getActions, getGlobal,
|
|
} from './global';
|
|
|
|
import {
|
|
DEBUG, STRICTERDOM_ENABLED,
|
|
} from './config';
|
|
import { enableStrict, requestMutation } from './lib/fasterdom/fasterdom';
|
|
import { selectChat, selectCurrentMessageList, selectPeerFullInfo, selectTabState } from './global/selectors';
|
|
import { selectSharedSettings } from './global/selectors/sharedState';
|
|
import { betterView } from './util/betterView';
|
|
import { IS_TAURI } from './util/browser/globalEnvironment';
|
|
import listenOtherClients from './util/browser/listenOtherClients';
|
|
import { requestGlobal, subscribeToMultitabBroadcastChannel } from './util/browser/multitab';
|
|
import { establishMultitabRole, subscribeToMasterChange } from './util/establishMultitabRole';
|
|
import { initGlobal } from './util/init';
|
|
import { initLocalization } from './util/localization';
|
|
import { MULTITAB_STORAGE_KEY } from './util/multiaccount';
|
|
import { checkAndAssignPermanentWebVersion } from './util/permanentWebVersion';
|
|
import { onBeforeUnload } from './util/schedulers';
|
|
import initTauriApi from './util/tauri/initTauriApi';
|
|
import setupTauriListeners from './util/tauri/setupTauriListeners';
|
|
import updateWebmanifest from './util/updateWebmanifest';
|
|
|
|
import App from './components/App';
|
|
|
|
import './assets/fonts/roboto.css';
|
|
import './styles/index.scss';
|
|
|
|
if (STRICTERDOM_ENABLED) {
|
|
enableStrict();
|
|
}
|
|
|
|
if (IS_TAURI) {
|
|
initTauriApi();
|
|
setupTauriListeners();
|
|
}
|
|
|
|
init();
|
|
|
|
async function init() {
|
|
if (DEBUG) {
|
|
// eslint-disable-next-line no-console
|
|
console.log('>>> INIT');
|
|
}
|
|
|
|
if (!(window as any).isCompatTestPassed) return;
|
|
|
|
checkAndAssignPermanentWebVersion();
|
|
listenOtherClients();
|
|
|
|
subscribeToMultitabBroadcastChannel();
|
|
await requestGlobal(APP_VERSION);
|
|
localStorage.setItem(MULTITAB_STORAGE_KEY, '1');
|
|
onBeforeUnload(() => {
|
|
const global = getGlobal();
|
|
if (Object.keys(global.byTabId).length === 1) {
|
|
localStorage.removeItem(MULTITAB_STORAGE_KEY);
|
|
}
|
|
});
|
|
|
|
await initGlobal();
|
|
getActions().init();
|
|
|
|
getActions().updateShouldEnableDebugLog();
|
|
getActions().updateShouldDebugExportedSenders();
|
|
|
|
const global = getGlobal();
|
|
|
|
initLocalization(selectSharedSettings(global).language, true);
|
|
|
|
subscribeToMasterChange((isMasterTab) => {
|
|
getActions()
|
|
.switchMultitabRole({ isMasterTab }, { forceSyncOnIOs: true });
|
|
});
|
|
const shouldReestablishMasterToSelf = getGlobal().auth.state !== 'authorizationStateReady';
|
|
establishMultitabRole(shouldReestablishMasterToSelf);
|
|
|
|
if (DEBUG) {
|
|
// eslint-disable-next-line no-console
|
|
console.log('>>> START INITIAL RENDER');
|
|
}
|
|
|
|
requestMutation(() => {
|
|
updateWebmanifest();
|
|
|
|
TeactDOM.render(
|
|
<App />,
|
|
document.getElementById('root')!,
|
|
);
|
|
|
|
betterView();
|
|
});
|
|
|
|
if (DEBUG) {
|
|
// eslint-disable-next-line no-console
|
|
console.log('>>> FINISH INITIAL RENDER');
|
|
}
|
|
|
|
if (DEBUG) {
|
|
document.addEventListener('dblclick', () => {
|
|
const currentGlobal = getGlobal();
|
|
const currentMessageList = selectCurrentMessageList(currentGlobal);
|
|
// eslint-disable-next-line no-console
|
|
console.warn('TAB STATE', selectTabState(currentGlobal));
|
|
// eslint-disable-next-line no-console
|
|
console.warn('GLOBAL STATE', currentGlobal);
|
|
if (currentMessageList) {
|
|
// eslint-disable-next-line no-console
|
|
console.warn(
|
|
'CURRENT MESSAGE LIST',
|
|
selectChat(currentGlobal, currentMessageList.chatId),
|
|
selectPeerFullInfo(currentGlobal, currentMessageList.chatId),
|
|
currentGlobal.messages.byChatId[currentMessageList.chatId],
|
|
);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
onBeforeUnload(() => {
|
|
const actions = getActions();
|
|
actions.leaveGroupCall?.({ isPageUnload: true });
|
|
actions.hangUp?.({ isPageUnload: true });
|
|
});
|