diff options
| author | 2025-03-02 23:55:52 -0600 | |
|---|---|---|
| committer | 2025-03-02 23:55:52 -0600 | |
| commit | 87a9f402d86dc38aa47fd0299f882b681d12a3d0 (patch) | |
| tree | ddc5473ad22ad7da70eb4cb6e24a22c2f4368e13 | |
| parent | verify integrity for remote-checksum libraries (diff) | |
support verified flat-format libraries
| -rw-r--r-- | ozone/src/launcher.rs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/ozone/src/launcher.rs b/ozone/src/launcher.rs index 336ff31..98e8143 100644 --- a/ozone/src/launcher.rs +++ b/ozone/src/launcher.rs @@ -597,15 +597,20 @@ impl LibraryRepository { } fn create_download(&self, lib: &Library, classifier: Option<&str>) -> Option<Box<dyn FileDownload>> { - let remote_checksum = |base| { + let flat_library = |base| { let path = LibraryRepository::get_artifact_path(lib.name.as_str(), classifier)?; let url: String = [base, path.to_string_lossy().as_ref()].into_iter().collect(); - let check_url: String = [url.as_str(), ".sha1"].into_iter().collect(); - Some(Box::new(RemoteChecksumDownload::new(url, check_url, self.home.join(path))) as Box<dyn FileDownload>) + + if let Some(digest) = lib.sha1 { + Some(Box::new(VerifiedDownload::new(url, self.home.join(path), lib.size, Some(digest))) as Box<dyn FileDownload>) + } else { + let check_url: String = [url.as_str(), ".sha1"].into_iter().collect(); + Some(Box::new(RemoteChecksumDownload::new(url, check_url, self.home.join(path))) as Box<dyn FileDownload>) + } }; if let Some(ref url) = lib.url { - remote_checksum(url) + flat_library(url) } else if let Some(ref downloads) = lib.downloads { let dlinfo = downloads.get_download_info(classifier)?; // drinking game: take a shot once per heap allocation @@ -613,7 +618,7 @@ impl LibraryRepository { Some(Box::new(VerifiedDownload::new(dlinfo.url.as_ref()?, path.as_path(), dlinfo.size, dlinfo.sha1))) } else { - remote_checksum("https://libraries.minecraft.net/") + flat_library("https://libraries.minecraft.net/") } } |
