mirror of
https://github.com/Anuken/Mindustry.git
synced 2026-10-01 18:50:27 +03:00
Allow selecting a version when reinstalling a mod (#12589)
* Mod reinstall select version * Support for JSON mods with/without releases * Removed commented-out code
This commit is contained in:
@@ -50,6 +50,7 @@ mods.browser.add = Install
|
||||
mods.browser.reinstall = Reinstall
|
||||
mods.browser.view-releases = View Releases
|
||||
mods.browser.noreleases = [scarlet]No Releases Found\n[accent]Couldn't find any releases for this mod. Check if the mod's repository has any releases published.
|
||||
mods.browser.current = [lightgray]Most recent commit
|
||||
mods.browser.latest = [lightgray][Latest]
|
||||
mods.browser.releases = Releases
|
||||
mods.browser.fetching = Fetching Releases...
|
||||
|
||||
@@ -7,14 +7,12 @@ import arc.graphics.*;
|
||||
import arc.graphics.Texture.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.input.*;
|
||||
import arc.scene.style.*;
|
||||
import arc.scene.ui.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import arc.util.Http.*;
|
||||
import arc.util.serialization.*;
|
||||
import arc.util.serialization.Jval.*;
|
||||
import mindustry.*;
|
||||
import mindustry.core.*;
|
||||
import mindustry.gen.*;
|
||||
@@ -350,61 +348,7 @@ public class ModBrowserDialog extends BaseDialog{
|
||||
Core.app.openURI("https://github.com/" + mod.repo);
|
||||
});
|
||||
|
||||
sel.buttons.button("@mods.browser.view-releases", Icon.zoom, () -> {
|
||||
BaseDialog load = new BaseDialog("");
|
||||
load.cont.add("[accent]" + Core.bundle.get("mods.browser.fetching"));
|
||||
load.show();
|
||||
Http.get(ghApi + "/repos/" + mod.repo + "/releases", res -> {
|
||||
var json = Jval.read(res.getResultAsString());
|
||||
JsonArray releases = json.asArray();
|
||||
|
||||
Core.app.post(() -> {
|
||||
load.hide();
|
||||
|
||||
if(releases.size == 0){
|
||||
ui.showInfo("@mods.browser.noreleases");
|
||||
}else{
|
||||
sel.hide();
|
||||
var downloads = new BaseDialog("@mods.browser.releases");
|
||||
downloads.cont.pane(p -> {
|
||||
for(int j = 0; j < releases.size; j++){
|
||||
var release = releases.get(j);
|
||||
|
||||
int index = j;
|
||||
p.table(((TextureRegionDrawable)Tex.whiteui).tint(Pal.darkestGray), t -> {
|
||||
t.add("[accent]" + release.getString("name") + (index == 0 ? " " + Core.bundle.get("mods.browser.latest") : "")).top().left().growX().wrap().pad(5f);
|
||||
t.row();
|
||||
t.add((release.getString("published_at")).substring(0, 10).replaceAll("-", "/")).top().left().growX().wrap().pad(5f).color(Color.gray);
|
||||
t.row();
|
||||
t.table(b -> {
|
||||
b.defaults().size(150f, 54f).pad(2f);
|
||||
b.button("@mods.github.open-release", Icon.link, () -> Core.app.openURI(release.getString("html_url")));
|
||||
b.button("@mods.browser.add", Icon.download, () -> {
|
||||
String releaseUrl = release.getString("url");
|
||||
ui.mods.githubImportMod(mod.repo, mod.hasJava, releaseUrl.substring(releaseUrl.lastIndexOf("/") + 1), true);
|
||||
});
|
||||
}).right();
|
||||
}).margin(5f).growX().pad(5f);
|
||||
|
||||
if(j < releases.size - 1) p.row();
|
||||
}
|
||||
}).width(500f).scrollX(false).fillY();
|
||||
downloads.buttons.button("@back", Icon.left, () -> {
|
||||
downloads.clear();
|
||||
downloads.hide();
|
||||
sel.show();
|
||||
}).size(150f, 54f).pad(2f);
|
||||
downloads.keyDown(KeyCode.escape, downloads::hide);
|
||||
downloads.keyDown(KeyCode.back, downloads::hide);
|
||||
downloads.hidden(sel::show);
|
||||
downloads.show();
|
||||
}
|
||||
});
|
||||
}, t -> Core.app.post(() -> {
|
||||
ui.mods.showModError(t);
|
||||
load.hide();
|
||||
}));
|
||||
});
|
||||
sel.buttons.button("@mods.browser.view-releases", Icon.zoom, () -> ui.mods.viewReleases(mod.repo, mod.hasJava, false));
|
||||
sel.keyDown(KeyCode.escape, sel::hide);
|
||||
sel.keyDown(KeyCode.back, sel::hide);
|
||||
sel.show();
|
||||
|
||||
@@ -5,6 +5,7 @@ import arc.files.*;
|
||||
import arc.func.*;
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.input.*;
|
||||
import arc.scene.*;
|
||||
import arc.scene.style.*;
|
||||
import arc.scene.ui.TextButton.*;
|
||||
@@ -15,6 +16,7 @@ import arc.util.*;
|
||||
import arc.util.Http.*;
|
||||
import arc.util.io.*;
|
||||
import arc.util.serialization.*;
|
||||
import arc.util.serialization.Jval.*;
|
||||
import mindustry.ctype.*;
|
||||
import mindustry.game.EventType.*;
|
||||
import mindustry.gen.*;
|
||||
@@ -33,6 +35,8 @@ public class ModsDialog extends BaseDialog{
|
||||
protected float modImportProgress;
|
||||
protected boolean cancelledImport;
|
||||
protected BaseDialog currentContent;
|
||||
protected BaseDialog downloads;
|
||||
protected BaseDialog modDetails;
|
||||
|
||||
protected float scroll = 0f;
|
||||
//only records mods that have a valid repo!
|
||||
@@ -391,22 +395,22 @@ public class ModsDialog extends BaseDialog{
|
||||
}
|
||||
|
||||
private void showMod(LoadedMod mod){
|
||||
BaseDialog dialog = new BaseDialog(mod.meta.displayName);
|
||||
modDetails = new BaseDialog(mod.meta.displayName);
|
||||
|
||||
dialog.addCloseButton();
|
||||
modDetails.addCloseButton();
|
||||
|
||||
if(!mobile){
|
||||
dialog.buttons.button("@mods.openfolder", Icon.link, () -> Core.app.openFolder(mod.file.absolutePath()));
|
||||
modDetails.buttons.button("@mods.openfolder", Icon.link, () -> Core.app.openFolder(mod.file.absolutePath()));
|
||||
}
|
||||
|
||||
if(mod.getRepo() != null){
|
||||
boolean showImport = !mod.hasSteamID();
|
||||
dialog.buttons.button("@mods.github.open", Icon.link, () -> Core.app.openURI("https://github.com/" + mod.getRepo()));
|
||||
if(mobile && showImport) dialog.buttons.row();
|
||||
if(showImport) dialog.buttons.button("@mods.browser.reinstall", Icon.download, () -> githubImportMod(mod.getRepo(), mod.isJava(), null, false));
|
||||
modDetails.buttons.button("@mods.github.open", Icon.link, () -> Core.app.openURI("https://github.com/" + mod.getRepo()));
|
||||
if(mobile && showImport) modDetails.buttons.row();
|
||||
if(showImport) modDetails.buttons.button("@mods.browser.reinstall", Icon.download, () -> viewReleases(mod.getRepo(), mod.isJava(), true));
|
||||
}
|
||||
|
||||
dialog.cont.pane(desc -> {
|
||||
modDetails.cont.pane(desc -> {
|
||||
desc.center();
|
||||
desc.defaults().padTop(10).left();
|
||||
|
||||
@@ -444,8 +448,8 @@ public class ModsDialog extends BaseDialog{
|
||||
|
||||
Seq<UnlockableContent> all = Seq.with(content.getContentMap()).<Content>flatten().select(c -> c.minfo.mod == mod && c instanceof UnlockableContent u && !u.isHidden()).as();
|
||||
if(all.any()){
|
||||
dialog.cont.row();
|
||||
dialog.cont.button("@mods.viewcontent", Icon.book, () -> {
|
||||
modDetails.cont.row();
|
||||
modDetails.cont.button("@mods.viewcontent", Icon.book, () -> {
|
||||
BaseDialog d = new BaseDialog(mod.meta.displayName);
|
||||
d.cont.pane(cs -> {
|
||||
int i = 0;
|
||||
@@ -467,7 +471,7 @@ public class ModsDialog extends BaseDialog{
|
||||
}).size(300, 50).pad(4);
|
||||
}
|
||||
|
||||
dialog.show();
|
||||
modDetails.show();
|
||||
}
|
||||
|
||||
protected void handleMod(String repo, HttpResponse result, boolean forceEnable){
|
||||
@@ -495,6 +499,8 @@ public class ModsDialog extends BaseDialog{
|
||||
try{
|
||||
setup();
|
||||
ui.loadfrag.hide();
|
||||
if(downloads != null) downloads.hide();
|
||||
if(modDetails != null) modDetails.hide();
|
||||
}catch(Throwable e){
|
||||
ui.showException(e);
|
||||
}
|
||||
@@ -523,6 +529,76 @@ public class ModsDialog extends BaseDialog{
|
||||
}
|
||||
}
|
||||
|
||||
public void viewReleases(String repo, boolean isJava, boolean reinstall) {
|
||||
BaseDialog load = new BaseDialog("");
|
||||
load.cont.add("[accent]" + Core.bundle.get("mods.browser.fetching"));
|
||||
load.show();
|
||||
Http.get(ghApi + "/repos/" + repo + "/releases", res -> {
|
||||
var json = Jval.read(res.getResultAsString());
|
||||
JsonArray releases = json.asArray();
|
||||
|
||||
Core.app.post(() -> {
|
||||
load.hide();
|
||||
|
||||
if(releases.size == 0){
|
||||
if(reinstall && !isJava){
|
||||
githubImportMod(repo, isJava, null, false);
|
||||
}else{
|
||||
ui.showInfo("@mods.browser.noreleases");
|
||||
}
|
||||
}else{
|
||||
downloads = new BaseDialog("@mods.browser.releases");
|
||||
downloads.cont.pane(p -> {
|
||||
if(reinstall && !isJava){
|
||||
p.table(((TextureRegionDrawable)Tex.whiteui).tint(Pal.darkestGray), t -> {
|
||||
t.add("@mods.browser.current").top().left().growX().wrap().pad(5f).padBottom(15f);
|
||||
t.row();
|
||||
t.table(b -> {
|
||||
b.defaults().size(150f, 54f).pad(2f);
|
||||
b.button("@mods.github.open", Icon.link, () -> Core.app.openURI("https://github.com/" + repo));
|
||||
b.button("@mods.browser.add", Icon.download, () -> githubImportMod(repo, isJava, null, false));
|
||||
}).right();
|
||||
}).margin(5f).growX().pad(5f);
|
||||
p.row();
|
||||
}
|
||||
|
||||
for(int j = 0; j < releases.size; j++){
|
||||
var release = releases.get(j);
|
||||
|
||||
int index = j;
|
||||
p.table(((TextureRegionDrawable)Tex.whiteui).tint(Pal.darkestGray), t -> {
|
||||
t.add("[accent]" + release.getString("name") + (index == 0 ? " " + Core.bundle.get("mods.browser.latest") : "")).top().left().growX().wrap().pad(5f);
|
||||
t.row();
|
||||
t.add((release.getString("published_at")).substring(0, 10).replaceAll("-", "/")).top().left().growX().wrap().pad(5f).color(Color.gray);
|
||||
t.row();
|
||||
t.table(b -> {
|
||||
b.defaults().size(150f, 54f).pad(2f);
|
||||
b.button("@mods.github.open-release", Icon.link, () -> Core.app.openURI(release.getString("html_url")));
|
||||
b.button("@mods.browser.add", Icon.download, () -> {
|
||||
String releaseUrl = release.getString("url");
|
||||
githubImportMod(repo, isJava, releaseUrl.substring(releaseUrl.lastIndexOf("/") + 1), true);
|
||||
});
|
||||
}).right();
|
||||
}).margin(5f).growX().pad(5f);
|
||||
|
||||
if(j < releases.size - 1) p.row();
|
||||
}
|
||||
}).width(500f).scrollX(false).fillY();
|
||||
downloads.buttons.button("@back", Icon.left, () -> {
|
||||
downloads.clear();
|
||||
downloads.hide();
|
||||
}).size(150f, 54f).pad(2f);
|
||||
downloads.keyDown(KeyCode.escape, downloads::hide);
|
||||
downloads.keyDown(KeyCode.back, downloads::hide);
|
||||
downloads.show();
|
||||
}
|
||||
});
|
||||
}, t -> Core.app.post(() -> {
|
||||
showModError(t);
|
||||
load.hide();
|
||||
}));
|
||||
}
|
||||
|
||||
public void githubImportMod(String repo, boolean isJava, boolean forceEnable){
|
||||
githubImportMod(repo, isJava, null, forceEnable);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user