forked from akanyan/STARTLINER
fix: CLI deadlock
This commit is contained in:
15
README.md
15
README.md
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user