Change type of downloadType to string
This commit is contained in:
@@ -59,7 +59,7 @@ public final class Accounts {
|
|||||||
public static final OfflineAccountFactory FACTORY_OFFLINE = OfflineAccountFactory.INSTANCE;
|
public static final OfflineAccountFactory FACTORY_OFFLINE = OfflineAccountFactory.INSTANCE;
|
||||||
public static final YggdrasilAccountFactory FACTORY_YGGDRASIL = new YggdrasilAccountFactory(MojangYggdrasilProvider.INSTANCE);
|
public static final YggdrasilAccountFactory FACTORY_YGGDRASIL = new YggdrasilAccountFactory(MojangYggdrasilProvider.INSTANCE);
|
||||||
public static final AuthlibInjectorAccountFactory FACTORY_AUTHLIB_INJECTOR = new AuthlibInjectorAccountFactory(
|
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);
|
Accounts::getOrCreateAuthlibInjectorServer);
|
||||||
|
|
||||||
private static final String TYPE_OFFLINE = "offline";
|
private static final String TYPE_OFFLINE = "offline";
|
||||||
|
|||||||
@@ -115,8 +115,8 @@ public final class Config implements Cloneable, Observable {
|
|||||||
@SerializedName("localization")
|
@SerializedName("localization")
|
||||||
private ObjectProperty<SupportedLocale> localization = new SimpleObjectProperty<>(Locales.DEFAULT);
|
private ObjectProperty<SupportedLocale> localization = new SimpleObjectProperty<>(Locales.DEFAULT);
|
||||||
|
|
||||||
@SerializedName("downloadtype")
|
@SerializedName("downloadType")
|
||||||
private IntegerProperty downloadType = new SimpleIntegerProperty(1);
|
private StringProperty downloadType = new SimpleStringProperty("bmclapi");
|
||||||
|
|
||||||
@SerializedName("configurations")
|
@SerializedName("configurations")
|
||||||
private ObservableMap<String, Profile> configurations = FXCollections.observableMap(new TreeMap<>());
|
private ObservableMap<String, Profile> configurations = FXCollections.observableMap(new TreeMap<>());
|
||||||
@@ -359,15 +359,15 @@ public final class Config implements Cloneable, Observable {
|
|||||||
return localization;
|
return localization;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDownloadType() {
|
public String getDownloadType() {
|
||||||
return downloadType.get();
|
return downloadType.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDownloadType(int downloadType) {
|
public void setDownloadType(String downloadType) {
|
||||||
this.downloadType.set(downloadType);
|
this.downloadType.set(downloadType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IntegerProperty downloadTypeProperty() {
|
public StringProperty downloadTypeProperty() {
|
||||||
return downloadType;
|
return downloadType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -86,5 +86,17 @@ final class ConfigUpgrader {
|
|||||||
deserialized.setHasProxy(StringUtils.isNotBlank(deserialized.getProxyHost()));
|
deserialized.setHasProxy(StringUtils.isNotBlank(deserialized.getProxyHost()));
|
||||||
if (!rawJson.containsKey("hasProxyAuth"))
|
if (!rawJson.containsKey("hasProxyAuth"))
|
||||||
deserialized.setHasProxyAuth(StringUtils.isNotBlank(deserialized.getProxyUser()));
|
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");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,20 +17,44 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hmcl.setting;
|
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.BMCLAPIDownloadProvider;
|
||||||
import org.jackhuang.hmcl.download.CurseCDNDownloadProvider;
|
|
||||||
import org.jackhuang.hmcl.download.DownloadProvider;
|
import org.jackhuang.hmcl.download.DownloadProvider;
|
||||||
import org.jackhuang.hmcl.download.MojangDownloadProvider;
|
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 {
|
public final class DownloadProviders {
|
||||||
private DownloadProviders() {}
|
private DownloadProviders() {}
|
||||||
|
|
||||||
public static final List<DownloadProvider> DOWNLOAD_PROVIDERS = Lang.immutableListOf(new MojangDownloadProvider(), BMCLAPIDownloadProvider.INSTANCE, CurseCDNDownloadProvider.INSTANCE);
|
public static final Map<String, DownloadProvider> providersById = mapOf(
|
||||||
|
pair("mojang", new MojangDownloadProvider()),
|
||||||
|
pair("bmclapi", new BMCLAPIDownloadProvider()));
|
||||||
|
|
||||||
public static DownloadProvider getDownloadProvider(int index) {
|
public static final String DEFAULT_PROVIDER_ID = "bmclapi";
|
||||||
return Lang.get(DOWNLOAD_PROVIDERS, index).orElse(DOWNLOAD_PROVIDERS.get(0));
|
|
||||||
|
private static ObjectBinding<DownloadProvider> 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<DownloadProvider> downloadProviderProperty() {
|
||||||
|
return downloadProviderProperty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ public final class Profile implements Observable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public DefaultDependencyManager getDependency() {
|
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) {
|
public VersionSetting getVersionSetting(String id) {
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ package org.jackhuang.hmcl.setting;
|
|||||||
|
|
||||||
import javafx.scene.text.Font;
|
import javafx.scene.text.Font;
|
||||||
import org.jackhuang.hmcl.Launcher;
|
import org.jackhuang.hmcl.Launcher;
|
||||||
import org.jackhuang.hmcl.download.DownloadProvider;
|
|
||||||
import org.jackhuang.hmcl.game.HMCLCacheRepository;
|
import org.jackhuang.hmcl.game.HMCLCacheRepository;
|
||||||
import org.jackhuang.hmcl.util.CacheRepository;
|
import org.jackhuang.hmcl.util.CacheRepository;
|
||||||
|
|
||||||
@@ -44,6 +43,7 @@ public class Settings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Settings() {
|
private Settings() {
|
||||||
|
DownloadProviders.init();
|
||||||
ProxyManager.init();
|
ProxyManager.init();
|
||||||
Accounts.init();
|
Accounts.init();
|
||||||
Profiles.init();
|
Profiles.init();
|
||||||
@@ -83,19 +83,4 @@ public class Settings {
|
|||||||
return null;
|
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,10 +60,13 @@ public final class SettingsPage extends SettingsView implements DecoratorPage {
|
|||||||
public SettingsPage() {
|
public SettingsPage() {
|
||||||
FXUtils.smoothScrolling(scroll);
|
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()));
|
chkEnableGameList.selectedProperty().bindBidirectional(config().enableMainPageGameListProperty());
|
||||||
cboDownloadSource.getSelectionModel().selectedIndexProperty().addListener((a, b, newValue) -> Settings.instance().setDownloadProvider(DownloadProviders.getDownloadProvider(newValue.intValue())));
|
|
||||||
|
|
||||||
cboFont.initValue(Settings.instance().getFont());
|
cboFont.initValue(Settings.instance().getFont());
|
||||||
cboFont.valueProperty().addListener((a, b, newValue) -> {
|
cboFont.valueProperty().addListener((a, b, newValue) -> {
|
||||||
|
|||||||
@@ -26,6 +26,11 @@ import javafx.scene.control.ScrollPane;
|
|||||||
import javafx.scene.layout.*;
|
import javafx.scene.layout.*;
|
||||||
import javafx.scene.text.Text;
|
import javafx.scene.text.Text;
|
||||||
import javafx.scene.text.TextAlignment;
|
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.EnumBackgroundImage;
|
||||||
import org.jackhuang.hmcl.setting.EnumCommonDirectory;
|
import org.jackhuang.hmcl.setting.EnumCommonDirectory;
|
||||||
import org.jackhuang.hmcl.setting.Theme;
|
import org.jackhuang.hmcl.setting.Theme;
|
||||||
@@ -39,7 +44,7 @@ public abstract class SettingsView extends StackPane {
|
|||||||
protected final JFXPasswordField txtProxyPassword;
|
protected final JFXPasswordField txtProxyPassword;
|
||||||
protected final JFXTextField txtFontSize;
|
protected final JFXTextField txtFontSize;
|
||||||
protected final JFXComboBox<Label> cboLanguage;
|
protected final JFXComboBox<Label> cboLanguage;
|
||||||
protected final JFXComboBox<Label> cboDownloadSource;
|
protected final JFXComboBox<String> cboDownloadSource;
|
||||||
protected final FontComboBox cboFont;
|
protected final FontComboBox cboFont;
|
||||||
protected final MultiFileItem<EnumCommonDirectory> fileCommonLocation;
|
protected final MultiFileItem<EnumCommonDirectory> fileCommonLocation;
|
||||||
protected final Label lblDisplay;
|
protected final Label lblDisplay;
|
||||||
@@ -162,11 +167,9 @@ public abstract class SettingsView extends StackPane {
|
|||||||
|
|
||||||
{
|
{
|
||||||
cboDownloadSource = new JFXComboBox<>();
|
cboDownloadSource = new JFXComboBox<>();
|
||||||
FXUtils.setLimitWidth(cboDownloadSource, 400);
|
Function<String, String> nameConverter = key -> I18n.i18n("download.provider." + key);
|
||||||
cboDownloadSource.getItems().setAll(
|
cboDownloadSource.setCellFactory(FXUtils.jfxListCellFactory(nameConverter.andThen(Label::new)));
|
||||||
new Label(I18n.i18n("download.mojang")),
|
cboDownloadSource.setConverter(stringConverter(nameConverter));
|
||||||
new Label(I18n.i18n("download.BMCL"))
|
|
||||||
);
|
|
||||||
downloadSourcePane.setRight(cboDownloadSource);
|
downloadSourcePane.setRight(cboDownloadSource);
|
||||||
}
|
}
|
||||||
settingsPane.getContent().add(downloadSourcePane);
|
settingsPane.getContent().add(downloadSourcePane);
|
||||||
|
|||||||
@@ -83,11 +83,11 @@ crash.NoClassDefFound=Please check "HMCL" software is complete.
|
|||||||
crash.user_fault=Your OS or Java environment may not be properly installed resulting in crashing of this software, please check your Java Environment or your computer!
|
crash.user_fault=Your OS or Java environment may not be properly installed resulting in crashing of this software, please check your Java Environment or your computer!
|
||||||
|
|
||||||
download=Download
|
download=Download
|
||||||
download.BMCL=BMCLAPI (bangbang93, https://bmclapi2.bangbang93.com/)
|
|
||||||
download.failed=Failed to download
|
download.failed=Failed to download
|
||||||
download.failed.empty=No candidates. Click here to return.
|
download.failed.empty=No candidates. Click here to return.
|
||||||
download.failed.refresh=Unable to load version list. Click here to retry.
|
download.failed.refresh=Unable to load version list. Click here to retry.
|
||||||
download.mojang=Mojang
|
download.provider.bmclapi=BMCLAPI (bangbang93, https://bmclapi2.bangbang93.com/)
|
||||||
|
download.provider.mojang=Mojang
|
||||||
|
|
||||||
extension.bat=Windows Bat file
|
extension.bat=Windows Bat file
|
||||||
extension.mod=Mod file
|
extension.mod=Mod file
|
||||||
|
|||||||
@@ -83,11 +83,11 @@ crash.NoClassDefFound=請確認 HMCL 本體是否完整,或更新您的 Java
|
|||||||
crash.user_fault=您的系統或 Java 環境可能安裝不當導致本軟體崩潰,請檢查您的 Java 環境或您的電腦!可以嘗試重新安裝 Java。
|
crash.user_fault=您的系統或 Java 環境可能安裝不當導致本軟體崩潰,請檢查您的 Java 環境或您的電腦!可以嘗試重新安裝 Java。
|
||||||
|
|
||||||
download=下載
|
download=下載
|
||||||
download.BMCL=BMCLAPI(bangbang93,https://bmclapi2.bangbang93.com/)
|
|
||||||
download.failed=下載失敗
|
download.failed=下載失敗
|
||||||
download.failed.empty=沒有可供安裝的版本,點擊此處返回。
|
download.failed.empty=沒有可供安裝的版本,點擊此處返回。
|
||||||
download.failed.refresh=載入版本列表失敗,點擊此處重試。
|
download.failed.refresh=載入版本列表失敗,點擊此處重試。
|
||||||
download.mojang=官方伺服器(Mojang)
|
download.provider.bmclapi=BMCLAPI(bangbang93,https://bmclapi2.bangbang93.com/)
|
||||||
|
download.provider.mojang=官方伺服器(Mojang)
|
||||||
|
|
||||||
extension.bat=Windows 腳本
|
extension.bat=Windows 腳本
|
||||||
extension.mod=模組檔案
|
extension.mod=模組檔案
|
||||||
|
|||||||
@@ -83,11 +83,11 @@ crash.NoClassDefFound=请确认 HMCL 本体是否完整,或更新您的 Java
|
|||||||
crash.user_fault=您的系统或 Java 环境可能安装不当导致本软件崩溃,请检查您的 Java 环境或您的电脑!可以尝试重新安装 Java。
|
crash.user_fault=您的系统或 Java 环境可能安装不当导致本软件崩溃,请检查您的 Java 环境或您的电脑!可以尝试重新安装 Java。
|
||||||
|
|
||||||
download=下载
|
download=下载
|
||||||
download.BMCL=BMCLAPI(bangbang93,https://bmclapi2.bangbang93.com/)
|
|
||||||
download.failed=下载失败
|
download.failed=下载失败
|
||||||
download.failed.empty=没有可供安装的版本,点击此处返回。
|
download.failed.empty=没有可供安装的版本,点击此处返回。
|
||||||
download.failed.refresh=加载版本列表失败,点击此处重试。
|
download.failed.refresh=加载版本列表失败,点击此处重试。
|
||||||
download.mojang=官方(Mojang)
|
download.provider.bmclapi=BMCLAPI(bangbang93,https://bmclapi2.bangbang93.com/)
|
||||||
|
download.provider.mojang=官方(Mojang)
|
||||||
|
|
||||||
extension.bat=Windows 脚本
|
extension.bat=Windows 脚本
|
||||||
extension.mod=模组文件
|
extension.mod=模组文件
|
||||||
|
|||||||
@@ -28,11 +28,6 @@ import org.jackhuang.hmcl.download.optifine.OptiFineBMCLVersionList;
|
|||||||
*/
|
*/
|
||||||
public class BMCLAPIDownloadProvider implements DownloadProvider {
|
public class BMCLAPIDownloadProvider implements DownloadProvider {
|
||||||
|
|
||||||
public static final BMCLAPIDownloadProvider INSTANCE = new BMCLAPIDownloadProvider();
|
|
||||||
|
|
||||||
private BMCLAPIDownloadProvider() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getVersionListURL() {
|
public String getVersionListURL() {
|
||||||
return "https://bmclapi2.bangbang93.com/mc/game/version_manifest.json";
|
return "https://bmclapi2.bangbang93.com/mc/game/version_manifest.json";
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft! Launcher.
|
|
||||||
* Copyright (C) 2018 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* 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 {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hmcl.download;
|
|
||||||
|
|
||||||
public class CurseCDNDownloadProvider extends MojangDownloadProvider {
|
|
||||||
public static final CurseCDNDownloadProvider INSTANCE = new CurseCDNDownloadProvider();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String injectURL(String baseURL) {
|
|
||||||
return baseURL == null ? null : baseURL.replaceFirst("https?://files\\.minecraftforge\\.net/maven", "https://ftb.cursecdn.com/FTB2/maven");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -23,7 +23,7 @@ import org.jackhuang.hmcl.download.liteloader.LiteLoaderVersionList;
|
|||||||
import org.jackhuang.hmcl.download.optifine.OptiFineBMCLVersionList;
|
import org.jackhuang.hmcl.download.optifine.OptiFineBMCLVersionList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see <a href="http://wiki.vg">http://wiki,vg</a>
|
* @see <a href="http://wiki.vg">http://wiki.vg</a>
|
||||||
* @author huangyuhui
|
* @author huangyuhui
|
||||||
*/
|
*/
|
||||||
public class MojangDownloadProvider implements DownloadProvider {
|
public class MojangDownloadProvider implements DownloadProvider {
|
||||||
@@ -56,6 +56,6 @@ public class MojangDownloadProvider implements DownloadProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String injectURL(String baseURL) {
|
public String injectURL(String baseURL) {
|
||||||
return baseURL;
|
return baseURL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user