fix: adjust download logic to work with latest firefox cdn

This commit is contained in:
zhom
2025-06-06 23:40:51 +04:00
parent e2547c6ec7
commit 8137f9bf8d
2 changed files with 35 additions and 33 deletions
+1 -3
View File
@@ -255,9 +255,7 @@ pub fn is_browser_version_nightly(
// This will be handled in the API parsing, so this fallback is for cached versions // This will be handled in the API parsing, so this fallback is for cached versions
is_nightly_version(version) is_nightly_version(version)
} }
"mullvad-browser" | "tor-browser" => { "mullvad-browser" | "tor-browser" => is_nightly_version(version),
is_nightly_version(version)
}
"chromium" => { "chromium" => {
// Chromium builds are generally stable snapshots // Chromium builds are generally stable snapshots
false false
+34 -30
View File
@@ -435,11 +435,16 @@ impl BrowserVersionService {
match browser { match browser {
"firefox" => { "firefox" => {
let os_param = match (&os[..], &arch[..]) { let (platform_path, filename, is_archive) = match (&os[..], &arch[..]) {
("windows", _) => "win64", ("windows", "x64") => ("win64", format!("Firefox Setup {version}.exe"), false),
("linux", "x64") => "linux64", ("windows", "arm64") => (
("linux", "arm64") => "linux64-aarch64", "win64-aarch64",
("macos", _) => "osx", format!("Firefox Setup {version}.exe"),
false,
),
("linux", "x64") => ("linux-x86_64", format!("firefox-{version}.tar.bz2"), true),
("linux", "arm64") => ("linux-aarch64", format!("firefox-{version}.tar.bz2"), true),
("macos", _) => ("mac", format!("Firefox {version}.dmg"), true),
_ => { _ => {
return Err( return Err(
format!("Unsupported platform/architecture for Firefox: {os}/{arch}").into(), format!("Unsupported platform/architecture for Firefox: {os}/{arch}").into(),
@@ -447,27 +452,25 @@ impl BrowserVersionService {
} }
}; };
let (filename, is_archive) = match os.as_str() {
"windows" => (format!("firefox-{version}.exe"), false),
"linux" => (format!("firefox-{version}.tar.xz"), true),
"macos" => (format!("firefox-{version}.dmg"), true),
_ => return Err(format!("Unsupported platform for Firefox: {os}").into()),
};
Ok(DownloadInfo { Ok(DownloadInfo {
url: format!( url: format!(
"https://download.mozilla.org/?product=firefox-{version}&os={os_param}&lang=en-US" "https://download-installer.cdn.mozilla.net/pub/firefox/releases/{version}/{platform_path}/en-US/{filename}"
), ),
filename, filename,
is_archive, is_archive,
}) })
} }
"firefox-developer" => { "firefox-developer" => {
let os_param = match (&os[..], &arch[..]) { let (platform_path, filename, is_archive) = match (&os[..], &arch[..]) {
("windows", _) => "win64", ("windows", "x64") => ("win64", format!("Firefox Setup {version}.exe"), false),
("linux", "x64") => "linux64", ("windows", "arm64") => (
("linux", "arm64") => "linux64-aarch64", "win64-aarch64",
("macos", _) => "osx", format!("Firefox Setup {version}.exe"),
false,
),
("linux", "x64") => ("linux-x86_64", format!("firefox-{version}.tar.bz2"), true),
("linux", "arm64") => ("linux-aarch64", format!("firefox-{version}.tar.bz2"), true),
("macos", _) => ("mac", format!("Firefox {version}.dmg"), true),
_ => { _ => {
return Err( return Err(
format!("Unsupported platform/architecture for Firefox Developer: {os}/{arch}") format!("Unsupported platform/architecture for Firefox Developer: {os}/{arch}")
@@ -476,16 +479,9 @@ impl BrowserVersionService {
} }
}; };
let (filename, is_archive) = match os.as_str() {
"windows" => (format!("firefox-developer-{version}.exe"), false),
"linux" => (format!("firefox-developer-{version}.tar.xz"), true),
"macos" => (format!("firefox-developer-{version}.dmg"), true),
_ => return Err(format!("Unsupported platform for Firefox Developer: {os}").into()),
};
Ok(DownloadInfo { Ok(DownloadInfo {
url: format!( url: format!(
"https://download.mozilla.org/?product=firefox-devedition-{version}&os={os_param}&lang=en-US" "https://download-installer.cdn.mozilla.net/pub/devedition/releases/{version}/{platform_path}/en-US/{filename}"
), ),
filename, filename,
is_archive, is_archive,
@@ -1479,16 +1475,24 @@ mod tests {
// Test Firefox // Test Firefox
let firefox_info = service.get_download_info("firefox", "139.0").unwrap(); let firefox_info = service.get_download_info("firefox", "139.0").unwrap();
assert_eq!(firefox_info.filename, "firefox-139.0.dmg"); assert_eq!(firefox_info.filename, "Firefox 139.0.dmg");
assert!(firefox_info.url.contains("firefox-139.0")); assert!(firefox_info
.url
.contains("download-installer.cdn.mozilla.net"));
assert!(firefox_info.url.contains("/pub/firefox/releases/139.0/"));
assert!(firefox_info.is_archive); assert!(firefox_info.is_archive);
// Test Firefox Developer // Test Firefox Developer
let firefox_dev_info = service let firefox_dev_info = service
.get_download_info("firefox-developer", "139.0b1") .get_download_info("firefox-developer", "139.0b1")
.unwrap(); .unwrap();
assert_eq!(firefox_dev_info.filename, "firefox-developer-139.0b1.dmg"); assert_eq!(firefox_dev_info.filename, "Firefox 139.0b1.dmg");
assert!(firefox_dev_info.url.contains("devedition-139.0b1")); assert!(firefox_dev_info
.url
.contains("download-installer.cdn.mozilla.net"));
assert!(firefox_dev_info
.url
.contains("/pub/devedition/releases/139.0b1/"));
assert!(firefox_dev_info.is_archive); assert!(firefox_dev_info.is_archive);
// Test Mullvad Browser // Test Mullvad Browser