From 50d1d37ff3c261e42c7785acf482d774735bc99c Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Wed, 11 Dec 2024 08:38:46 +0300 Subject: [PATCH] dev: lock url so app restores the same game state after reloads --- src/browserfs.ts | 11 ++++++----- src/controls.ts | 2 +- src/index.ts | 5 ++++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/browserfs.ts b/src/browserfs.ts index ce8fa56ac..7e66dfe04 100644 --- a/src/browserfs.ts +++ b/src/browserfs.ts @@ -480,7 +480,7 @@ export const openWorldFromHttpDir = async (fileDescriptorUrls: string[]/* | und let index let baseUrl for (const url of fileDescriptorUrls) { - let response: Response | undefined + let file try { setLoadingScreenStatus(`Trying to get world descriptor from ${new URL(url).host}`) const controller = new AbortController() @@ -488,13 +488,13 @@ export const openWorldFromHttpDir = async (fileDescriptorUrls: string[]/* | und controller.abort() }, 3000) // eslint-disable-next-line no-await-in-loop - response = await fetch(url, { signal: controller.signal }) + const response = await fetch(url, { signal: controller.signal }) + // eslint-disable-next-line no-await-in-loop + file = await response.json() } catch (err) { console.error('Error fetching file descriptor', url, err) } - if (!response) continue - // eslint-disable-next-line no-await-in-loop - const file = await response.json() + if (!file) continue if (file.baseUrl) { baseUrl = new URL(file.baseUrl, baseUrl).toString() index = file.index @@ -502,6 +502,7 @@ export const openWorldFromHttpDir = async (fileDescriptorUrls: string[]/* | und index = file baseUrl = baseUrlParam ?? url.split('/').slice(0, -1).join('/') } + break } if (!index) throw new Error(`The provided mapDir file is not valid descriptor file! ${fileDescriptorUrls.join(', ')}`) await new Promise(async resolve => { diff --git a/src/controls.ts b/src/controls.ts index 7f3b7d344..cb1c132bc 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -300,7 +300,7 @@ const alwaysPressedHandledCommand = (command: Command) => { } } -function lockUrl () { +export function lockUrl () { let newQs = '' if (fsState.saveLoaded) { const save = localServer!.options.worldFolder.split('/').at(-1) diff --git a/src/index.ts b/src/index.ts index 28d8eedda..d660ec502 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,7 +22,7 @@ import PrismarineItem from 'prismarine-item' import { options, watchValue } from './optionsStorage' import './reactUi' -import { contro, onBotCreate } from './controls' +import { contro, lockUrl, onBotCreate } from './controls' import './dragndrop' import { possiblyCleanHandle, resetStateAfterDisconnect } from './browserfs' import { watchOptionsAfterViewerInit, watchOptionsAfterWorldViewInit } from './watchOptions' @@ -692,6 +692,9 @@ async function connect (connectOptions: ConnectOptions) { setLoadingScreenStatus('Placing blocks (starting viewer)') localStorage.lastConnectOptions = JSON.stringify(connectOptions) connectOptions.onSuccessfulPlay?.() + if (process.env.NODE_ENV === 'development' && !localStorage.lockUrl && new URLSearchParams(location.search).size === 0) { + lockUrl() + } updateDataAfterJoin() if (connectOptions.autoLoginPassword) { bot.chat(`/login ${connectOptions.autoLoginPassword}`)