diff --git a/.github/workflows/rust.yaml b/.github/workflows/rust.yaml index 9f7046e3..00ae94f8 100644 --- a/.github/workflows/rust.yaml +++ b/.github/workflows/rust.yaml @@ -3,7 +3,10 @@ name: SteamFlow Rust Build on: push: paths: - - "SteamFlow/**" + - "src/**" + - "assets/**" + - "Cargo.toml" + - "Cargo.lock" - ".github/workflows/rust.yaml" pull_request: @@ -40,16 +43,16 @@ jobs: uses: dtolnay/rust-toolchain@stable - name: Build SteamFlow (release) - run: cargo build --release --manifest-path SteamFlow/Cargo.toml + run: cargo build --release - name: Install cargo-deb run: cargo install cargo-deb --locked - name: Build .deb package - run: cargo deb --no-build --manifest-path SteamFlow/Cargo.toml + run: cargo deb --no-build - name: Upload .deb artifact uses: actions/upload-artifact@v4 with: name: steamflow-deb - path: SteamFlow/target/debian/*.deb + path: target/debian/*.deb diff --git a/SteamFlow/COMPARISON.md b/COMPARISON.md similarity index 100% rename from SteamFlow/COMPARISON.md rename to COMPARISON.md diff --git a/SteamFlow/Cargo.lock b/Cargo.lock similarity index 100% rename from SteamFlow/Cargo.lock rename to Cargo.lock diff --git a/SteamFlow/Cargo.toml b/Cargo.toml similarity index 100% rename from SteamFlow/Cargo.toml rename to Cargo.toml diff --git a/Directory.Build.props b/OpenSteamClient/Directory.Build.props similarity index 100% rename from Directory.Build.props rename to OpenSteamClient/Directory.Build.props diff --git a/OpenSteamClient.sln b/OpenSteamClient/OpenSteamClient.sln similarity index 100% rename from OpenSteamClient.sln rename to OpenSteamClient/OpenSteamClient.sln diff --git a/OpenSteamClient.sln.DotSettings.user b/OpenSteamClient/OpenSteamClient.sln.DotSettings.user similarity index 100% rename from OpenSteamClient.sln.DotSettings.user rename to OpenSteamClient/OpenSteamClient.sln.DotSettings.user diff --git a/tools/.gitignore b/OpenSteamClient/tools/.gitignore similarity index 100% rename from tools/.gitignore rename to OpenSteamClient/tools/.gitignore diff --git a/tools/binaryvdfparser b/OpenSteamClient/tools/binaryvdfparser old mode 100755 new mode 100644 similarity index 100% rename from tools/binaryvdfparser rename to OpenSteamClient/tools/binaryvdfparser diff --git a/tools/binaryvdfparser_src/Program.cs b/OpenSteamClient/tools/binaryvdfparser_src/Program.cs similarity index 100% rename from tools/binaryvdfparser_src/Program.cs rename to OpenSteamClient/tools/binaryvdfparser_src/Program.cs diff --git a/tools/binaryvdfparser_src/binaryvdfparser.csproj b/OpenSteamClient/tools/binaryvdfparser_src/binaryvdfparser.csproj similarity index 100% rename from tools/binaryvdfparser_src/binaryvdfparser.csproj rename to OpenSteamClient/tools/binaryvdfparser_src/binaryvdfparser.csproj diff --git a/tools/callbackdumper b/OpenSteamClient/tools/callbackdumper old mode 100755 new mode 100644 similarity index 100% rename from tools/callbackdumper rename to OpenSteamClient/tools/callbackdumper diff --git a/tools/callbackdumper_src/Program.cs b/OpenSteamClient/tools/callbackdumper_src/Program.cs similarity index 100% rename from tools/callbackdumper_src/Program.cs rename to OpenSteamClient/tools/callbackdumper_src/Program.cs diff --git a/tools/callbackdumper_src/callbackdumper.csproj b/OpenSteamClient/tools/callbackdumper_src/callbackdumper.csproj similarity index 100% rename from tools/callbackdumper_src/callbackdumper.csproj rename to OpenSteamClient/tools/callbackdumper_src/callbackdumper.csproj diff --git a/tools/createCallbackMapFromJson.js b/OpenSteamClient/tools/createCallbackMapFromJson.js similarity index 100% rename from tools/createCallbackMapFromJson.js rename to OpenSteamClient/tools/createCallbackMapFromJson.js diff --git a/tools/createCallbackRelatedMapsFromJson.js b/OpenSteamClient/tools/createCallbackRelatedMapsFromJson.js similarity index 100% rename from tools/createCallbackRelatedMapsFromJson.js rename to OpenSteamClient/tools/createCallbackRelatedMapsFromJson.js diff --git a/tools/createCallbackStructFromJson.js b/OpenSteamClient/tools/createCallbackStructFromJson.js similarity index 100% rename from tools/createCallbackStructFromJson.js rename to OpenSteamClient/tools/createCallbackStructFromJson.js diff --git a/tools/createEnumFromJson.js b/OpenSteamClient/tools/createEnumFromJson.js similarity index 100% rename from tools/createEnumFromJson.js rename to OpenSteamClient/tools/createEnumFromJson.js diff --git a/tools/ipctool b/OpenSteamClient/tools/ipctool old mode 100755 new mode 100644 similarity index 100% rename from tools/ipctool rename to OpenSteamClient/tools/ipctool diff --git a/tools/ipctool_src/BinaryReaderExtensions.cs b/OpenSteamClient/tools/ipctool_src/BinaryReaderExtensions.cs similarity index 100% rename from tools/ipctool_src/BinaryReaderExtensions.cs rename to OpenSteamClient/tools/ipctool_src/BinaryReaderExtensions.cs diff --git a/tools/ipctool_src/EndianAwareBinaryReader.cs b/OpenSteamClient/tools/ipctool_src/EndianAwareBinaryReader.cs similarity index 100% rename from tools/ipctool_src/EndianAwareBinaryReader.cs rename to OpenSteamClient/tools/ipctool_src/EndianAwareBinaryReader.cs diff --git a/tools/ipctool_src/EndianAwareBinaryWriter.cs b/OpenSteamClient/tools/ipctool_src/EndianAwareBinaryWriter.cs similarity index 100% rename from tools/ipctool_src/EndianAwareBinaryWriter.cs rename to OpenSteamClient/tools/ipctool_src/EndianAwareBinaryWriter.cs diff --git a/tools/ipctool_src/IPCClient.cs b/OpenSteamClient/tools/ipctool_src/IPCClient.cs similarity index 100% rename from tools/ipctool_src/IPCClient.cs rename to OpenSteamClient/tools/ipctool_src/IPCClient.cs diff --git a/tools/ipctool_src/InterfaceMap.cs b/OpenSteamClient/tools/ipctool_src/InterfaceMap.cs similarity index 100% rename from tools/ipctool_src/InterfaceMap.cs rename to OpenSteamClient/tools/ipctool_src/InterfaceMap.cs diff --git a/tools/ipctool_src/Program.cs b/OpenSteamClient/tools/ipctool_src/Program.cs similarity index 100% rename from tools/ipctool_src/Program.cs rename to OpenSteamClient/tools/ipctool_src/Program.cs diff --git a/tools/ipctool_src/ipctool.csproj b/OpenSteamClient/tools/ipctool_src/ipctool.csproj similarity index 100% rename from tools/ipctool_src/ipctool.csproj rename to OpenSteamClient/tools/ipctool_src/ipctool.csproj diff --git a/tools/protobuftester b/OpenSteamClient/tools/protobuftester old mode 100755 new mode 100644 similarity index 100% rename from tools/protobuftester rename to OpenSteamClient/tools/protobuftester diff --git a/tools/protobuftester_src/Program.cs b/OpenSteamClient/tools/protobuftester_src/Program.cs similarity index 100% rename from tools/protobuftester_src/Program.cs rename to OpenSteamClient/tools/protobuftester_src/Program.cs diff --git a/tools/protobuftester_src/README.md b/OpenSteamClient/tools/protobuftester_src/README.md similarity index 100% rename from tools/protobuftester_src/README.md rename to OpenSteamClient/tools/protobuftester_src/README.md diff --git a/tools/protobuftester_src/protobuftester.csproj b/OpenSteamClient/tools/protobuftester_src/protobuftester.csproj similarity index 100% rename from tools/protobuftester_src/protobuftester.csproj rename to OpenSteamClient/tools/protobuftester_src/protobuftester.csproj diff --git a/README.md b/README.md index d517b6f2..52753f8c 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ sudo apt-get install build-essential pkg-config libssl-dev libx11-dev libxi-dev ## Build and Run ```bash git clone https://github.com/OpenSteamClient/OpenSteamClient.git --recursive -cd OpenSteamClient/SteamFlow +cd OpenSteamClient cargo run --release ``` diff --git a/SteamFlow/ROADMAP.md b/ROADMAP.md similarity index 100% rename from SteamFlow/ROADMAP.md rename to ROADMAP.md diff --git a/SteamFlow/README.md b/STEAMFLOW_TECHNICAL.md similarity index 98% rename from SteamFlow/README.md rename to STEAMFLOW_TECHNICAL.md index 44c13502..0213b163 100644 --- a/SteamFlow/README.md +++ b/STEAMFLOW_TECHNICAL.md @@ -48,7 +48,7 @@ Guard data is persisted through `FileGuardDataStore::user_cache()` so repeated S ## Run ```bash -cargo run --manifest-path SteamFlow/Cargo.toml +cargo run ``` ## Install/download pipeline diff --git a/SteamFlow/assets/opensteam-logo.svg b/assets/opensteam-logo.svg similarity index 100% rename from SteamFlow/assets/opensteam-logo.svg rename to assets/opensteam-logo.svg diff --git a/SteamFlow/src/cloud_sync.rs b/src/cloud_sync.rs similarity index 100% rename from SteamFlow/src/cloud_sync.rs rename to src/cloud_sync.rs diff --git a/SteamFlow/src/cm_list.rs b/src/cm_list.rs similarity index 100% rename from SteamFlow/src/cm_list.rs rename to src/cm_list.rs diff --git a/SteamFlow/src/config.rs b/src/config.rs similarity index 93% rename from SteamFlow/src/config.rs rename to src/config.rs index c0bca8a7..cf6e8730 100644 --- a/SteamFlow/src/config.rs +++ b/src/config.rs @@ -26,9 +26,15 @@ impl LauncherConfig { impl Default for LauncherConfig { fn default() -> Self { - let home = std::env::var("HOME").unwrap_or_else(|_| "~".to_string()); + let steam_library_path = detect_steam_path() + .map(|path| path.to_string_lossy().to_string()) + .unwrap_or_else(|| { + let home = std::env::var("HOME").unwrap_or_else(|_| "~".to_string()); + format!("{home}/Games/SteamFlow") + }); + Self { - steam_library_path: format!("{home}/Games/SteamFlow"), + steam_library_path, proton_version: "experimental".to_string(), enable_cloud_sync: true, use_shared_compat_data: false, diff --git a/SteamFlow/src/depot_browser.rs b/src/depot_browser.rs similarity index 100% rename from SteamFlow/src/depot_browser.rs rename to src/depot_browser.rs diff --git a/SteamFlow/src/download_pipeline.rs b/src/download_pipeline.rs similarity index 100% rename from SteamFlow/src/download_pipeline.rs rename to src/download_pipeline.rs diff --git a/SteamFlow/src/install.rs b/src/install.rs similarity index 100% rename from SteamFlow/src/install.rs rename to src/install.rs diff --git a/SteamFlow/src/lib.rs b/src/lib.rs similarity index 100% rename from SteamFlow/src/lib.rs rename to src/lib.rs diff --git a/SteamFlow/src/library.rs b/src/library.rs similarity index 93% rename from SteamFlow/src/library.rs rename to src/library.rs index 98c12856..01565f56 100644 --- a/SteamFlow/src/library.rs +++ b/src/library.rs @@ -64,19 +64,18 @@ pub async fn scan_installed_app_paths() -> Result> { } pub async fn scan_installed_app_paths_pathbuf() -> Result> { - let config_path = if let Ok(cfg) = load_launcher_config().await { + let config_path = load_launcher_config().await.ok().and_then(|cfg| { let p = PathBuf::from(cfg.steam_library_path); if p.join("steamapps").exists() || p.join("Steam").join("steamapps").exists() { Some(p) } else { None } - } else { - None - }; + }); let root = config_path - .unwrap_or_else(|| detect_steam_path().unwrap_or_else(|| PathBuf::from("~/.steam/steam"))); + .or_else(detect_steam_path) + .unwrap_or_else(default_steam_root); println!("Scanning Library Root: {:?}", root); scan_library(&root).await } @@ -86,7 +85,12 @@ pub async fn scan_library(root_path: &Path) -> Result> { let mut libraries = vec![root_path.to_path_buf()]; let library_folders_path = root_path.join("steamapps").join("libraryfolders.vdf"); - let extra_libraries = parse_library_folders(library_folders_path).await?; + let extra_libraries = parse_library_folders(library_folders_path) + .await + .unwrap_or_else(|e| { + println!("Warning: Could not parse libraryfolders.vdf: {}", e); + Vec::new() + }); libraries.extend(extra_libraries); libraries.sort(); @@ -108,8 +112,12 @@ pub async fn scan_library(root_path: &Path) -> Result> { continue; } - if let Some((app_id, install_dir)) = parse_app_manifest_install_path(&path).await? { - installed.insert(app_id, install_dir); + match parse_app_manifest_install_path(&path).await { + Ok(Some((app_id, install_dir))) => { + installed.insert(app_id, install_dir); + } + Ok(None) => {} + Err(e) => println!("Skipping bad manifest {:?}: {}", path, e), } } } diff --git a/SteamFlow/src/main.rs b/src/main.rs similarity index 100% rename from SteamFlow/src/main.rs rename to src/main.rs diff --git a/SteamFlow/src/models.rs b/src/models.rs similarity index 100% rename from SteamFlow/src/models.rs rename to src/models.rs diff --git a/SteamFlow/src/steam_client.rs b/src/steam_client.rs similarity index 100% rename from SteamFlow/src/steam_client.rs rename to src/steam_client.rs diff --git a/SteamFlow/src/ui.rs b/src/ui.rs similarity index 99% rename from SteamFlow/src/ui.rs rename to src/ui.rs index 008103d9..1bb1f0d7 100644 --- a/SteamFlow/src/ui.rs +++ b/src/ui.rs @@ -235,14 +235,15 @@ impl SteamLauncher { DownloadProgressState::Completed => { self.status = "Install completed".to_string(); if let Some(appid) = self.active_download_appid { + let installed_paths = self + .runtime + .block_on(scan_installed_app_paths()) + .unwrap_or_default(); + for g in &mut self.library { if g.app_id == appid { - g.is_installed = true; - let install_dir = std::env::temp_dir() - .join("steamflow_downloads") - .join(appid.to_string()); - g.install_path = - Some(install_dir.to_string_lossy().to_string()); + g.install_path = installed_paths.get(&appid).cloned(); + g.is_installed = g.install_path.is_some(); } } }