Feat,wip[modpack-install]: auto modloader install

This commit is contained in:
Mathias Boulay 2023-08-13 19:47:25 +02:00 committed by ArtDev
parent f8078ad8bf
commit b1d022cccd
5 changed files with 41 additions and 9 deletions

View File

@ -63,6 +63,7 @@ public class ModItemAdapter extends RecyclerView.Adapter<ModItemAdapter.ViewHold
mExtendedButton.setOnClickListener(v1 -> {
mModpackApi.handleInstallation(
mExtendedButton.getContext().getApplicationContext(),
mModDetail,
mExtendedSpinner.getSelectedItemPosition());

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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 {

View File

@ -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) {