From 91c834117da95fe777b656f28dcc0ae238a55e02 Mon Sep 17 00:00:00 2001 From: artdeell Date: Mon, 21 Aug 2023 17:48:49 +0300 Subject: [PATCH] Feat[modpack]: Set up framework for handling ModpackApi IOExceptions --- .../modloaders/modpacks/api/CommonApi.java | 3 ++- .../modloaders/modpacks/api/CurseforgeApi.java | 2 +- .../modloaders/modpacks/api/ModpackApi.java | 15 +++++++++++---- .../modloaders/modpacks/api/ModpackInstaller.java | 4 +--- .../modloaders/modpacks/api/ModrinthApi.java | 2 +- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/CommonApi.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/CommonApi.java index 00c753b1b..81b57920d 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/CommonApi.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/modloaders/modpacks/api/CommonApi.java @@ -9,6 +9,7 @@ import net.kdt.pojavlaunch.modloaders.modpacks.models.ModItem; import net.kdt.pojavlaunch.modloaders.modpacks.models.SearchFilters; import net.kdt.pojavlaunch.modloaders.modpacks.models.SearchResult; +import java.io.IOException; import java.util.Arrays; import java.util.concurrent.Callable; import java.util.concurrent.Future; @@ -92,7 +93,7 @@ public class CommonApi implements ModpackApi { } @Override - public ModLoader installMod(ModDetail modDetail, int selectedVersion) { + public ModLoader installMod(ModDetail modDetail, int selectedVersion) throws IOException { return getModpackApi(modDetail.apiSource).installMod(modDetail, selectedVersion); } 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 8484e2f3f..8d52bfd70 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 @@ -118,7 +118,7 @@ public class CurseforgeApi implements ModpackApi{ } @Override - public ModLoader installMod(ModDetail modDetail, int selectedVersion) { + public ModLoader installMod(ModDetail modDetail, int selectedVersion) throws IOException{ //TODO considering only modpacks for now 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 8675e2cf2..7f6b20b1c 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 @@ -7,11 +7,14 @@ import com.kdt.mcgui.ProgressLayout; import net.kdt.pojavlaunch.PojavApplication; import net.kdt.pojavlaunch.R; +import net.kdt.pojavlaunch.Tools; 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 net.kdt.pojavlaunch.modloaders.modpacks.models.SearchResult; +import java.io.IOException; + /** * */ @@ -49,9 +52,13 @@ public interface ModpackApi { // which may lead to two concurrent installations (very bad) ProgressLayout.setProgress(ProgressLayout.INSTALL_MODPACK, 0, R.string.global_waiting); PojavApplication.sExecutorService.execute(() -> { - ModLoader loaderInfo = installMod(modDetail, selectedVersion); - if (loaderInfo == null) return; - loaderInfo.getDownloadTask(new NotificationDownloadListener(context, loaderInfo)).run(); + try { + ModLoader loaderInfo = installMod(modDetail, selectedVersion); + if (loaderInfo == null) return; + loaderInfo.getDownloadTask(new NotificationDownloadListener(context, loaderInfo)).run(); + }catch (IOException e) { + // TODO: pass on the IOException to a relevant handler + } }); } @@ -62,5 +69,5 @@ public interface ModpackApi { * @param modDetail The mod detail data * @param selectedVersion The selected version */ - ModLoader installMod(ModDetail modDetail, int selectedVersion); + ModLoader installMod(ModDetail modDetail, int selectedVersion) throws IOException; } 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 7be24e5f8..708754280 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 @@ -18,7 +18,7 @@ import java.util.Locale; public class ModpackInstaller { - public static ModLoader installModpack(ModDetail modDetail, int selectedVersion, InstallFunction installFunction) { + public static ModLoader installModpack(ModDetail modDetail, int selectedVersion, InstallFunction installFunction) throws IOException{ String versionUrl = modDetail.versionUrls[selectedVersion]; String modpackName = modDetail.title.toLowerCase(Locale.ROOT).trim().replace(" ", "_" ); @@ -35,8 +35,6 @@ public class ModpackInstaller { // Install the modpack modLoaderInfo = installFunction.installModpack(modpackFile, new File(Tools.DIR_GAME_HOME, "custom_instances/"+modpackName)); - } catch (IOException e) { - throw new RuntimeException(e); } finally { modpackFile.delete(); ProgressLayout.clearProgress(ProgressLayout.INSTALL_MODPACK); 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 479fcd351..4a34be972 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 @@ -90,7 +90,7 @@ public class ModrinthApi implements ModpackApi{ } @Override - public ModLoader installMod(ModDetail modDetail, int selectedVersion) { + public ModLoader installMod(ModDetail modDetail, int selectedVersion) throws IOException{ //TODO considering only modpacks for now return ModpackInstaller.installModpack(modDetail, selectedVersion, this::installMrpack); }