From b1d022cccd7e0004573e3ec4d157693e04d47cb9 Mon Sep 17 00:00:00 2001 From: Mathias Boulay Date: Sun, 13 Aug 2023 19:47:25 +0200 Subject: [PATCH] Feat,wip[modpack-install]: auto modloader install --- .../modloaders/modpacks/ModItemAdapter.java | 1 + .../modpacks/api/CurseforgeApi.java | 4 +-- .../modloaders/modpacks/api/ModpackApi.java | 33 +++++++++++++++++-- .../modpacks/api/ModpackInstaller.java | 8 +++-- .../modloaders/modpacks/api/ModrinthApi.java | 4 +-- 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/ModItemAdapter.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/ModItemAdapter.java index bec028ac4..aa2cc0a57 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/ModItemAdapter.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/ModItemAdapter.java @@ -63,6 +63,7 @@ public class ModItemAdapter extends RecyclerView.Adapter { mModpackApi.handleInstallation( + mExtendedButton.getContext().getApplicationContext(), mModDetail, mExtendedSpinner.getSelectedItemPosition()); diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/CurseforgeApi.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/CurseforgeApi.java index fa6ae1439..48a203caf 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/CurseforgeApi.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/CurseforgeApi.java @@ -104,9 +104,9 @@ public class CurseforgeApi implements ModpackApi{ } @Override - public void installMod(ModDetail modDetail, int selectedVersion) { + public ModLoader installMod(ModDetail modDetail, int selectedVersion) { //TODO considering only modpacks for now - ModpackInstaller.installModpack(modDetail, selectedVersion, this::installCurseforgeZip); + return ModpackInstaller.installModpack(modDetail, selectedVersion, this::installCurseforgeZip); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModpackApi.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModpackApi.java index c47227e96..46fe7caed 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModpackApi.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModpackApi.java @@ -1,11 +1,18 @@ package net.kdt.pojavlaunch.modloaders.modpacks.api; +import android.content.Context; +import android.content.Intent; +import android.widget.Toast; + import net.kdt.pojavlaunch.PojavApplication; +import net.kdt.pojavlaunch.modloaders.ModloaderDownloadListener; import net.kdt.pojavlaunch.modloaders.modpacks.models.ModDetail; import net.kdt.pojavlaunch.modloaders.modpacks.models.ModItem; import net.kdt.pojavlaunch.modloaders.modpacks.models.SearchFilters; +import java.io.File; + /** * */ @@ -29,9 +36,29 @@ public interface ModpackApi { * @param modDetail The mod detail data * @param selectedVersion The selected version */ - default void handleInstallation(ModDetail modDetail, int selectedVersion) { + default void handleInstallation(Context context, ModDetail modDetail, int selectedVersion) { PojavApplication.sExecutorService.execute(() -> { - installMod(modDetail, selectedVersion); + ModLoader loaderInfo = installMod(modDetail, selectedVersion); + if (loaderInfo == null) return; + + loaderInfo.getDownloadTask(new ModloaderDownloadListener() { + @Override + public void onDownloadFinished(File downloadedFile) { + Intent intent = loaderInfo.getInstallationIntent(context, downloadedFile); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + + @Override + public void onDataNotAvailable() { + Toast.makeText(context, "Version gathering failed", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onDownloadError(Exception e) { + Toast.makeText(context, "download failed", Toast.LENGTH_SHORT).show(); + } + }).run(); }); } @@ -42,5 +69,5 @@ public interface ModpackApi { * @param modDetail The mod detail data * @param selectedVersion The selected version */ - void installMod(ModDetail modDetail, int selectedVersion); + ModLoader installMod(ModDetail modDetail, int selectedVersion); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModpackInstaller.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModpackInstaller.java index 2c4b50879..03686cce8 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModpackInstaller.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModpackInstaller.java @@ -4,6 +4,7 @@ import com.kdt.mcgui.ProgressLayout; import net.kdt.pojavlaunch.R; import net.kdt.pojavlaunch.Tools; +import net.kdt.pojavlaunch.modloaders.ModloaderDownloadListener; import net.kdt.pojavlaunch.modloaders.modpacks.imagecache.ModIconCache; import net.kdt.pojavlaunch.modloaders.modpacks.models.ModDetail; import net.kdt.pojavlaunch.progresskeeper.DownloaderProgressWrapper; @@ -17,7 +18,7 @@ import java.util.Locale; public class ModpackInstaller { - public static void installModpack(ModDetail modDetail, int selectedVersion, InstallFunction installFunction) { + public static ModLoader installModpack(ModDetail modDetail, int selectedVersion, InstallFunction installFunction) { String versionUrl = modDetail.versionUrls[selectedVersion]; String modpackName = modDetail.title.toLowerCase(Locale.ROOT).trim().replace(" ", "_" ); @@ -33,6 +34,7 @@ public class ModpackInstaller { ProgressLayout.INSTALL_MODPACK)); // Install the modpack modLoaderInfo = installFunction.installModpack(modpackFile, new File(Tools.DIR_GAME_HOME, "custom_instances/"+modpackName)); + } catch (IOException e) { throw new RuntimeException(e); } finally { @@ -40,7 +42,7 @@ public class ModpackInstaller { ProgressLayout.clearProgress(ProgressLayout.INSTALL_MODPACK); } if(modLoaderInfo == null) { - return; + return null; } // Create the instance @@ -53,6 +55,8 @@ public class ModpackInstaller { LauncherProfiles.mainProfileJson.profiles.put(modpackName, profile); LauncherProfiles.update(); + + return modLoaderInfo; } interface InstallFunction { diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModrinthApi.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModrinthApi.java index d6395249f..cff583219 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModrinthApi.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/ModrinthApi.java @@ -86,9 +86,9 @@ public class ModrinthApi implements ModpackApi{ } @Override - public void installMod(ModDetail modDetail, int selectedVersion) { + public ModLoader installMod(ModDetail modDetail, int selectedVersion) { //TODO considering only modpacks for now - ModpackInstaller.installModpack(modDetail, selectedVersion, this::installMrpack); + return ModpackInstaller.installModpack(modDetail, selectedVersion, this::installMrpack); } private static ModLoader createInfo(ModrinthIndex modrinthIndex) {