Fix launcher overrides (#7)

* Fix launcher overrides

* Remove none set

* Patch to work with legacy versions

* remove mc
This commit is contained in:
Geometrically 2023-05-12 20:42:18 -07:00 committed by GitHub
parent 6512dbae1c
commit 3db00534c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 2068 additions and 25 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "daedalus"
version = "0.1.20"
version = "0.1.21"
authors = ["Jai A <jaiagr+gpg@pm.me>"]
edition = "2018"
license = "MIT"

View File

@ -327,7 +327,22 @@ pub fn merge_partial_library(
mut merge: Library,
) -> Library {
if let Some(downloads) = partial.downloads {
merge.downloads = Some(downloads)
if let Some(merge_downloads) = &mut merge.downloads {
if let Some(artifact) = downloads.artifact {
merge_downloads.artifact = Some(artifact);
}
if let Some(classifiers) = downloads.classifiers {
if let Some(merge_classifiers) = &mut merge_downloads.classifiers {
for classifier in classifiers {
merge_classifiers.insert(classifier.0, classifier.1);
}
} else {
merge_downloads.classifiers = Some(classifiers);
}
}
} else {
merge.downloads = Some(downloads)
}
}
if let Some(extract) = partial.extract {
merge.extract = Some(extract)
@ -339,10 +354,22 @@ pub fn merge_partial_library(
merge.url = Some(url)
}
if let Some(natives) = partial.natives {
merge.natives = Some(natives)
if let Some(merge_natives) = &mut merge.natives {
for native in natives {
merge_natives.insert(native.0, native.1);
}
} else {
merge.natives = Some(natives);
}
}
if let Some(rules) = partial.rules {
merge.rules = Some(rules)
if let Some(merge_rules) = &mut merge.rules {
for rule in rules {
merge_rules.push(rule);
}
} else {
merge.rules = Some(rules)
}
}
if let Some(checksums) = partial.checksums {
merge.checksums = Some(checksums)

View File

@ -1,6 +1,6 @@
[package]
name = "daedalus_client"
version = "0.1.20"
version = "0.1.21"
authors = ["Jai A <jaiagr+gpg@pm.me>"]
edition = "2018"

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,7 @@
use crate::download_file;
use crate::{format_url, upload_file_to_bucket, Error};
use daedalus::get_hash;
use daedalus::minecraft::{
merge_partial_library, Library, PartialLibrary, VersionManifest,
};
use daedalus::minecraft::{merge_partial_library, Library, PartialLibrary, VersionManifest, VersionInfo};
use log::info;
use serde::Deserialize;
use std::sync::Arc;
@ -66,7 +64,7 @@ pub async fn retrieve_data(
let mut version_info =
daedalus::minecraft::fetch_version_info(version).await?;
fn patch_library(patches: &Vec<LibraryPatch>, mut library: Library) -> Vec<Library> {
fn patch_library(patches: &Vec<LibraryPatch>, mut library: Library, version_info: &VersionInfo) -> Vec<Library> {
let mut val = Vec::new();
let actual_patches = patches
@ -77,22 +75,26 @@ pub async fn retrieve_data(
if !actual_patches.is_empty()
{
for patch in actual_patches {
println!("{} {}", version_info.id, patch._comment);
if let Some(override_) = &patch.override_ {
library = merge_partial_library(
override_.clone(),
library,
);
}
if let Some(additional_libraries) =
&patch.additional_libraries
{
for additional_library in additional_libraries {
if patch.patch_additional_libraries.unwrap_or(false) {
let mut libs = patch_library(patches, additional_library.clone());
let mut libs = patch_library(patches, additional_library.clone(), &version_info);
val.append(&mut libs)
} else {
val.push(additional_library.clone());
}
}
} else if let Some(override_) = &patch.override_ {
library = merge_partial_library(
override_.clone(),
library,
);
}
}
@ -105,8 +107,8 @@ pub async fn retrieve_data(
}
let mut new_libraries = Vec::new();
for library in version_info.libraries {
let mut libs = patch_library(&patches, library);
for library in version_info.libraries.clone() {
let mut libs = patch_library(&patches, library, &version_info);
new_libraries.append(&mut libs)
}
version_info.libraries = new_libraries;
@ -266,12 +268,6 @@ async fn fetch_library_patches(
url: Option<&str>,
semaphore: Arc<Semaphore>,
) -> Result<Vec<LibraryPatch>, Error> {
Ok(serde_json::from_slice(
&download_file(
url.unwrap_or(&format_url("library-patches.json")),
None,
semaphore,
)
.await?,
)?)
let patches = include_bytes!("../library-patches.json");
Ok(serde_json::from_slice(patches)?)
}