diff --git a/rust/src/model/misc.rs b/rust/src/model/misc.rs index 92f619c..0f727c1 100644 --- a/rust/src/model/misc.rs +++ b/rust/src/model/misc.rs @@ -88,9 +88,10 @@ pub enum StartCheckError { } #[derive(Default, Serialize, Deserialize, Clone)] -#[serde(default)] pub struct ConfigHook { + #[serde(skip_serializing_if = "Option::is_none")] pub allnet_auth: Option, + #[serde(skip_serializing_if = "Option::is_none")] pub aime: Option, } diff --git a/rust/src/pkg.rs b/rust/src/pkg.rs index 2c4d9ea..1accaae 100644 --- a/rust/src/pkg.rs +++ b/rust/src/pkg.rs @@ -128,7 +128,7 @@ impl Package { .unwrap() .to_owned(); - let status = Self::parse_status(&mft); + let status = Self::parse_status(&mft, &dir); let dependencies = Self::sanitize_deps(mft.dependencies); Ok(Package { @@ -221,9 +221,15 @@ impl Package { res } - fn parse_status(mft: &PackageManifest) -> Status { + fn parse_status(mft: &PackageManifest, dir: impl AsRef) -> Status { if mft.installers.len() == 0 { - return Status::OK(make_bitflags!(Feature::Mod), DLLs { game: None, amd: None }); //Unchecked + if dir.as_ref().join("post_load.ps1").exists() { + return Status::Unsupported; + } + if dir.as_ref().join("app").join("data").exists() { + return Status::Unsupported; + } + return Status::OK(make_bitflags!(Feature::Mod), DLLs { game: None, amd: None }); } else { let mut flags = BitFlags::default(); let mut game_dll = None; diff --git a/src/components/ModListEntry.vue b/src/components/ModListEntry.vue index 285a9bb..e88aff1 100644 --- a/src/components/ModListEntry.vue +++ b/src/components/ModListEntry.vue @@ -26,19 +26,31 @@ const model = computed({ await prf.togglePkg(props.pkg, value); }, }); + +const unsupported = computed(() => props.pkg!.loc!.status === 'Unsupported'); + +if (unsupported.value === true && model.value === true) { + prf.togglePkg(props.pkg, false); +}