Check for dependencies when importing a mod

This commit is contained in:
MEEPofFaith
2024-04-22 09:17:28 -07:00
parent bfa329db11
commit b167bcfbef
3 changed files with 29 additions and 7 deletions

View File

@@ -187,6 +187,7 @@ mod.dependencies.download = Auto-Import
mod.dependencies.status = Import Results
mod.dependencies.success = Successfully downloaded:
mod.dependencies.failure = Failed to download:
mod.dependencies.imported = This mod requires dependencies. Download?
about.button = About
name = Name:

View File

@@ -680,17 +680,21 @@ public class Mods implements Loadable{
mods.each(mod -> mod.shouldBeEnabled() && mod.hasUnmetDependencies(), mod -> {
mod.missingDependencies.each(toImport::addUnique);
});
Seq<String> remaining = toImport.copy();
ui.mods.importDependencies(remaining, () -> {
toImport.removeAll(remaining);
displayDependencyImportStatus(remaining, toImport);
});
downloadDependencies(toImport, true);
}).size(150, 50);
}}.show();
}
}
private void displayDependencyImportStatus(Seq<String> failed, Seq<String> success){
private void downloadDependencies(Seq<String> toImport, boolean startup){
Seq<String> remaining = toImport.copy();
ui.mods.importDependencies(remaining, () -> {
toImport.removeAll(remaining);
displayDependencyImportStatus(remaining, toImport, startup);
});
}
private void displayDependencyImportStatus(Seq<String> failed, Seq<String> success, boolean startup){
new Dialog(""){{
setFillParent(true);
cont.margin(15);
@@ -726,7 +730,7 @@ public class Mods implements Loadable{
}).fillX();
cont.row();
if(success.any()){
if(startup && success.any()){
cont.image().width(300f).pad(2).height(4f).color(Color.lightGray);
cont.row();
cont.add("@mods.reloadexit").center();
@@ -973,6 +977,22 @@ public class Mods implements Loadable{
return result;
}
/** Checks if a newly imported mod's dependencies are already added. */
public void checkImportDependencies(LoadedMod mod){
if(mod.meta.dependencies.isEmpty()) return;
Seq<String> missing = mod.meta.dependencies.select(m -> getMod(m) == null);
if(missing.isEmpty()) return;
StringBuilder list = new StringBuilder();
for(int i = 0; i < missing.size; i++){
if(i > 0) list.append("\n");
list.append(missing.get(i));
}
ui.showConfirm("@mod.dependencies.imported", list.toString(), () -> {
downloadDependencies(missing, false);
});
}
private boolean resolve(String element, ModResolutionContext context){
context.visited.add(element);
for(final var dependency : context.dependencies.get(element)){

View File

@@ -626,6 +626,7 @@ public class ModsDialog extends BaseDialog{
var mod = mods.importMod(file);
mod.setRepo(repo);
mods.checkImportDependencies(mod);
file.delete();
Core.app.post(() -> {