From 9950bef2608036219a70c221a98ac2ba294a7b5b Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Sat, 15 Sep 2018 23:05:37 +0800 Subject: [PATCH 1/5] Change type of downloadType to string --- .../org/jackhuang/hmcl/setting/Accounts.java | 2 +- .../org/jackhuang/hmcl/setting/Config.java | 10 +++--- .../hmcl/setting/ConfigUpgrader.java | 12 +++++++ .../hmcl/setting/DownloadProviders.java | 36 +++++++++++++++---- .../org/jackhuang/hmcl/setting/Profile.java | 2 +- .../org/jackhuang/hmcl/setting/Settings.java | 17 +-------- .../org/jackhuang/hmcl/ui/SettingsPage.java | 9 +++-- .../org/jackhuang/hmcl/ui/SettingsView.java | 15 ++++---- .../resources/assets/lang/I18N.properties | 4 +-- .../resources/assets/lang/I18N_zh.properties | 4 +-- .../assets/lang/I18N_zh_CN.properties | 4 +-- .../download/BMCLAPIDownloadProvider.java | 5 --- .../download/CurseCDNDownloadProvider.java | 27 -------------- .../hmcl/download/MojangDownloadProvider.java | 4 +-- 14 files changed, 73 insertions(+), 78 deletions(-) delete mode 100644 HMCLCore/src/main/java/org/jackhuang/hmcl/download/CurseCDNDownloadProvider.java diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java index 8f0c210ae..550be7665 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Accounts.java @@ -59,7 +59,7 @@ public final class Accounts { public static final OfflineAccountFactory FACTORY_OFFLINE = OfflineAccountFactory.INSTANCE; public static final YggdrasilAccountFactory FACTORY_YGGDRASIL = new YggdrasilAccountFactory(MojangYggdrasilProvider.INSTANCE); public static final AuthlibInjectorAccountFactory FACTORY_AUTHLIB_INJECTOR = new AuthlibInjectorAccountFactory( - new AuthlibInjectorDownloader(Launcher.HMCL_DIRECTORY.toPath(), () -> Settings.instance().getDownloadProvider())::getArtifactInfo, + new AuthlibInjectorDownloader(Launcher.HMCL_DIRECTORY.toPath(), DownloadProviders::getDownloadProvider)::getArtifactInfo, Accounts::getOrCreateAuthlibInjectorServer); private static final String TYPE_OFFLINE = "offline"; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java index 5988f8621..386c01cc6 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java @@ -115,8 +115,8 @@ public final class Config implements Cloneable, Observable { @SerializedName("localization") private ObjectProperty localization = new SimpleObjectProperty<>(Locales.DEFAULT); - @SerializedName("downloadtype") - private IntegerProperty downloadType = new SimpleIntegerProperty(1); + @SerializedName("downloadType") + private StringProperty downloadType = new SimpleStringProperty("bmclapi"); @SerializedName("configurations") private ObservableMap configurations = FXCollections.observableMap(new TreeMap<>()); @@ -359,15 +359,15 @@ public final class Config implements Cloneable, Observable { return localization; } - public int getDownloadType() { + public String getDownloadType() { return downloadType.get(); } - public void setDownloadType(int downloadType) { + public void setDownloadType(String downloadType) { this.downloadType.set(downloadType); } - public IntegerProperty downloadTypeProperty() { + public StringProperty downloadTypeProperty() { return downloadType; } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java index 85b006662..f89408111 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/ConfigUpgrader.java @@ -86,5 +86,17 @@ final class ConfigUpgrader { deserialized.setHasProxy(StringUtils.isNotBlank(deserialized.getProxyHost())); if (!rawJson.containsKey("hasProxyAuth")) deserialized.setHasProxyAuth(StringUtils.isNotBlank(deserialized.getProxyUser())); + + if (!rawJson.containsKey("downloadType")) { + tryCast(rawJson.get("downloadtype"), Number.class) + .map(Number::intValue) + .ifPresent(id -> { + if (id == 0) { + deserialized.setDownloadType("mojang"); + } else if (id == 1) { + deserialized.setDownloadType("bmclapi"); + } + }); + } } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java index b345c4ace..306192664 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java @@ -17,20 +17,44 @@ */ package org.jackhuang.hmcl.setting; +import static org.jackhuang.hmcl.setting.ConfigHolder.config; +import static org.jackhuang.hmcl.util.Lang.mapOf; +import static org.jackhuang.hmcl.util.Pair.pair; + +import java.util.Map; +import java.util.Optional; + import org.jackhuang.hmcl.download.BMCLAPIDownloadProvider; -import org.jackhuang.hmcl.download.CurseCDNDownloadProvider; import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.download.MojangDownloadProvider; -import org.jackhuang.hmcl.util.Lang; -import java.util.List; +import javafx.beans.binding.Bindings; +import javafx.beans.binding.ObjectBinding; +import javafx.beans.value.ObservableObjectValue; public final class DownloadProviders { private DownloadProviders() {} - public static final List DOWNLOAD_PROVIDERS = Lang.immutableListOf(new MojangDownloadProvider(), BMCLAPIDownloadProvider.INSTANCE, CurseCDNDownloadProvider.INSTANCE); + public static final Map providersById = mapOf( + pair("mojang", new MojangDownloadProvider()), + pair("bmclapi", new BMCLAPIDownloadProvider())); - public static DownloadProvider getDownloadProvider(int index) { - return Lang.get(DOWNLOAD_PROVIDERS, index).orElse(DOWNLOAD_PROVIDERS.get(0)); + public static final String DEFAULT_PROVIDER_ID = "bmclapi"; + + private static ObjectBinding downloadProviderProperty; + + static void init() { + downloadProviderProperty = Bindings.createObjectBinding( + () -> Optional.ofNullable(providersById.get(config().getDownloadType())) + .orElse(providersById.get(DEFAULT_PROVIDER_ID)), + config().downloadTypeProperty()); + } + + public static DownloadProvider getDownloadProvider() { + return downloadProviderProperty.get(); + } + + public static ObservableObjectValue downloadProviderProperty() { + return downloadProviderProperty; } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java index de989f716..adab394f7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Profile.java @@ -162,7 +162,7 @@ public final class Profile implements Observable { } public DefaultDependencyManager getDependency() { - return new DefaultDependencyManager(repository, Settings.instance().getDownloadProvider(), HMCLCacheRepository.REPOSITORY); + return new DefaultDependencyManager(repository, DownloadProviders.getDownloadProvider(), HMCLCacheRepository.REPOSITORY); } public VersionSetting getVersionSetting(String id) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java index a262a8e38..20c274cad 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java @@ -19,7 +19,6 @@ package org.jackhuang.hmcl.setting; import javafx.scene.text.Font; import org.jackhuang.hmcl.Launcher; -import org.jackhuang.hmcl.download.DownloadProvider; import org.jackhuang.hmcl.game.HMCLCacheRepository; import org.jackhuang.hmcl.util.CacheRepository; @@ -44,6 +43,7 @@ public class Settings { } private Settings() { + DownloadProviders.init(); ProxyManager.init(); Accounts.init(); Profiles.init(); @@ -83,19 +83,4 @@ public class Settings { return null; } } - - /**************************************** - * DOWNLOAD PROVIDERS * - ****************************************/ - - public DownloadProvider getDownloadProvider() { - return DownloadProviders.getDownloadProvider(config().getDownloadType()); - } - - public void setDownloadProvider(DownloadProvider downloadProvider) { - int index = DownloadProviders.DOWNLOAD_PROVIDERS.indexOf(downloadProvider); - if (index == -1) - throw new IllegalArgumentException("Unknown download provider: " + downloadProvider); - config().setDownloadType(index); - } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java index d60c0ff7c..363774178 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java @@ -60,10 +60,13 @@ public final class SettingsPage extends SettingsView implements DecoratorPage { public SettingsPage() { FXUtils.smoothScrolling(scroll); - chkEnableGameList.selectedProperty().bindBidirectional(config().enableMainPageGameListProperty()); + // ==== Download sources ==== + cboDownloadSource.getItems().setAll(DownloadProviders.providersById.keySet()); + cboDownloadSource.getSelectionModel().select(config().getDownloadType()); + cboDownloadSource.getSelectionModel().selectedItemProperty().addListener((a, b, newValue) -> config().setDownloadType(newValue)); + // ==== - cboDownloadSource.getSelectionModel().select(DownloadProviders.DOWNLOAD_PROVIDERS.indexOf(Settings.instance().getDownloadProvider())); - cboDownloadSource.getSelectionModel().selectedIndexProperty().addListener((a, b, newValue) -> Settings.instance().setDownloadProvider(DownloadProviders.getDownloadProvider(newValue.intValue()))); + chkEnableGameList.selectedProperty().bindBidirectional(config().enableMainPageGameListProperty()); cboFont.initValue(Settings.instance().getFont()); cboFont.valueProperty().addListener((a, b, newValue) -> { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsView.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsView.java index 4ef9ea2ef..05bcf58bb 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsView.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsView.java @@ -26,6 +26,11 @@ import javafx.scene.control.ScrollPane; import javafx.scene.layout.*; import javafx.scene.text.Text; import javafx.scene.text.TextAlignment; + +import static org.jackhuang.hmcl.ui.FXUtils.stringConverter; + +import java.util.function.Function; + import org.jackhuang.hmcl.setting.EnumBackgroundImage; import org.jackhuang.hmcl.setting.EnumCommonDirectory; import org.jackhuang.hmcl.setting.Theme; @@ -39,7 +44,7 @@ public abstract class SettingsView extends StackPane { protected final JFXPasswordField txtProxyPassword; protected final JFXTextField txtFontSize; protected final JFXComboBox