fix: CLI deadlock

This commit is contained in:
2025-03-14 00:45:26 +00:00
parent 90ba27c967
commit e1ff28d4e0
3 changed files with 17 additions and 9 deletions

View File

@ -15,6 +15,12 @@ bun run tauri dev
bun run tauri build
```
Once a profile is set up, it is possible to bypass the GUI:
```sh
startliner --start --game ongeki --name profile-name
```
### Package format
- [Package format requirements](https://rainy.patafour.zip/package/create/docs/)
@ -45,20 +51,19 @@ Arbitrary scripts are not supported by design and that will probably never chang
### Architecture details
- Downloaded packages are stored in `%APPDATA%\7EVENDAYSHOLIDAYS\STARTLINER\data\pkg` (on Linux it's `~/.local/share/startliner` by default).
- Each profile is associated with a prefix directory `%APPDATA\7EVENDAYSHOLIDAYS\STARTLINER\data\profile-x` which includes the following:
- Downloaded packages are stored in `%LOCALAPPDATA%\STARTLINER\data\pkg` (or `$XDG_DATA_HOME/startliner/pkg`).
- Each profile is associated with a prefix directory `%LOCALAPPDATA%\STARTLINER\data\profile-x` which includes:
- `option` with junctions of vanilla opts as well as Rainycolor package opts
- `BepInEx` with Rainycolor mods copied over
- It's currently pointless to symlink those since they are measured in kilobytes
- `segatools.ini` generated on-the-fly and pointing at `option`
- It's currently based on the existing `segatools.ini` but that will change in the future
- `aime.txt` (if enabled)
- logs
- Persistent configuration is stored in `%APPDATA%\STARTLINER` (or `$XDG_CONFIG_HOME/startliner`).
### Todo
- Auto-updates
- Running from CLI
- Multiple profiles
- CHUNITHM support
- segatools as a special package
- Progress bars and other GUI sugar

View File

@ -23,6 +23,7 @@ pub async fn startline(app: AppHandle) -> Result<(), String> {
hash = appd.sum_packages(p);
}
if let Some(p) = &mut appd.profile {
log::debug!("{}", hash);
p.line_up(app.clone(), hash).await
.map_err(|e| format!("Lineup failed:\n{}", e))?;
p.start(app.clone()).await

View File

@ -127,10 +127,12 @@ pub async fn run(_args: Vec<String>) {
let apph = apph.clone();
tauri::async_runtime::spawn(async move {
let mtx = apph.state::<Mutex<AppData>>();
let mut appd = mtx.lock().await;
if let Err(e) = appd.pkgs.reload_all().await {
log::error!("Unable to reload packages: {}", e);
apph.exit(1);
{
let mut appd = mtx.lock().await;
if let Err(e) = appd.pkgs.reload_all().await {
log::error!("Unable to reload packages: {}", e);
apph.exit(1);
}
}
if let Err(e) = cmd::startline(apph.clone()).await {
log::error!("Unable to launch: {}", e);