chore: clippy

This commit is contained in:
zhom
2025-05-30 07:13:20 +04:00
parent 5c23c77896
commit e3275248f7
4 changed files with 249 additions and 151 deletions
+139 -83
View File
@@ -246,7 +246,8 @@ impl ApiClient {
firefox_api_base: "https://product-details.mozilla.org/1.0".to_string(),
firefox_dev_api_base: "https://product-details.mozilla.org/1.0".to_string(),
github_api_base: "https://api.github.com".to_string(),
chromium_api_base: "https://commondatastorage.googleapis.com/chromium-browser-snapshots".to_string(),
chromium_api_base: "https://commondatastorage.googleapis.com/chromium-browser-snapshots"
.to_string(),
tor_archive_base: "https://archive.torproject.org/tor-package-archive/torbrowser".to_string(),
mozilla_download_base: "https://download.mozilla.org".to_string(),
}
@@ -587,7 +588,10 @@ impl ApiClient {
}
println!("Fetching Mullvad releases from GitHub API...");
let url = format!("{}/repos/mullvad/mullvad-browser/releases", self.github_api_base);
let url = format!(
"{}/repos/mullvad/mullvad-browser/releases",
self.github_api_base
);
let releases = self
.client
.get(url)
@@ -637,7 +641,10 @@ impl ApiClient {
}
println!("Fetching Zen releases from GitHub API...");
let url = format!("{}/repos/zen-browser/desktop/releases", self.github_api_base);
let url = format!(
"{}/repos/zen-browser/desktop/releases",
self.github_api_base
);
let mut releases = self
.client
.get(url)
@@ -679,7 +686,10 @@ impl ApiClient {
}
println!("Fetching Brave releases from GitHub API...");
let url = format!("{}/repos/brave/brave-browser/releases", self.github_api_base);
let url = format!(
"{}/repos/brave/brave-browser/releases",
self.github_api_base
);
let releases = self
.client
.get(url)
@@ -732,10 +742,7 @@ impl ApiClient {
} else {
"Mac"
};
let url = format!(
"{}/{arch}/LAST_CHANGE",
self.chromium_api_base
);
let url = format!("{}/{arch}/LAST_CHANGE", self.chromium_api_base);
let version = self
.client
.get(&url)
@@ -815,17 +822,22 @@ impl ApiClient {
// Check cache first (unless bypassing)
if !no_caching {
if let Some(cached_versions) = self.load_cached_versions("tor-browser") {
return Ok(cached_versions.into_iter().map(|version| {
BrowserRelease {
version: version.clone(),
date: "".to_string(), // Cache doesn't store dates
is_prerelease: false, // Assume all archived versions are stable
download_url: Some(format!(
"{}/{version}/tor-browser-macos-{version}.dmg",
self.tor_archive_base
)),
}
}).collect());
return Ok(
cached_versions
.into_iter()
.map(|version| {
BrowserRelease {
version: version.clone(),
date: "".to_string(), // Cache doesn't store dates
is_prerelease: false, // Assume all archived versions are stable
download_url: Some(format!(
"{}/{version}/tor-browser-macos-{version}.dmg",
self.tor_archive_base
)),
}
})
.collect(),
);
}
}
@@ -888,17 +900,22 @@ impl ApiClient {
}
}
Ok(version_strings.into_iter().map(|version| {
BrowserRelease {
version: version.clone(),
date: "".to_string(), // TOR archive doesn't provide structured dates
is_prerelease: false, // Assume all archived versions are stable
download_url: Some(format!(
"{}/{version}/tor-browser-macos-{version}.dmg",
self.tor_archive_base
)),
}
}).collect())
Ok(
version_strings
.into_iter()
.map(|version| {
BrowserRelease {
version: version.clone(),
date: "".to_string(), // TOR archive doesn't provide structured dates
is_prerelease: false, // Assume all archived versions are stable
download_url: Some(format!(
"{}/{version}/tor-browser-macos-{version}.dmg",
self.tor_archive_base
)),
}
})
.collect(),
)
}
async fn check_tor_version_has_macos(
@@ -923,8 +940,8 @@ impl ApiClient {
#[cfg(test)]
mod tests {
use super::*;
use wiremock::{MockServer, Mock, ResponseTemplate};
use wiremock::matchers::{method, path, header};
use wiremock::matchers::{header, method, path};
use wiremock::{Mock, MockServer, ResponseTemplate};
async fn setup_mock_server() -> MockServer {
MockServer::start().await
@@ -933,12 +950,12 @@ mod tests {
fn create_test_client(server: &MockServer) -> ApiClient {
let base_url = server.uri();
ApiClient::new_with_base_urls(
base_url.clone(), // firefox_api_base
base_url.clone(), // firefox_dev_api_base
base_url.clone(), // github_api_base
base_url.clone(), // chromium_api_base
base_url.clone(), // tor_archive_base
base_url.clone(), // mozilla_download_base
base_url.clone(), // firefox_api_base
base_url.clone(), // firefox_dev_api_base
base_url.clone(), // github_api_base
base_url.clone(), // chromium_api_base
base_url.clone(), // tor_archive_base
base_url.clone(), // mozilla_download_base
)
}
@@ -1068,9 +1085,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/firefox.json"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -1081,7 +1100,11 @@ mod tests {
assert!(!releases.is_empty());
assert_eq!(releases[0].version, "139.0");
assert!(releases[0].download_url.is_some());
assert!(releases[0].download_url.as_ref().unwrap().contains(&server.uri()));
assert!(releases[0]
.download_url
.as_ref()
.unwrap()
.contains(&server.uri()));
}
#[tokio::test]
@@ -1106,20 +1129,28 @@ mod tests {
Mock::given(method("GET"))
.and(path("/devedition.json"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
let result = client.fetch_firefox_developer_releases_with_caching(true).await;
let result = client
.fetch_firefox_developer_releases_with_caching(true)
.await;
assert!(result.is_ok());
let releases = result.unwrap();
assert!(!releases.is_empty());
assert_eq!(releases[0].version, "140.0b1");
assert!(releases[0].download_url.is_some());
assert!(releases[0].download_url.as_ref().unwrap().contains(&server.uri()));
assert!(releases[0]
.download_url
.as_ref()
.unwrap()
.contains(&server.uri()));
}
#[tokio::test]
@@ -1145,9 +1176,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/mullvad/mullvad-browser/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -1183,9 +1216,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/zen-browser/desktop/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -1220,9 +1255,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/brave/brave-browser/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -1249,9 +1286,11 @@ mod tests {
Mock::given(method("GET"))
.and(path(format!("/{arch}/LAST_CHANGE")))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string("1465660")
.insert_header("content-type", "text/plain"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string("1465660")
.insert_header("content-type", "text/plain"),
)
.mount(&server)
.await;
@@ -1276,9 +1315,11 @@ mod tests {
Mock::given(method("GET"))
.and(path(format!("/{arch}/LAST_CHANGE")))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string("1465660")
.insert_header("content-type", "text/plain"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string("1465660")
.insert_header("content-type", "text/plain"),
)
.mount(&server)
.await;
@@ -1317,27 +1358,33 @@ mod tests {
Mock::given(method("GET"))
.and(path("/"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_html)
.insert_header("content-type", "text/html"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_html)
.insert_header("content-type", "text/html"),
)
.mount(&server)
.await;
Mock::given(method("GET"))
.and(path("/14.0.4/"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(version_html)
.insert_header("content-type", "text/html"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(version_html)
.insert_header("content-type", "text/html"),
)
.mount(&server)
.await;
Mock::given(method("GET"))
.and(path("/14.0.3/"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(version_html.replace("14.0.4", "14.0.3"))
.insert_header("content-type", "text/html"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(version_html.replace("14.0.4", "14.0.3"))
.insert_header("content-type", "text/html"),
)
.mount(&server)
.await;
@@ -1348,7 +1395,11 @@ mod tests {
assert!(!releases.is_empty());
assert_eq!(releases[0].version, "14.0.4");
assert!(releases[0].download_url.is_some());
assert!(releases[0].download_url.as_ref().unwrap().contains(&server.uri()));
assert!(releases[0]
.download_url
.as_ref()
.unwrap()
.contains(&server.uri()));
}
#[tokio::test]
@@ -1367,9 +1418,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/14.0.4/"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(version_html)
.insert_header("content-type", "text/html"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(version_html)
.insert_header("content-type", "text/html"),
)
.mount(&server)
.await;
@@ -1395,9 +1448,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/14.0.5/"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(version_html)
.insert_header("content-type", "text/html"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(version_html)
.insert_header("content-type", "text/html"),
)
.mount(&server)
.await;
@@ -1465,9 +1520,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/firefox.json"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string("invalid json")
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string("invalid json")
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -1483,8 +1540,7 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/zen-browser/desktop/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(429)
.insert_header("retry-after", "60"))
.respond_with(ResponseTemplate::new(429).insert_header("retry-after", "60"))
.mount(&server)
.await;
+18 -15
View File
@@ -63,10 +63,7 @@ impl AppAutoUpdater {
let current_version = Self::get_current_version();
let is_nightly = Self::is_nightly_build();
println!(
"Checking for updates - Current version: {}, Is nightly: {}",
current_version, is_nightly
);
println!("Checking for updates - Current version: {current_version}, Is nightly: {is_nightly}");
let releases = self.fetch_app_releases().await?;
@@ -147,10 +144,10 @@ impl AppAutoUpdater {
return new_hash != current_hash;
}
// If current version doesn't have nightly prefix, it's an upgrade from stable to nightly
return !current_version.starts_with("nightly-");
!current_version.starts_with("nightly-")
} else {
// For stable builds, use semantic versioning comparison
return self.is_version_newer(new_version, current_version);
self.is_version_newer(new_version, current_version)
}
}
@@ -212,7 +209,7 @@ impl AppAutoUpdater {
let filename = update_info
.download_url
.split('/')
.last()
.next_back()
.unwrap_or("update.dmg")
.to_string();
@@ -220,7 +217,9 @@ impl AppAutoUpdater {
let _ = app_handle.emit("app-update-progress", "Downloading update...");
// Download the update
let download_path = self.download_update(&update_info.download_url, &temp_dir, &filename).await?;
let download_path = self
.download_update(&update_info.download_url, &temp_dir, &filename)
.await?;
// Emit extraction start event
let _ = app_handle.emit("app-update-progress", "Preparing update...");
@@ -369,7 +368,11 @@ impl AppAutoUpdater {
// Remove quarantine attributes from the new app
let _ = Command::new("xattr")
.args(["-dr", "com.apple.quarantine", current_app_path.to_str().unwrap()])
.args([
"-dr",
"com.apple.quarantine",
current_app_path.to_str().unwrap(),
])
.output();
let _ = Command::new("xattr")
@@ -422,7 +425,7 @@ pub async fn check_for_app_updates() -> Result<Option<AppUpdateInfo>, String> {
updater
.check_for_updates()
.await
.map_err(|e| format!("Failed to check for app updates: {}", e))
.map_err(|e| format!("Failed to check for app updates: {e}"))
}
#[tauri::command]
@@ -434,7 +437,7 @@ pub async fn download_and_install_app_update(
updater
.download_and_install_update(&app_handle, &update_info)
.await
.map_err(|e| format!("Failed to install app update: {}", e))
.map_err(|e| format!("Failed to install app update: {e}"))
}
#[tauri::command]
@@ -453,7 +456,7 @@ mod tests {
fn test_is_nightly_build() {
// This will depend on whether STABLE_RELEASE is set during test compilation
let is_nightly = AppAutoUpdater::is_nightly_build();
println!("Is nightly build: {}", is_nightly);
println!("Is nightly build: {is_nightly}");
}
#[test]
@@ -496,7 +499,7 @@ mod tests {
// Nightly version updates
assert!(updater.should_update("nightly-abc123", "nightly-def456", true));
assert!(!updater.should_update("nightly-abc123", "nightly-abc123", true));
// Upgrade from stable to nightly
assert!(updater.should_update("v1.0.0", "nightly-abc123", true));
}
@@ -520,9 +523,9 @@ mod tests {
let url = updater.get_download_url_for_platform(&assets);
assert!(url.is_some());
// The exact URL depends on the target architecture
let url = url.unwrap();
assert!(url.contains(".dmg"));
}
}
}
+86 -50
View File
@@ -52,7 +52,10 @@ impl Downloader {
match browser_type {
BrowserType::Brave => {
// For Brave, we need to find the actual macOS asset
let releases = self.api_client.fetch_brave_releases_with_caching(true).await?;
let releases = self
.api_client
.fetch_brave_releases_with_caching(true)
.await?;
// Find the release with the matching version
let release = releases
@@ -75,7 +78,10 @@ impl Downloader {
}
BrowserType::Zen => {
// For Zen, verify the asset exists
let releases = self.api_client.fetch_zen_releases_with_caching(true).await?;
let releases = self
.api_client
.fetch_zen_releases_with_caching(true)
.await?;
let release = releases
.iter()
@@ -95,7 +101,10 @@ impl Downloader {
}
BrowserType::MullvadBrowser => {
// For Mullvad, verify the asset exists
let releases = self.api_client.fetch_mullvad_releases_with_caching(true).await?;
let releases = self
.api_client
.fetch_mullvad_releases_with_caching(true)
.await?;
let release = releases
.iter()
@@ -223,9 +232,9 @@ mod tests {
use crate::browser::BrowserType;
use crate::browser_version_service::DownloadInfo;
use wiremock::{MockServer, Mock, ResponseTemplate};
use wiremock::matchers::{method, path, header};
use tempfile::TempDir;
use wiremock::matchers::{header, method, path};
use wiremock::{Mock, MockServer, ResponseTemplate};
async fn setup_mock_server() -> MockServer {
MockServer::start().await
@@ -234,12 +243,12 @@ mod tests {
fn create_test_api_client(server: &MockServer) -> ApiClient {
let base_url = server.uri();
ApiClient::new_with_base_urls(
base_url.clone(), // firefox_api_base
base_url.clone(), // firefox_dev_api_base
base_url.clone(), // github_api_base
base_url.clone(), // chromium_api_base
base_url.clone(), // tor_archive_base
base_url.clone(), // mozilla_download_base
base_url.clone(), // firefox_api_base
base_url.clone(), // firefox_dev_api_base
base_url.clone(), // github_api_base
base_url.clone(), // chromium_api_base
base_url.clone(), // tor_archive_base
base_url.clone(), // mozilla_download_base
)
}
@@ -267,9 +276,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/brave/brave-browser/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -312,9 +323,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/zen-browser/desktop/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -357,9 +370,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/mullvad/mullvad-browser/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -465,9 +480,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/brave/brave-browser/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -482,7 +499,10 @@ mod tests {
.await;
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("Brave version v1.81.9 not found"));
assert!(result
.unwrap_err()
.to_string()
.contains("Brave version v1.81.9 not found"));
}
#[tokio::test]
@@ -509,9 +529,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/zen-browser/desktop/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -526,7 +548,10 @@ mod tests {
.await;
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("No macOS universal asset found"));
assert!(result
.unwrap_err()
.to_string()
.contains("No macOS universal asset found"));
}
#[tokio::test]
@@ -534,22 +559,24 @@ mod tests {
let server = setup_mock_server().await;
let api_client = create_test_api_client(&server);
let downloader = Downloader::new_with_api_client(api_client);
// Create a temporary directory for the test
let temp_dir = TempDir::new().unwrap();
let dest_path = temp_dir.path();
// Create test file content (simulating a small download)
let test_content = b"This is a test file content for download simulation";
// Mock the download endpoint
Mock::given(method("GET"))
.and(path("/test-download"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_bytes(test_content)
.insert_header("content-length", test_content.len().to_string())
.insert_header("content-type", "application/octet-stream"))
.respond_with(
ResponseTemplate::new(200)
.set_body_bytes(test_content)
.insert_header("content-length", test_content.len().to_string())
.insert_header("content-type", "application/octet-stream"),
)
.mount(&server)
.await;
@@ -576,7 +603,7 @@ mod tests {
assert!(result.is_ok());
let downloaded_file = result.unwrap();
assert!(downloaded_file.exists());
// Verify file content
let downloaded_content = std::fs::read(&downloaded_file).unwrap();
assert_eq!(downloaded_content, test_content);
@@ -587,7 +614,7 @@ mod tests {
let server = setup_mock_server().await;
let api_client = create_test_api_client(&server);
let downloader = Downloader::new_with_api_client(api_client);
let temp_dir = TempDir::new().unwrap();
let dest_path = temp_dir.path();
@@ -645,9 +672,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/mullvad/mullvad-browser/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -662,7 +691,10 @@ mod tests {
.await;
assert!(result.is_err());
assert!(result.unwrap_err().to_string().contains("No macOS asset found"));
assert!(result
.unwrap_err()
.to_string()
.contains("No macOS asset found"));
}
#[tokio::test]
@@ -689,9 +721,11 @@ mod tests {
Mock::given(method("GET"))
.and(path("/repos/brave/brave-browser/releases"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string(mock_response)
.insert_header("content-type", "application/json"),
)
.mount(&server)
.await;
@@ -716,20 +750,22 @@ mod tests {
let server = setup_mock_server().await;
let api_client = create_test_api_client(&server);
let downloader = Downloader::new_with_api_client(api_client);
let temp_dir = TempDir::new().unwrap();
let dest_path = temp_dir.path();
// Create larger test content to simulate chunked transfer
let test_content = vec![42u8; 1024]; // 1KB of data
Mock::given(method("GET"))
.and(path("/chunked-download"))
.and(header("user-agent", "donutbrowser"))
.respond_with(ResponseTemplate::new(200)
.set_body_bytes(test_content.clone())
.insert_header("content-length", test_content.len().to_string())
.insert_header("content-type", "application/octet-stream"))
.respond_with(
ResponseTemplate::new(200)
.set_body_bytes(test_content.clone())
.insert_header("content-length", test_content.len().to_string())
.insert_header("content-type", "application/octet-stream"),
)
.mount(&server)
.await;
@@ -755,7 +791,7 @@ mod tests {
assert!(result.is_ok());
let downloaded_file = result.unwrap();
assert!(downloaded_file.exists());
let downloaded_content = std::fs::read(&downloaded_file).unwrap();
assert_eq!(downloaded_content.len(), test_content.len());
}
+6 -3
View File
@@ -182,11 +182,14 @@ pub fn run() {
tauri::async_runtime::spawn(async move {
// Add a small delay to ensure the app is fully loaded
tokio::time::sleep(tokio::time::Duration::from_secs(3)).await;
let updater = app_auto_updater::AppAutoUpdater::new();
match updater.check_for_updates().await {
Ok(Some(update_info)) => {
println!("App update available: {} -> {}", update_info.current_version, update_info.new_version);
println!(
"App update available: {} -> {}",
update_info.current_version, update_info.new_version
);
// Emit update available event to the frontend
let _ = app_handle_update.emit("app-update-available", &update_info);
}
@@ -194,7 +197,7 @@ pub fn run() {
println!("No app updates available");
}
Err(e) => {
eprintln!("Failed to check for app updates: {}", e);
eprintln!("Failed to check for app updates: {e}");
}
}
});