Refactor: improved language support in card images sources;

This commit is contained in:
Oleg Agafonov 2018-12-18 17:50:19 +04:00
parent bd644c273f
commit 70012af6db
6 changed files with 125 additions and 35 deletions

View file

@ -1,10 +1,11 @@
package org.mage.plugins.card.dl.sources;
import java.util.ArrayList;
import mage.client.util.CardLanguage;
import org.mage.plugins.card.images.CardDownloadData;
import java.util.ArrayList;
/**
*
* @author North
*/
public interface CardImageSource {
@ -31,10 +32,21 @@ public interface CardImageSource {
return false;
}
default boolean isLanguagesSupport() {
return false;
}
default void setCurrentLanguage(CardLanguage cardLanguage) {
}
default CardLanguage getCurrentLanguage() {
return CardLanguage.ENGLISH;
}
void doPause(String httpImageUrl);
default ArrayList<String> getSupportedSets() {
return null;
return new ArrayList<>();
}
default boolean isSetSupportedComplete(String setCode) {

View file

@ -13,23 +13,23 @@ public enum ScryfallImageSource implements CardImageSource {
instance;
private final Set<String> supportedSets;
private final Map<String, String> languageAliases;
private final Map<CardLanguage, String> languageAliases;
private CardLanguage currentLanguage = CardLanguage.ENGLISH; // working language
ScryfallImageSource() {
// https://scryfall.com/docs/api/languages
languageAliases = new HashMap<>();
languageAliases.put(CardLanguage.ENGLISH.getCode(), "en");
languageAliases.put(CardLanguage.SPANISH.getCode(), "es");
languageAliases.put(CardLanguage.FRENCH.getCode(), "fr");
languageAliases.put(CardLanguage.GERMAN.getCode(), "de");
languageAliases.put(CardLanguage.ITALIAN.getCode(), "it");
languageAliases.put(CardLanguage.PORTUGUESE.getCode(), "pt");
languageAliases.put(CardLanguage.JAPANESE.getCode(), "ja");
languageAliases.put(CardLanguage.KOREAN.getCode(), "ko");
languageAliases.put(CardLanguage.RUSSIAN.getCode(), "ru");
languageAliases.put(CardLanguage.CHINES_SIMPLE.getCode(), "zhs");
languageAliases.put(CardLanguage.CHINES_TRADITION.getCode(), "zht");
languageAliases.put(CardLanguage.ENGLISH, "en");
languageAliases.put(CardLanguage.SPANISH, "es");
languageAliases.put(CardLanguage.FRENCH, "fr");
languageAliases.put(CardLanguage.GERMAN, "de");
languageAliases.put(CardLanguage.ITALIAN, "it");
languageAliases.put(CardLanguage.PORTUGUESE, "pt");
languageAliases.put(CardLanguage.JAPANESE, "ja");
languageAliases.put(CardLanguage.KOREAN, "ko");
languageAliases.put(CardLanguage.RUSSIAN, "ru");
languageAliases.put(CardLanguage.CHINES_SIMPLE, "zhs");
languageAliases.put(CardLanguage.CHINES_TRADITION, "zht");
supportedSets = new LinkedHashSet<>();
// supportedSets.add("PTC"); //
@ -249,7 +249,7 @@ public enum ScryfallImageSource implements CardImageSource {
String preferredCode = this.getCurrentLanguage().getCode();
String defaultCode = CardLanguage.ENGLISH.getCode();
String localizedCode = languageAliases.getOrDefault(preferredCode, defaultCode);
String localizedCode = languageAliases.getOrDefault(this.getCurrentLanguage(), defaultCode);
// loc example: https://api.scryfall.com/cards/xln/121/ru?format=image
// WARNING, some cards haven't direct images and uses random GUID:

View file

@ -28,7 +28,7 @@ public enum WizardCardsImageSource implements CardImageSource {
private static final Logger logger = Logger.getLogger(WizardCardsImageSource.class);
private final Map<String, String> setsAliases;
private final Map<String, String> languageAliases;
private final Map<CardLanguage, String> languageAliases;
private final Map<String, Map<String, String>> sets;
private final Set<String> supportedSets;
private CardLanguage currentLanguage = CardLanguage.ENGLISH; // working language
@ -41,17 +41,17 @@ public enum WizardCardsImageSource implements CardImageSource {
WizardCardsImageSource() {
languageAliases = new HashMap<>();
languageAliases.put(CardLanguage.ENGLISH.getCode(), "English");
languageAliases.put(CardLanguage.SPANISH.getCode(), "Spanish");
languageAliases.put(CardLanguage.FRENCH.getCode(), "French");
languageAliases.put(CardLanguage.GERMAN.getCode(), "German");
languageAliases.put(CardLanguage.ITALIAN.getCode(), "Italian");
languageAliases.put(CardLanguage.PORTUGUESE.getCode(), "Portuguese (Brazil)");
languageAliases.put(CardLanguage.JAPANESE.getCode(), "Japanese");
languageAliases.put(CardLanguage.KOREAN.getCode(), "Korean");
languageAliases.put(CardLanguage.RUSSIAN.getCode(), "Russian");
languageAliases.put(CardLanguage.CHINES_SIMPLE.getCode(), "Chinese Simplified");
languageAliases.put(CardLanguage.CHINES_TRADITION.getCode(), "Chinese Traditional ");
languageAliases.put(CardLanguage.ENGLISH, "English");
languageAliases.put(CardLanguage.SPANISH, "Spanish");
languageAliases.put(CardLanguage.FRENCH, "French");
languageAliases.put(CardLanguage.GERMAN, "German");
languageAliases.put(CardLanguage.ITALIAN, "Italian");
languageAliases.put(CardLanguage.PORTUGUESE, "Portuguese (Brazil)");
languageAliases.put(CardLanguage.JAPANESE, "Japanese");
languageAliases.put(CardLanguage.KOREAN, "Korean");
languageAliases.put(CardLanguage.RUSSIAN, "Russian");
languageAliases.put(CardLanguage.CHINES_SIMPLE, "Chinese Simplified");
languageAliases.put(CardLanguage.CHINES_TRADITION, "Chinese Traditional ");
supportedSets = new LinkedHashSet<>();
// supportedSets.add("PTC"); // Prerelease Events
@ -552,7 +552,7 @@ public enum WizardCardsImageSource implements CardImageSource {
cardName = cardName.substring(0, pos1);
}
}
Integer preferredMultiverseId = getLocalizedMultiverseId(getCurrentLanguage().getCode(), multiverseId);
Integer preferredMultiverseId = getLocalizedMultiverseId(getCurrentLanguage(), multiverseId);
setLinks.put(cardName.toLowerCase(Locale.ENGLISH) + numberChar, generateLink(preferredMultiverseId));
}
}
@ -614,8 +614,8 @@ public enum WizardCardsImageSource implements CardImageSource {
return "/Handlers/Image.ashx?multiverseid=" + landMultiverseId + "&type=card";
}
private int getLocalizedMultiverseId(String preferredLanguage, Integer multiverseId) throws IOException {
if (preferredLanguage.equals(CardLanguage.ENGLISH.getCode())) {
private int getLocalizedMultiverseId(CardLanguage preferredLanguage, Integer multiverseId) throws IOException {
if (preferredLanguage.equals(CardLanguage.ENGLISH)) {
return multiverseId;
}