Christopher Serr 9f3ed503ec Clean up some async race conditions & CSS fixes (#930)
The dialogs are now asynchronous as opposed to the browser built-in ones
that are synchronous, probably because they are incredibly old. The
problem with the new dialogs being asynchronous is that for example the
hotkeys, the server protocol and honestly any sort of async download
that's still running in the background can all mess with the timer while
the dialog is open. This could lead to all sorts of weird issues, like
the timer being in a different state than what the dialog expects, the
timer being reset twice and creating two dialogs that are open at the
same time and possibly even memory corruption in the Rust code.

This commit ensures that the timer can not be interacted with while it
is "locked for interaction". In fact we already had such a notion where
when you navigate to the settings, layout or run editor, the hotkeys
would be disabled. Now this is concept is extended so the event sink
also can prevent interaction with the timer. Navigating to these menus
and opening dialogs will now trigger this locking mechanism.

Additionally this improves various async race conditions in the splits
editor related to downloading resources from speedrun.com or splits.io.

This also touches the CSS of the dialogs again, adding some spacing
around the dialog, so it doesn't touch the edges of the window and
allowing the buttons to have more dynamic sizing. In particular I've
noticed that the text sometimes doesn't fit into the buttons on iOS, so
they are now allowed to grow a little to handle that situation.

File open dialogs also now know the file extensions of the files we are
looking for.
2024-06-19 19:47:08 +02:00
2024-04-16 20:14:28 -04:00
2016-12-29 20:07:06 +01:00
2024-05-28 17:33:39 -05:00
2024-05-09 17:22:01 +02:00

LiveSplit LiveSplit One

Build Status

LiveSplit One is a version of LiveSplit that uses the multiplatform livesplit-core library and web technologies like React to create a new LiveSplit experience that works on a lot of different platforms.

The web version of LiveSplit One is available here.

Build Instructions

In order to build LiveSplit One, you need to install npm and the Rust compiler. Make sure to recursively clone the repository so that all git submodules are cloned as well:

git clone --recursive

Once you have cloned the repository and set up both npm and the Rust compiler, you need to install the WebAssembly target:

rustup target add wasm32-unknown-unknown

You also need to build wasm-bindgen:

cargo install wasm-bindgen-cli

You need to set up some npm modules before compiling the project:

npm install -f

You are now ready to build livesplit-core, which powers LiveSplit One:

npm run build:core

Now you can build and host LiveSplit One:

npm run start

A browser tab with LiveSplit One should now open. Alternatively, you can use npm run serve to just host it without opening a browser tab.

Browser Support

Browser Compatibility Known Issues
Chrome ≥91 GitHub issues by-label
Firefox ≥89 GitHub issues by-label
Edge ≥91 GitHub issues by-label
Safari ≥16.4
Opera ≥77 GitHub issues by-label
iOS ≥16.4 GitHub issues by-label
Android WebView ≥91 GitHub issues by-label
Chrome Android ≥91 GitHub issues by-label
Firefox Android ≥89 GitHub issues by-label
Internet Explorer Unsupported
Opera Mini Unsupported
S
Description
A version of LiveSplit that works on a lot of platforms.
Readme MIT
15 MiB
Languages
TypeScript 85.7%
SCSS 7.5%
JavaScript 3.1%
Rust 3%
CSS 0.4%
Other 0.3%