diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java index eb7be914d..c4bfdac61 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/ModpackHelper.java @@ -110,13 +110,13 @@ public final class ModpackHelper { if (modpack.getManifest() instanceof CurseManifest) return new CurseInstallTask(profile.getDependency(), zipFile, modpack, ((CurseManifest) modpack.getManifest()), name) - .finalized(Schedulers.defaultScheduler(), ExceptionalConsumer.fromRunnable(success), failure); + .finalized(Schedulers.defaultScheduler(), success, failure); else if (modpack.getManifest() instanceof HMCLModpackManifest) return new HMCLModpackInstallTask(profile, zipFile, modpack, name) - .finalized(Schedulers.defaultScheduler(), ExceptionalConsumer.fromRunnable(success), failure); + .finalized(Schedulers.defaultScheduler(), success, failure); else if (modpack.getManifest() instanceof MultiMCInstanceConfiguration) return new MultiMCModpackInstallTask(profile.getDependency(), zipFile, modpack, ((MultiMCInstanceConfiguration) modpack.getManifest()), name) - .finalized(Schedulers.defaultScheduler(), ExceptionalConsumer.fromRunnable(success), failure) + .finalized(Schedulers.defaultScheduler(), success, failure) .then(new MultiMCInstallVersionSettingTask(profile, ((MultiMCInstanceConfiguration) modpack.getManifest()), name)); else throw new IllegalStateException("Unrecognized modpack: " + modpack); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountLoginPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountLoginPane.java index 4e739e05e..01b6ae552 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountLoginPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AccountLoginPane.java @@ -62,7 +62,7 @@ public class AccountLoginPane extends StackPane { progressBar.setVisible(true); lblCreationWarning.setText(""); Task.ofResult(() -> oldAccount.logInWithPassword(password)) - .finalizedResult(Schedulers.javafx(), authInfo -> { + .finalized(Schedulers.javafx(), authInfo -> { success.accept(authInfo); fireEvent(new DialogCloseEvent()); progressBar.setVisible(false); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java index 06744aa4c..32c76b49f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAccountPane.java @@ -196,7 +196,7 @@ public class AddAccountPane extends StackPane { Object additionalData = getAuthAdditionalData(); Task.ofResult(() -> factory.create(new Selector(), username, password, additionalData)) - .finalizedResult(Schedulers.javafx(), account -> { + .finalized(Schedulers.javafx(), account -> { int oldIndex = Accounts.getAccounts().indexOf(account); if (oldIndex == -1) { Accounts.getAccounts().add(account); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAuthlibInjectorServerPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAuthlibInjectorServerPane.java index 68f2be8d8..85ec12ba1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAuthlibInjectorServerPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/account/AddAuthlibInjectorServerPane.java @@ -106,7 +106,7 @@ public class AddAuthlibInjectorServerPane extends StackPane implements DialogAwa Task.of(() -> { serverBeingAdded = AuthlibInjectorServer.locateServer(url); - }).finalized(Schedulers.javafx(), (variables, isDependentsSucceeded, exception) -> { + }).finalized(Schedulers.javafx(), (isDependentsSucceeded, exception) -> { addServerPane.setDisable(false); nextPane.hideSpinner(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java index 4efc6f38b..c5094bb25 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/ModpackPage.java @@ -111,7 +111,7 @@ public final class ModpackPage extends StackPane implements WizardPage { spinnerPane.showSpinner(); Task.ofResult(() -> CompressingUtils.findSuitableEncoding(selectedFile.toPath())) .thenResult(encoding -> manifest = ModpackHelper.readModpackManifest(selectedFile.toPath(), encoding)) - .finalizedResult(Schedulers.javafx(), manifest -> { + .finalized(Schedulers.javafx(), manifest -> { spinnerPane.hideSpinner(); controller.getSettings().put(MODPACK_MANIFEST, manifest); lblName.setText(manifest.getName()); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VanillaInstallWizardProvider.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VanillaInstallWizardProvider.java index 087e8cae3..9a3e6bcbf 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VanillaInstallWizardProvider.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VanillaInstallWizardProvider.java @@ -59,7 +59,7 @@ public final class VanillaInstallWizardProvider implements WizardProvider { if (settings.containsKey("optifine")) builder.version((RemoteVersion) settings.get("optifine")); - return builder.buildAsync().finalized((a, b, c) -> profile.getRepository().refreshVersions()) + return builder.buildAsync().finalized((a, b) -> profile.getRepository().refreshVersions()) .then(Task.of(Schedulers.javafx(), () -> profile.setSelectedVersion(name))); } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java index e7d64e8b7..1787606c3 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/download/VersionsPage.java @@ -128,7 +128,7 @@ public final class VersionsPage extends BorderPane implements WizardPage, Refres @Override public void refresh() { transitionHandler.setContent(spinner, ContainerAnimations.FADE.getAnimationProducer()); - executor = versionList.refreshAsync(gameVersion, downloadProvider).finalized((variables, isDependentsSucceeded, exception) -> { + executor = versionList.refreshAsync(gameVersion, downloadProvider).finalized((isDependentsSucceeded, exception) -> { if (isDependentsSucceeded) { List items = loadVersions(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java index 904b9801a..97f7e1b44 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/ModListPage.java @@ -92,7 +92,7 @@ public final class ModListPage extends Control { modManager.refreshMods(); return new LinkedList<>(modManager.getMods()); } - }).finalizedResult(Schedulers.javafx(), (list, isDependentsSucceeded, exception) -> { + }).finalized(Schedulers.javafx(), (list, isDependentsSucceeded, exception) -> { loadingProperty().set(false); if (isDependentsSucceeded) FXUtils.onWeakChangeAndOperate(parentTab.getSelectionModel().selectedItemProperty(), newValue -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListPage.java index b7592469e..195da3bd7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/WorldListPage.java @@ -29,7 +29,6 @@ import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; -import java.io.IOException; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Path; import java.util.List; @@ -52,7 +51,7 @@ public class WorldListPage extends ListPage { setLoading(true); Task.ofResult(() -> World.getWorlds(savesDir).parallel().collect(Collectors.toList())) - .finalizedResult(Schedulers.javafx(), (result, isDependentsSucceeded, exception) -> { + .finalized(Schedulers.javafx(), (result, isDependentsSucceeded, exception) -> { setLoading(false); if (isDependentsSucceeded) itemsProperty().setAll(result.stream().map(WorldListItem::new).collect(Collectors.toList())); @@ -74,10 +73,10 @@ public class WorldListPage extends ListPage { // Only accept one world file because user is required to confirm the new world name // Or too many input dialogs are popped. Task.ofResult(() -> new World(zipFile.toPath())) - .finalizedResult(Schedulers.javafx(), world -> { + .finalized(Schedulers.javafx(), world -> { Controllers.inputDialog(i18n("world.name.enter"), (name, resolve, reject) -> { Task.of(() -> world.install(savesDir, name)) - .finalized(Schedulers.javafx(), var -> { + .finalized(Schedulers.javafx(), () -> { itemsProperty().add(new WorldListItem(new World(savesDir.resolve(name)))); resolve.run(); }, e -> { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java index 19045d5ac..111d5f8c7 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/DefaultGameBuilder.java @@ -69,7 +69,7 @@ public class DefaultGameBuilder extends GameBuilder { result = result.then(dependencyManager.installLibraryAsync(remoteVersion)); return result; - }).finalized((variables, isDependentsSucceeded, exception) -> { + }).finalized((isDependentsSucceeded, exception) -> { if (!isDependentsSucceeded) dependencyManager.getGameRepository().getVersionRoot(name).delete(); }); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FinalizedCallback.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FinalizedCallback.java deleted file mode 100644 index 539b6f11d..000000000 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FinalizedCallback.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Hello Minecraft! Launcher - * Copyright (C) 2019 huangyuhui and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.jackhuang.hmcl.task; - -import org.jackhuang.hmcl.util.AutoTypingMap; - -public interface FinalizedCallback { - void execute(AutoTypingMap variables, boolean isDependentsSucceeded, Exception exception) throws Exception; -} diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FinalizedTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FinalizedTask.java index d0b6caef4..fd37f20e7 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FinalizedTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FinalizedTask.java @@ -53,7 +53,7 @@ final class FinalizedTask extends Task { @Override public void execute() throws Exception { - callback.execute(getVariables(), isDependentsSucceeded(), pred.getLastException()); + callback.execute(isDependentsSucceeded(), pred.getLastException()); if (!isDependentsSucceeded()) throw new SilentException(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java index 631c8ae55..b719b0a67 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/Task.java @@ -320,12 +320,13 @@ public abstract class Task { return new FinalizedTask(this, scheduler, b, ReflectionHelper.getCaller().toString()); } - public final Task finalized(Scheduler scheduler, ExceptionalConsumer, T> success, ExceptionalConsumer failure) { - return finalized(scheduler, (variables, isDependentsSucceeded, exception) -> { + // T, K here is necessary, or javac cannot infer type of failure + public final Task finalized(Scheduler scheduler, ExceptionalRunnable success, ExceptionalConsumer failure) { + return finalized(scheduler, (isDependentsSucceeded, exception) -> { if (isDependentsSucceeded) { if (success != null) try { - success.accept(variables); + success.run(); } catch (Exception e) { Logging.LOG.log(Level.WARNING, "Failed to execute " + success, e); if (failure != null) @@ -421,4 +422,8 @@ public abstract class Task { SUCCEEDED, FAILED } + + public interface FinalizedCallback { + void execute(boolean isDependentsSucceeded, Exception exception) throws Exception; + } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskResult.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskResult.java index 533fead55..46f2ecc55 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskResult.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/TaskResult.java @@ -55,14 +55,12 @@ public abstract class TaskResult extends Task { return new Subtask<>(id, scheduler, task); } - public Task finalizedResult(Scheduler scheduler, ExceptionalConsumer success, ExceptionalConsumer failure) { - return finalized(scheduler, variables -> success.accept(getResult()), failure); + public Task finalized(Scheduler scheduler, ExceptionalConsumer success, ExceptionalConsumer failure) { + return finalized(scheduler, () -> success.accept(getResult()), failure); } - public Task finalizedResult(Scheduler scheduler, FinalizedCallback callback) { - return new FinalizedTask(this, scheduler, - (variables, isDependentsSucceeded, exception) -> callback.execute(getResult(), isDependentsSucceeded, exception), - ReflectionHelper.getCaller().toString()); + public Task finalized(Scheduler scheduler, FinalizedCallback callback) { + return finalized(scheduler, ((isDependentsSucceeded, exception) -> callback.execute(getResult(), isDependentsSucceeded, exception))); } private class Subtask extends TaskResult {