diff --git a/tauri-app/src-tauri/.gitignore b/tauri-app/src-tauri/.gitignore index b21bd68..e38c63f 100644 --- a/tauri-app/src-tauri/.gitignore +++ b/tauri-app/src-tauri/.gitignore @@ -5,3 +5,6 @@ # Generated by Tauri # will have schema files for capabilities auto-completion /gen/schemas + +# Bundled record-daemon binaries (built by build.rs) +/binaries/ diff --git a/tauri-app/src-tauri/Cargo.lock b/tauri-app/src-tauri/Cargo.lock index 046648c..c54048f 100644 --- a/tauri-app/src-tauri/Cargo.lock +++ b/tauri-app/src-tauri/Cargo.lock @@ -1960,6 +1960,22 @@ dependencies = [ "selectors 0.24.0", ] +[[package]] +name = "leaguerecorder" +version = "0.1.0" +dependencies = [ + "chrono", + "directories", + "ffmpeg-sidecar", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-opener", + "tokio", + "uuid", +] + [[package]] name = "leb128fmt" version = "0.1.0" @@ -3797,22 +3813,6 @@ dependencies = [ "windows", ] -[[package]] -name = "tauri-app" -version = "0.1.0" -dependencies = [ - "chrono", - "directories", - "ffmpeg-sidecar", - "serde", - "serde_json", - "tauri", - "tauri-build", - "tauri-plugin-opener", - "tokio", - "uuid", -] - [[package]] name = "tauri-build" version = "2.5.6" diff --git a/tauri-app/src-tauri/Cargo.toml b/tauri-app/src-tauri/Cargo.toml index c351960..7ccd5ce 100644 --- a/tauri-app/src-tauri/Cargo.toml +++ b/tauri-app/src-tauri/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "tauri-app" +name = "leaguerecorder" version = "0.1.0" description = "A Tauri App" authors = ["you"] diff --git a/tauri-app/src-tauri/build.rs b/tauri-app/src-tauri/build.rs index d860e1e..8ad2bbc 100644 --- a/tauri-app/src-tauri/build.rs +++ b/tauri-app/src-tauri/build.rs @@ -1,3 +1,98 @@ fn main() { + build_record_daemon(); tauri_build::build() } + +/// Build the record-daemon in release mode and place it in the binaries/ +/// directory with the target-triple suffix that Tauri's `externalBin` feature +/// expects. +/// +/// The resulting binary is copied to: +/// src-tauri/binaries/record-daemon-[.exe] +/// +/// This runs as part of `cargo build`, so the daemon is always available when +/// the Tauri bundler needs it. Because record-daemon lives in a separate +/// Cargo workspace, invoking `cargo build` from here does not conflict with +/// the parent build's lock. +fn build_record_daemon() { + use std::env; + use std::fs; + use std::path::PathBuf; + use std::process::Command; + + let target = env::var("TARGET").unwrap(); + let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); + + // Resolve the record-daemon crate root (../../record-daemon/ from src-tauri/) + let daemon_dir = manifest_dir + .parent() + .expect("CARGO_MANIFEST_DIR has no parent") + .parent() + .expect("parent of CARGO_MANIFEST_DIR has no parent") + .join("record-daemon"); + + let daemon_manifest = daemon_dir.join("Cargo.toml"); + if !daemon_manifest.exists() { + eprintln!( + "cargo:warning=record-daemon not found at {}, skipping daemon build", + daemon_manifest.display() + ); + return; + } + + // Build the daemon in release mode for the same target triple. + // Passing --target ensures the output lands in a predictable directory + // and supports cross-compilation. + let status = Command::new("cargo") + .args([ + "build", + "--release", + "--manifest-path", + ]) + .arg(&daemon_manifest) + .arg("--target") + .arg(&target) + .status() + .expect("Failed to execute cargo build for record-daemon"); + + if !status.success() { + panic!("Failed to build record-daemon in release mode"); + } + + // Locate the built binary. + // When --target is specified, cargo places output in target//release/. + let src_name = if target.contains("windows") { + "record-daemon.exe" + } else { + "record-daemon" + }; + let src_binary = daemon_dir + .join("target") + .join(&target) + .join("release") + .join(src_name); + + if !src_binary.exists() { + panic!( + "record-daemon binary not found at {} after successful build", + src_binary.display() + ); + } + + // Copy to src-tauri/binaries/record-daemon-[.exe] + let binaries_dir = manifest_dir.join("binaries"); + fs::create_dir_all(&binaries_dir).expect("Failed to create binaries directory"); + + let dst_name = if target.contains("windows") { + format!("record-daemon-{}.exe", target) + } else { + format!("record-daemon-{}", target) + }; + let dst_binary = binaries_dir.join(&dst_name); + + fs::copy(&src_binary, &dst_binary).expect("Failed to copy record-daemon binary"); + println!( + "cargo:warning=Bundled record-daemon → {}", + dst_binary.display() + ); +} diff --git a/tauri-app/src-tauri/icons/128x128.png b/tauri-app/src-tauri/icons/128x128.png index 6be5e50..73a2a4f 100644 Binary files a/tauri-app/src-tauri/icons/128x128.png and b/tauri-app/src-tauri/icons/128x128.png differ diff --git a/tauri-app/src-tauri/icons/128x128@2x.png b/tauri-app/src-tauri/icons/128x128@2x.png index e81bece..8307690 100644 Binary files a/tauri-app/src-tauri/icons/128x128@2x.png and b/tauri-app/src-tauri/icons/128x128@2x.png differ diff --git a/tauri-app/src-tauri/icons/32x32.png b/tauri-app/src-tauri/icons/32x32.png index a437dd5..af775c0 100644 Binary files a/tauri-app/src-tauri/icons/32x32.png and b/tauri-app/src-tauri/icons/32x32.png differ diff --git a/tauri-app/src-tauri/icons/icon.ico b/tauri-app/src-tauri/icons/icon.ico index b3636e4..5a7abcc 100644 Binary files a/tauri-app/src-tauri/icons/icon.ico and b/tauri-app/src-tauri/icons/icon.ico differ diff --git a/tauri-app/src-tauri/icons/icon.png b/tauri-app/src-tauri/icons/icon.png index e1cd261..e494110 100644 Binary files a/tauri-app/src-tauri/icons/icon.png and b/tauri-app/src-tauri/icons/icon.png differ diff --git a/tauri-app/src-tauri/icons/icon_full.png b/tauri-app/src-tauri/icons/icon_full.png new file mode 100644 index 0000000..d66b299 Binary files /dev/null and b/tauri-app/src-tauri/icons/icon_full.png differ diff --git a/tauri-app/src-tauri/tauri.conf.json b/tauri-app/src-tauri/tauri.conf.json index dcf121e..b204916 100644 --- a/tauri-app/src-tauri/tauri.conf.json +++ b/tauri-app/src-tauri/tauri.conf.json @@ -1,6 +1,6 @@ { "$schema": "https://schema.tauri.app/config/2", - "productName": "tauri-app", + "productName": "leaguerecorder", "version": "0.1.0", "identifier": "v.leaguerecorder", "build": { @@ -40,6 +40,7 @@ "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico" - ] + ], + "externalBin": ["binaries/record-daemon"] } }