mirror of
https://github.com/N64Recomp/N64ModernRuntime.git
synced 2026-05-11 03:12:15 +00:00
Add duplicate mod detection
This commit is contained in:
parent
f34909ef42
commit
b0d3e4610c
2 changed files with 14 additions and 3 deletions
|
|
@ -29,9 +29,12 @@ namespace recomp {
|
||||||
UnrecognizedManifestField,
|
UnrecognizedManifestField,
|
||||||
IncorrectManifestFieldType,
|
IncorrectManifestFieldType,
|
||||||
MissingManifestField,
|
MissingManifestField,
|
||||||
InnerFileDoesNotExist
|
InnerFileDoesNotExist,
|
||||||
|
DuplicateMod
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::string error_to_string(ModOpenError);
|
||||||
|
|
||||||
enum class ModLoadError {
|
enum class ModLoadError {
|
||||||
Good,
|
Good,
|
||||||
FailedToLoadSyms,
|
FailedToLoadSyms,
|
||||||
|
|
@ -123,10 +126,9 @@ namespace recomp {
|
||||||
void add_opened_mod(ModManifest&& manifest);
|
void add_opened_mod(ModManifest&& manifest);
|
||||||
|
|
||||||
std::vector<ModHandle> opened_mods;
|
std::vector<ModHandle> opened_mods;
|
||||||
|
std::unordered_set<std::string> mod_ids;
|
||||||
std::unordered_set<std::string> enabled_mods;
|
std::unordered_set<std::string> enabled_mods;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::string error_to_string(ModOpenError);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -366,6 +366,13 @@ recomp::mods::ModOpenError recomp::mods::ModContext::open_mod(const std::filesys
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for this being a duplicate of another opened mod.
|
||||||
|
if (mod_ids.contains(manifest.mod_id)) {
|
||||||
|
error_param = manifest.mod_id;
|
||||||
|
return ModOpenError::DuplicateMod;
|
||||||
|
}
|
||||||
|
mod_ids.emplace(manifest.mod_id);
|
||||||
|
|
||||||
ModOpenError validate_error = validate_manifest(manifest, error_param);
|
ModOpenError validate_error = validate_manifest(manifest, error_param);
|
||||||
if (validate_error != ModOpenError::Good) {
|
if (validate_error != ModOpenError::Good) {
|
||||||
return validate_error;
|
return validate_error;
|
||||||
|
|
@ -404,6 +411,8 @@ std::string recomp::mods::error_to_string(ModOpenError error) {
|
||||||
return "Missing required field in manifest";
|
return "Missing required field in manifest";
|
||||||
case ModOpenError::InnerFileDoesNotExist:
|
case ModOpenError::InnerFileDoesNotExist:
|
||||||
return "File inside mod does not exist";
|
return "File inside mod does not exist";
|
||||||
|
case ModOpenError::DuplicateMod:
|
||||||
|
return "Duplicate mod found";
|
||||||
}
|
}
|
||||||
return "Unknown error " + std::to_string((int)error);
|
return "Unknown error " + std::to_string((int)error);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue