From 53a8446f4a15dcf60ce782cb177a5912703c01c3 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Fri, 23 Feb 2018 09:54:57 +0800 Subject: [PATCH] Curse CDN download provider --- .../hmcl/setting/DownloadProviders.java | 5 +-- .../org/jackhuang/hmcl/setting/Settings.java | 27 +++++++--------- .../org/jackhuang/hmcl/ui/SettingsPage.java | 2 +- .../download/CurseCDNDownloadProvider.java | 31 +++++++++++++++++++ .../hmcl/download/MojangDownloadProvider.java | 20 ++++++++---- 5 files changed, 61 insertions(+), 24 deletions(-) create mode 100644 HMCLCore/src/main/java/org/jackhuang/hmcl/download/CurseCDNDownloadProvider.java 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 d716827ca..fe69bba78 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java @@ -18,6 +18,7 @@ package org.jackhuang.hmcl.setting; 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; @@ -28,9 +29,9 @@ import java.util.List; public final class DownloadProviders { private DownloadProviders() {} - public static final List DOWNLOAD_PROVIDERS = Lang.immutableListOf(MojangDownloadProvider.INSTANCE, BMCLAPIDownloadProvider.INSTANCE); + public static final List DOWNLOAD_PROVIDERS = Lang.immutableListOf(new MojangDownloadProvider(Settings.INSTANCE.getLocale() == Locales.ZH_CN), BMCLAPIDownloadProvider.INSTANCE, CurseCDNDownloadProvider.INSTANCE); public static DownloadProvider getDownloadProvider(int index) { - return Lang.get(DOWNLOAD_PROVIDERS, index).orElse(MojangDownloadProvider.INSTANCE); + return Lang.get(DOWNLOAD_PROVIDERS, index).orElse(DOWNLOAD_PROVIDERS.get(0)); } } 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 f68c8cc6e..fa834ff1c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java @@ -27,9 +27,7 @@ import org.jackhuang.hmcl.Main; import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.AccountFactory; import org.jackhuang.hmcl.auth.authlibinjector.AuthlibInjectorAccount; -import org.jackhuang.hmcl.download.BMCLAPIDownloadProvider; import org.jackhuang.hmcl.download.DownloadProvider; -import org.jackhuang.hmcl.download.MojangDownloadProvider; import org.jackhuang.hmcl.event.EventBus; import org.jackhuang.hmcl.event.ProfileChangedEvent; import org.jackhuang.hmcl.event.ProfileLoadingEvent; @@ -272,6 +270,10 @@ public class Settings { SETTINGS.setLogLines(logLines); } + /**************************************** + * AUTHLIB INJECTORS * + ****************************************/ + public Set getAuthlibInjectorServerURLs() { return SETTINGS.getAuthlibInjectorServerURLs(); } @@ -307,24 +309,19 @@ public class Settings { } } + /**************************************** + * DOWNLOAD PROVIDERS * + ****************************************/ + public DownloadProvider getDownloadProvider() { - switch (SETTINGS.getDownloadType()) { - case 0: - return MojangDownloadProvider.INSTANCE; - case 1: - return BMCLAPIDownloadProvider.INSTANCE; - default: - return MojangDownloadProvider.INSTANCE; - } + return DownloadProviders.getDownloadProvider(SETTINGS.getDownloadType()); } public void setDownloadProvider(DownloadProvider downloadProvider) { - if (downloadProvider == MojangDownloadProvider.INSTANCE) - SETTINGS.setDownloadType(0); - else if (downloadProvider == BMCLAPIDownloadProvider.INSTANCE) - SETTINGS.setDownloadType(1); - else + int index = DownloadProviders.DOWNLOAD_PROVIDERS.indexOf(downloadProvider); + if (index == -1) throw new IllegalArgumentException("Unknown download provider: " + downloadProvider); + SETTINGS.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 364e56644..2cb99cf2c 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/SettingsPage.java @@ -218,7 +218,7 @@ public final class SettingsPage extends StackPane implements DecoratorPage { themeItem.getGroup().getToggles().stream().filter(it -> Settings.INSTANCE.getTheme() == it.getUserData() || Settings.INSTANCE.getTheme().isCustom() && themeItem.isCustomToggle(it)).findFirst().ifPresent(it -> it.setSelected(true)); Settings.INSTANCE.themeProperty().setChangedListenerAndOperate(it -> { - if (it.getName().startsWith("#") || it.getName().startsWith("0x")) + if (it.isCustom()) themeItem.setSubtitle(it.getName()); else themeItem.setSubtitle(Main.i18n("color." + it.getName().toLowerCase())); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/CurseCDNDownloadProvider.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/CurseCDNDownloadProvider.java new file mode 100644 index 000000000..d4f4b92fe --- /dev/null +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/CurseCDNDownloadProvider.java @@ -0,0 +1,31 @@ +/* + * Hello Minecraft! Launcher. + * Copyright (C) 2018 huangyuhui + * + * 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(); + + protected CurseCDNDownloadProvider() { + super(false); + } + + @Override + public String injectURL(String baseURL) { + return baseURL == null ? null : baseURL.replace("http://files.minecraftforge.net/maven", "http://ftb.cursecdn.com/FTB2/maven"); + } +} diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java index bd9252b44..6640d9dd0 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/MojangDownloadProvider.java @@ -26,11 +26,12 @@ import org.jackhuang.hmcl.download.optifine.OptiFineVersionList; * @see http://wiki,vg * @author huangyuhui */ -public final class MojangDownloadProvider implements DownloadProvider { +public class MojangDownloadProvider implements DownloadProvider { - public static final MojangDownloadProvider INSTANCE = new MojangDownloadProvider(); + private boolean isChina; - private MojangDownloadProvider() { + public MojangDownloadProvider(boolean isChina) { + this.isChina = isChina; } @Override @@ -76,9 +77,16 @@ public final class MojangDownloadProvider implements DownloadProvider { @Override public String injectURL(String baseURL) { - if (baseURL.contains("net/minecraftforge/forge")) - return baseURL; + if (baseURL == null) + return null; + else if (baseURL.contains("scala-swing") || baseURL.contains("scala-xml") || baseURL.contains("scala-parser-combinators")) + return baseURL.replace("http://files.minecraftforge.net/maven", "http://ftb.cursecdn.com/FTB2/maven/"); + else if (baseURL.contains("typesafe") || baseURL.contains("scala")) + if (isChina) + return baseURL.replace("http://files.minecraftforge.net/maven", "http://maven.aliyun.com/nexus/content/groups/public"); + else + return baseURL.replace("http://files.minecraftforge.net/maven", "http://repo1.maven.org/maven2"); else - return baseURL.replace("http://files.minecraftforge.net/maven", "http://ftb.cursecdn.com/FTB2/maven"); + return baseURL; } }