diff --git a/ui/v2.5/src/hooks/Interactive/context.tsx b/ui/v2.5/src/hooks/Interactive/context.tsx index 04c2548ab..a42f0aa7b 100644 --- a/ui/v2.5/src/hooks/Interactive/context.tsx +++ b/ui/v2.5/src/hooks/Interactive/context.tsx @@ -62,15 +62,17 @@ export const InteractiveContext = React.createContext({ }); const LOCAL_FORAGE_KEY = "interactive"; +const TIME_BETWEEN_SYNCS = 60 * 60 * 1000; // 1 hour interface IInteractiveState { serverOffset: number; + lastSyncTime: number; } export const InteractiveProvider: React.FC = ({ children }) => { const [{ data: config }, setConfig] = useLocalForage( LOCAL_FORAGE_KEY, - { serverOffset: 0 } + { serverOffset: 0, lastSyncTime: 0 } ); const { configuration: stashConfig } = React.useContext(ConfigurationContext); @@ -91,13 +93,17 @@ export const InteractiveProvider: React.FC = ({ children }) => { const initialise = useCallback(async () => { setError(undefined); - if (!config?.serverOffset) { + const shouldResync = + !config?.lastSyncTime || + Date.now() - config?.lastSyncTime > TIME_BETWEEN_SYNCS; + + if (!config?.serverOffset || shouldResync) { setState(ConnectionState.Syncing); const offset = await interactive.sync(); - setConfig({ serverOffset: offset }); - setState(ConnectionState.Ready); - setInitialised(true); - } else { + setConfig({ serverOffset: offset, lastSyncTime: Date.now() }); + } + + if (config?.serverOffset) { interactive.setServerTimeOffset(config.serverOffset); setState(ConnectionState.Connecting); try { @@ -159,7 +165,7 @@ export const InteractiveProvider: React.FC = ({ children }) => { setState(ConnectionState.Syncing); const offset = await interactive.sync(); - setConfig({ serverOffset: offset }); + setConfig({ serverOffset: offset, lastSyncTime: Date.now() }); setState(ConnectionState.Ready); }, [interactive, state, setConfig, initialised]);