mirror of
https://github.com/owncast/owncast.git
synced 2024-11-26 06:46:01 +03:00
Change status handling
This commit is contained in:
parent
c5f02a091b
commit
f5355f244c
1 changed files with 20 additions and 15 deletions
|
@ -1,5 +1,5 @@
|
||||||
import { FC, useEffect, useState } from 'react';
|
import { FC, useEffect, useState } from 'react';
|
||||||
import { atom, selector, useRecoilState, useSetRecoilState } from 'recoil';
|
import { atom, selector, useRecoilState, useSetRecoilState, RecoilEnv } from 'recoil';
|
||||||
import { useMachine } from '@xstate/react';
|
import { useMachine } from '@xstate/react';
|
||||||
import { makeEmptyClientConfig, ClientConfig } from '../../interfaces/client-config.model';
|
import { makeEmptyClientConfig, ClientConfig } from '../../interfaces/client-config.model';
|
||||||
import ClientConfigService from '../../services/client-config-service';
|
import ClientConfigService from '../../services/client-config-service';
|
||||||
|
@ -27,6 +27,8 @@ import ServerStatusService from '../../services/status-service';
|
||||||
import handleNameChangeEvent from './eventhandlers/handleNameChangeEvent';
|
import handleNameChangeEvent from './eventhandlers/handleNameChangeEvent';
|
||||||
import { DisplayableError } from '../../types/displayable-error';
|
import { DisplayableError } from '../../types/displayable-error';
|
||||||
|
|
||||||
|
RecoilEnv.RECOIL_DUPLICATE_ATOM_KEY_CHECKING_ENABLED = false;
|
||||||
|
|
||||||
const SERVER_STATUS_POLL_DURATION = 5000;
|
const SERVER_STATUS_POLL_DURATION = 5000;
|
||||||
const ACCESS_TOKEN_KEY = 'accessToken';
|
const ACCESS_TOKEN_KEY = 'accessToken';
|
||||||
|
|
||||||
|
@ -149,7 +151,7 @@ export const visibleChatMessagesSelector = selector<ChatMessage[]>({
|
||||||
});
|
});
|
||||||
|
|
||||||
export const ClientConfigStore: FC = () => {
|
export const ClientConfigStore: FC = () => {
|
||||||
const [, appStateSend, appStateService] = useMachine(appStateModel);
|
const [appState, appStateSend, appStateService] = useMachine(appStateModel);
|
||||||
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);
|
||||||
|
@ -161,7 +163,7 @@ 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 [hasLoadedStatus, setHasLoadedStatus] = useState(false);
|
const [, setHasLoadedStatus] = useState(false);
|
||||||
const [hasLoadedConfig, setHasLoadedConfig] = useState(false);
|
const [hasLoadedConfig, setHasLoadedConfig] = useState(false);
|
||||||
|
|
||||||
let ws: WebsocketService;
|
let ws: WebsocketService;
|
||||||
|
@ -173,10 +175,23 @@ export const ClientConfigStore: FC = () => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
const sendEvent = (event: string) => {
|
const sendEvent = (event: string) => {
|
||||||
console.debug('---- sending event:', event);
|
// console.debug('---- sending event:', event);
|
||||||
appStateSend({ type: event });
|
appStateSend({ type: event });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleStatusChange = (status: ServerStatus) => {
|
||||||
|
if (appState.matches('loading')) {
|
||||||
|
sendEvent(AppStateEvent.Loaded);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status.online && appState.matches('ready.offline')) {
|
||||||
|
sendEvent(AppStateEvent.Online);
|
||||||
|
} else if (!status.online && !appState.matches('ready.offline')) {
|
||||||
|
sendEvent(AppStateEvent.Offline);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const updateClientConfig = async () => {
|
const updateClientConfig = async () => {
|
||||||
try {
|
try {
|
||||||
const config = await ClientConfigService.getConfig();
|
const config = await ClientConfigService.getConfig();
|
||||||
|
@ -345,17 +360,7 @@ export const ClientConfigStore: FC = () => {
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (hasLoadedStatus && hasLoadedConfig) {
|
handleStatusChange(serverStatus);
|
||||||
sendEvent(AppStateEvent.Loaded);
|
|
||||||
}
|
|
||||||
}, [hasLoadedStatus, hasLoadedConfig]);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (serverStatus.online) {
|
|
||||||
sendEvent(AppStateEvent.Online);
|
|
||||||
} else {
|
|
||||||
sendEvent(AppStateEvent.Offline);
|
|
||||||
}
|
|
||||||
}, [serverStatus]);
|
}, [serverStatus]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
Loading…
Reference in a new issue