Embed yt-dlp into the binary so the standalone exe is self-contained (extract to cache on first run); drop now-redundant resource bundle; refresh Windows installers
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -21,7 +21,31 @@ use tauri::Manager;
|
|||||||
|
|
||||||
const SEARCH_LIMIT: u32 = 25;
|
const SEARCH_LIMIT: u32 = 25;
|
||||||
|
|
||||||
/// Locate yt-dlp: prefer the bundled resource copy, then a dev ./bin, then PATH.
|
// yt-dlp.exe is baked straight into this binary at compile time, so the standalone
|
||||||
|
// `ytplayer.exe` is fully self-contained — no sibling file and nothing on PATH
|
||||||
|
// required. On first run we materialize it into the app cache dir and run from there.
|
||||||
|
// (Windows only; other platforms fall back to a resource/dev/PATH copy.)
|
||||||
|
#[cfg(windows)]
|
||||||
|
static YTDLP_EMBEDDED: &[u8] = include_bytes!("../../bin/yt-dlp.exe");
|
||||||
|
|
||||||
|
/// Write the embedded yt-dlp to the cache dir if it isn't already there (size-checked),
|
||||||
|
/// and return its path.
|
||||||
|
#[cfg(windows)]
|
||||||
|
fn embedded_ytdlp(app: &tauri::AppHandle) -> Option<PathBuf> {
|
||||||
|
let dir = app.path().app_cache_dir().ok()?;
|
||||||
|
std::fs::create_dir_all(&dir).ok()?;
|
||||||
|
let dest = dir.join("yt-dlp.exe");
|
||||||
|
let fresh = std::fs::metadata(&dest)
|
||||||
|
.map(|m| m.len() == YTDLP_EMBEDDED.len() as u64)
|
||||||
|
.unwrap_or(false);
|
||||||
|
if !fresh {
|
||||||
|
std::fs::write(&dest, YTDLP_EMBEDDED).ok()?;
|
||||||
|
}
|
||||||
|
Some(dest)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Locate yt-dlp: prefer a bundled resource copy, then a dev ./bin, then the
|
||||||
|
/// embedded self-contained copy (Windows), then finally PATH.
|
||||||
fn ytdlp_path(app: &tauri::AppHandle) -> PathBuf {
|
fn ytdlp_path(app: &tauri::AppHandle) -> PathBuf {
|
||||||
let name = if cfg!(windows) { "yt-dlp.exe" } else { "yt-dlp" };
|
let name = if cfg!(windows) { "yt-dlp.exe" } else { "yt-dlp" };
|
||||||
if let Ok(res) = app.path().resource_dir() {
|
if let Ok(res) = app.path().resource_dir() {
|
||||||
@@ -34,6 +58,12 @@ fn ytdlp_path(app: &tauri::AppHandle) -> PathBuf {
|
|||||||
if dev.exists() {
|
if dev.exists() {
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
|
#[cfg(windows)]
|
||||||
|
{
|
||||||
|
if let Some(p) = embedded_ytdlp(app) {
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
}
|
||||||
PathBuf::from(name)
|
PathBuf::from(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,9 +35,6 @@
|
|||||||
"icons/128x128@2x.png",
|
"icons/128x128@2x.png",
|
||||||
"icons/icon.icns",
|
"icons/icon.icns",
|
||||||
"icons/icon.ico"
|
"icons/icon.ico"
|
||||||
],
|
]
|
||||||
"resources": {
|
|
||||||
"../bin/yt-dlp.exe": "bin/yt-dlp.exe"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user