Speed up initial loading state

This commit is contained in:
Gabe Kangas
2023-01-31 23:28:05 -08:00
parent b05ff79cf0
commit a84af0870a

View File

@@ -158,7 +158,7 @@ export const ClientConfigStore: FC = () => {
const [currentUser, setCurrentUser] = useRecoilState(currentUserAtom); const [currentUser, setCurrentUser] = useRecoilState(currentUserAtom);
const setChatAuthenticated = useSetRecoilState<boolean>(chatAuthenticatedAtom); const setChatAuthenticated = useSetRecoilState<boolean>(chatAuthenticatedAtom);
const [clientConfig, setClientConfig] = useRecoilState<ClientConfig>(clientConfigStateAtom); const [clientConfig, setClientConfig] = useRecoilState<ClientConfig>(clientConfigStateAtom);
const [serverStatus, setServerStatus] = useRecoilState<ServerStatus>(serverStatusState); const [, setServerStatus] = useRecoilState<ServerStatus>(serverStatusState);
const setClockSkew = useSetRecoilState<Number>(clockSkewAtom); const setClockSkew = useSetRecoilState<Number>(clockSkewAtom);
const [chatMessages, setChatMessages] = useRecoilState<ChatMessage[]>(chatMessagesAtom); const [chatMessages, setChatMessages] = useRecoilState<ChatMessage[]>(chatMessagesAtom);
const [accessToken, setAccessToken] = useRecoilState<string>(accessTokenAtom); const [accessToken, setAccessToken] = useRecoilState<string>(accessTokenAtom);
@@ -166,7 +166,6 @@ export const ClientConfigStore: FC = () => {
const setGlobalFatalErrorMessage = useSetRecoilState<DisplayableError>(fatalErrorStateAtom); const setGlobalFatalErrorMessage = useSetRecoilState<DisplayableError>(fatalErrorStateAtom);
const setWebsocketService = useSetRecoilState<WebsocketService>(websocketServiceAtom); const setWebsocketService = useSetRecoilState<WebsocketService>(websocketServiceAtom);
const [hiddenMessageIds, setHiddenMessageIds] = useRecoilState<string[]>(removedMessageIdsAtom); const [hiddenMessageIds, setHiddenMessageIds] = useRecoilState<string[]>(removedMessageIdsAtom);
const [, setHasLoadedStatus] = useState(false);
const [hasLoadedConfig, setHasLoadedConfig] = useState(false); const [hasLoadedConfig, setHasLoadedConfig] = useState(false);
let ws: WebsocketService; let ws: WebsocketService;
@@ -177,21 +176,27 @@ export const ClientConfigStore: FC = () => {
message, message,
}); });
}; };
const sendEvent = (event: string) => { const sendEvent = (events: string[]) => {
// console.debug('---- sending event:', event); // console.debug('---- sending event:', event);
appStateSend({ type: event }); appStateSend(events);
}; };
const handleStatusChange = (status: ServerStatus) => { const handleStatusChange = (status: ServerStatus) => {
if (appState.matches('loading')) { if (appState.matches('loading')) {
sendEvent(AppStateEvent.Loaded); const events = [AppStateEvent.Loaded];
if (status.online) {
events.push(AppStateEvent.Online);
} else {
events.push(AppStateEvent.Offline);
}
sendEvent(events);
return; return;
} }
if (status.online && appState.matches('ready')) { if (status.online && appState.matches('ready')) {
sendEvent(AppStateEvent.Online); sendEvent([AppStateEvent.Online]);
} else if (!status.online && !appState.matches('ready.offline')) { } else if (!status.online && !appState.matches('ready.offline')) {
sendEvent(AppStateEvent.Offline); sendEvent([AppStateEvent.Offline]);
} }
}; };
@@ -210,8 +215,9 @@ export const ClientConfigStore: FC = () => {
const updateServerStatus = async () => { const updateServerStatus = async () => {
try { try {
const status = await ServerStatusService.getStatus(); const status = await ServerStatusService.getStatus();
handleStatusChange(status);
setServerStatus(status); setServerStatus(status);
setHasLoadedStatus(true);
const { serverTime } = status; const { serverTime } = status;
const clockSkew = new Date(serverTime).getTime() - Date.now(); const clockSkew = new Date(serverTime).getTime() - Date.now();
@@ -219,7 +225,7 @@ export const ClientConfigStore: FC = () => {
setGlobalFatalErrorMessage(null); setGlobalFatalErrorMessage(null);
} catch (error) { } catch (error) {
sendEvent(AppStateEvent.Fail); sendEvent([AppStateEvent.Fail]);
setGlobalFatalError('Unable to reach Owncast server', serverConnectivityError); setGlobalFatalError('Unable to reach Owncast server', serverConnectivityError);
console.error(`serverStatusState -> getStatus() ERROR: \n${error}`); console.error(`serverStatusState -> getStatus() ERROR: \n${error}`);
} }
@@ -233,7 +239,7 @@ export const ClientConfigStore: FC = () => {
} }
try { try {
sendEvent(AppStateEvent.NeedsRegister); sendEvent([AppStateEvent.NeedsRegister]);
const response = await ChatService.registerUser(optionalDisplayName); const response = await ChatService.registerUser(optionalDisplayName);
const { accessToken: newAccessToken, displayName: newDisplayName, displayColor } = response; const { accessToken: newAccessToken, displayName: newDisplayName, displayColor } = response;
if (!newAccessToken) { if (!newAccessToken) {
@@ -248,7 +254,7 @@ export const ClientConfigStore: FC = () => {
setAccessToken(newAccessToken); setAccessToken(newAccessToken);
setLocalStorage(ACCESS_TOKEN_KEY, newAccessToken); setLocalStorage(ACCESS_TOKEN_KEY, newAccessToken);
} catch (e) { } catch (e) {
sendEvent(AppStateEvent.Fail); sendEvent([AppStateEvent.Fail]);
console.error(`ChatService -> registerUser() ERROR: \n${e}`); console.error(`ChatService -> registerUser() ERROR: \n${e}`);
} }
}; };
@@ -356,17 +362,13 @@ export const ClientConfigStore: FC = () => {
if ((window as any).statusHydration) { if ((window as any).statusHydration) {
const status = JSON.parse((window as any).statusHydration); const status = JSON.parse((window as any).statusHydration);
setServerStatus(status); setServerStatus(status);
setHasLoadedStatus(true); handleStatusChange(status);
} }
} catch (e) { } catch (e) {
console.error('error parsing status hydration', e); console.error('error parsing status hydration', e);
} }
}, []); }, []);
useEffect(() => {
handleStatusChange(serverStatus);
}, [serverStatus]);
useEffect(() => { useEffect(() => {
if (!clientConfig.chatDisabled && accessToken && hasLoadedConfig) { if (!clientConfig.chatDisabled && accessToken && hasLoadedConfig) {
startChat(); startChat();