diff options
| author | 2026-01-14 14:17:34 +0800 | |
|---|---|---|
| committer | 2026-01-14 14:17:34 +0800 | |
| commit | 45551629e1f84060d56efb3e9b362af10a1caded (patch) | |
| tree | c0d540a2ed18f6c62e0661437490579d5ba30e17 /src-tauri/src | |
| parent | d689d0b8d33ad9d3bc5c235bbfb3ce792efe7536 (diff) | |
| parent | 7854f1247d8f172cfd5011895100c2c69c34878f (diff) | |
| download | DropOut-45551629e1f84060d56efb3e9b362af10a1caded.tar.gz DropOut-45551629e1f84060d56efb3e9b362af10a1caded.zip | |
Merge pull request #16 from NtskwK/feat/enabled-version
Diffstat (limited to 'src-tauri/src')
| -rw-r--r-- | src-tauri/src/main.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 73310d5..53d9388 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -587,6 +587,48 @@ async fn get_versions() -> Result<Vec<core::manifest::Version>, String> { } #[tauri::command] +async fn get_installed_versions(app_handle: tauri::AppHandle) -> Result<Vec<String>, String> { + let game_dir = app_handle + .path() + .app_data_dir() + .map_err(|e| format!("Failed to get app data dir: {}", e))?; + + let versions_dir = game_dir.join("versions"); + + let entries = match std::fs::read_dir(&versions_dir) { + Ok(entries) => entries, + Err(e) if e.kind() == std::io::ErrorKind::NotFound => { + // No versions directory yet; treat as "no versions installed" + return Ok(Vec::new()); + } + Err(e) => { + eprintln!( + "Failed to read versions directory {}: {}", + versions_dir.display(), + e + ); + return Err(format!("Failed to read versions directory: {}", e)); + } + }; + + let installed_versions = entries + .flatten() + .filter(|entry| entry.file_type().map(|ft| ft.is_dir()).unwrap_or(false)) + .filter_map(|entry| { + let file_name = entry.file_name().into_string().ok()?; + let json_path = entry.path().join(format!("{}.json", file_name)); + if json_path.exists() { + Some(file_name) + } else { + None + } + }) + .collect(); + + Ok(installed_versions) +} + +#[tauri::command] async fn login_offline( window: Window, state: State<'_, core::auth::AccountState>, @@ -784,6 +826,7 @@ fn main() { .invoke_handler(tauri::generate_handler![ start_game, get_versions, + get_installed_versions, login_offline, get_active_account, logout, |