fix: add logic for force reload when failed to update application because of browser or cdn cache, update status on click
This commit is contained in:
parent
49e8e27c1d
commit
aecd64cb1e
2 changed files with 20 additions and 2 deletions
|
|
@ -187,6 +187,9 @@ export const showNotification = (newNotification: Partial<typeof notification>)
|
|||
// todo restore auto-save on interval for player data! (or implement it in flying squid since there is already auto-save for world)
|
||||
|
||||
window.addEventListener('unload', (e) => {
|
||||
if (!window.justReloaded) {
|
||||
sessionStorage.justReloaded = false
|
||||
}
|
||||
void saveServer()
|
||||
})
|
||||
|
||||
|
|
@ -201,6 +204,10 @@ window.inspectPlayer = () => require('fs').promises.readFile('/world/playerdata/
|
|||
|
||||
// todo move from global state
|
||||
window.addEventListener('beforeunload', (event) => {
|
||||
if (!window.justReloaded) {
|
||||
sessionStorage.justReloaded = false
|
||||
}
|
||||
|
||||
// todo-low maybe exclude chat?
|
||||
if (!isGameActive(true) && activeModalStack.at(-1)?.elem?.id !== 'chat') return
|
||||
if (sessionStorage.lastReload && !options.preventDevReloadWhilePlaying) return
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ interface Props {
|
|||
const refreshApp = async () => {
|
||||
const registration = await navigator.serviceWorker.getRegistration()
|
||||
await registration?.unregister()
|
||||
window.justReloaded = true
|
||||
sessionStorage.justReloaded = true
|
||||
window.location.reload()
|
||||
}
|
||||
|
||||
|
|
@ -36,7 +38,13 @@ export default ({ connectToServerAction, mapsProvider, singleplayerAction, optio
|
|||
fetch('./version.txt').then(async (f) => {
|
||||
if (f.status === 404) return
|
||||
const contents = await f.text()
|
||||
setVersionStatus(`(${contents === process.env.BUILD_VERSION ? 'latest' : 'new version available'})`)
|
||||
const isLatest = contents === process.env.BUILD_VERSION
|
||||
if (!isLatest && sessionStorage.justReloaded) {
|
||||
// try to force bypass cache
|
||||
location.search = '?update=true'
|
||||
}
|
||||
sessionStorage.justReloaded = false
|
||||
setVersionStatus(`(${isLatest ? 'latest' : 'new version available'})`)
|
||||
setVersionTitle(`Loaded: ${process.env.BUILD_VERSION}. Remote: ${contents}`)
|
||||
}, () => { })
|
||||
}
|
||||
|
|
@ -114,7 +122,10 @@ export default ({ connectToServerAction, mapsProvider, singleplayerAction, optio
|
|||
<div className={styles['bottom-info']}>
|
||||
<span
|
||||
title={`${versionTitle} (click to reload)`}
|
||||
onClick={refreshApp}
|
||||
onClick={async () => {
|
||||
setVersionStatus('(reloading)')
|
||||
await refreshApp()
|
||||
}}
|
||||
className={styles['product-info']}
|
||||
>
|
||||
Prismarine Web Client {versionStatus}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue