mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
Feature: Set card editions as favorite (for deck importing purposes)
This commit is contained in:
parent
4ad97ef48c
commit
535ef2eb6e
6 changed files with 92 additions and 2 deletions
|
|
@ -568,6 +568,8 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
||||||
|
|
||||||
void duplicateCards(Collection<CardView> cards);
|
void duplicateCards(Collection<CardView> cards);
|
||||||
|
|
||||||
|
void markCardsAsFavorite(Collection<CardView> cards);
|
||||||
|
|
||||||
void invertCardSelection(Collection<CardView> cards);
|
void invertCardSelection(Collection<CardView> cards);
|
||||||
|
|
||||||
void showAll();
|
void showAll();
|
||||||
|
|
@ -1181,6 +1183,13 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void markAsFavorite() {
|
||||||
|
Collection<CardView> toFave = dragCardList();
|
||||||
|
for (DragCardGridListener l : listeners) {
|
||||||
|
l.markCardsAsFavorite(toFave);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void invertSelection() {
|
private void invertSelection() {
|
||||||
Collection<CardView> toInvert = allCards;
|
Collection<CardView> toInvert = allCards;
|
||||||
for (DragCardGridListener l : listeners) {
|
for (DragCardGridListener l : listeners) {
|
||||||
|
|
@ -1980,6 +1989,10 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
||||||
JMenuItem duplicateSelection = new JMenuItem("Duplicate selected cards");
|
JMenuItem duplicateSelection = new JMenuItem("Duplicate selected cards");
|
||||||
duplicateSelection.addActionListener(e2 -> duplicateSelection());
|
duplicateSelection.addActionListener(e2 -> duplicateSelection());
|
||||||
menu.add(duplicateSelection);
|
menu.add(duplicateSelection);
|
||||||
|
|
||||||
|
JMenuItem markAsFavorite = new JMenuItem("Mark selected card editions as favorite");
|
||||||
|
markAsFavorite.addActionListener(e2 -> markAsFavorite());
|
||||||
|
menu.add(markAsFavorite);
|
||||||
}
|
}
|
||||||
menu.show(e.getComponent(), e.getX(), e.getY());
|
menu.show(e.getComponent(), e.getX(), e.getY());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import mage.client.util.ClientEventType;
|
||||||
import mage.client.util.Event;
|
import mage.client.util.Event;
|
||||||
import mage.client.util.GUISizeHelper;
|
import mage.client.util.GUISizeHelper;
|
||||||
import mage.client.util.Listener;
|
import mage.client.util.Listener;
|
||||||
|
import mage.client.preference.MagePreferences;
|
||||||
import mage.view.CardView;
|
import mage.view.CardView;
|
||||||
import mage.view.CardsView;
|
import mage.view.CardsView;
|
||||||
|
|
||||||
|
|
@ -113,6 +114,17 @@ public class DeckArea extends javax.swing.JPanel {
|
||||||
deckList.addCardView(newCard, card);
|
deckList.addCardView(newCard, card);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void markCardsAsFavorite(Collection<CardView> cards) {
|
||||||
|
deckList.deselectAll();
|
||||||
|
for (CardView card : cards) {
|
||||||
|
String name = card.getName();
|
||||||
|
String setCode = card.getExpansionSetCode();
|
||||||
|
String cardNumber = card.getCardNumber();
|
||||||
|
MagePreferences.setFavoriteCard(name, cardNumber, setCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void invertCardSelection(Collection<CardView> cards) {
|
public void invertCardSelection(Collection<CardView> cards) {
|
||||||
|
|
@ -154,6 +166,17 @@ public class DeckArea extends javax.swing.JPanel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void markCardsAsFavorite(Collection<CardView> cards) {
|
||||||
|
deckList.deselectAll();
|
||||||
|
for (CardView card : cards) {
|
||||||
|
String name = card.getName();
|
||||||
|
String setCode = card.getExpansionSetCode();
|
||||||
|
String cardNumber = card.getCardNumber();
|
||||||
|
MagePreferences.setFavoriteCard(name, cardNumber, setCode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void invertCardSelection(Collection<CardView> cards) {
|
public void invertCardSelection(Collection<CardView> cards) {
|
||||||
// Invert Selection
|
// Invert Selection
|
||||||
|
|
|
||||||
|
|
@ -759,6 +759,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
MageFrame.getDesktop().setCursor(new Cursor(Cursor.WAIT_CURSOR));
|
MageFrame.getDesktop().setCursor(new Cursor(Cursor.WAIT_CURSOR));
|
||||||
try {
|
try {
|
||||||
DeckImporter importer = DeckImporter.getDeckImporter(file.getPath());
|
DeckImporter importer = DeckImporter.getDeckImporter(file.getPath());
|
||||||
|
importer.setPreferences(MageFrame.getPreferences());
|
||||||
|
|
||||||
if (importer != null) {
|
if (importer != null) {
|
||||||
StringBuilder errorMessages = new StringBuilder();
|
StringBuilder errorMessages = new StringBuilder();
|
||||||
|
|
@ -822,7 +823,13 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
StringBuilder errorMessages = new StringBuilder();
|
StringBuilder errorMessages = new StringBuilder();
|
||||||
MageFrame.getDesktop().setCursor(new Cursor(Cursor.WAIT_CURSOR));
|
MageFrame.getDesktop().setCursor(new Cursor(Cursor.WAIT_CURSOR));
|
||||||
try {
|
try {
|
||||||
Deck deckToAppend = Deck.load(DeckImporter.importDeckFromFile(tempDeckPath, errorMessages, false), true, true);
|
DeckImporter deckImporter = DeckImporter.getDeckImporter(tempDeckPath);
|
||||||
|
DeckCardLists deckCardLists = new DeckCardLists();
|
||||||
|
if (deckImporter != null) {
|
||||||
|
deckImporter.setPreferences(MageFrame.getPreferences());
|
||||||
|
deckCardLists = deckImporter.importDeck(tempDeckPath, errorMessages, false);
|
||||||
|
}
|
||||||
|
Deck deckToAppend = Deck.load(deckCardLists, true, true);
|
||||||
processAndShowImportErrors(errorMessages);
|
processAndShowImportErrors(errorMessages);
|
||||||
this.deck = Deck.append(deckToAppend, this.deck);
|
this.deck = Deck.append(deckToAppend, this.deck);
|
||||||
refreshDeck(false, true);
|
refreshDeck(false, true);
|
||||||
|
|
@ -924,7 +931,14 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
MageFrame.getDesktop().setCursor(new Cursor(Cursor.WAIT_CURSOR));
|
MageFrame.getDesktop().setCursor(new Cursor(Cursor.WAIT_CURSOR));
|
||||||
try {
|
try {
|
||||||
StringBuilder errorMessages = new StringBuilder();
|
StringBuilder errorMessages = new StringBuilder();
|
||||||
Deck newDeck = Deck.load(DeckImporter.importDeckFromFile(file, errorMessages, saveAutoFixedFile), true, true);
|
DeckImporter deckImporter = DeckImporter.getDeckImporter(file);
|
||||||
|
DeckCardLists deckCardLists = new DeckCardLists();
|
||||||
|
if (deckImporter != null) {
|
||||||
|
deckImporter.setPreferences(MageFrame.getPreferences());
|
||||||
|
deckCardLists = deckImporter.importDeck(file, errorMessages, saveAutoFixedFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
Deck newDeck = Deck.load(deckCardLists, true, true);
|
||||||
processAndShowImportErrors(errorMessages);
|
processAndShowImportErrors(errorMessages);
|
||||||
|
|
||||||
if (newDeck != null) {
|
if (newDeck != null) {
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ public final class MagePreferences {
|
||||||
private static final String KEY_PASSWORD = "password";
|
private static final String KEY_PASSWORD = "password";
|
||||||
private static final String KEY_EMAIL = "email";
|
private static final String KEY_EMAIL = "email";
|
||||||
private static final String KEY_AUTO_CONNECT = "autoConnect";
|
private static final String KEY_AUTO_CONNECT = "autoConnect";
|
||||||
|
private static final String KEY_FAVORITE_CARD_PREFIX = "favoriteCard";
|
||||||
private static final String NODE_KEY_IGNORE_LIST = "ignoreListString";
|
private static final String NODE_KEY_IGNORE_LIST = "ignoreListString";
|
||||||
private static final String NODE_KEY_RESTORE_SESSIONS_LIST = "restoreSessionsListString";
|
private static final String NODE_KEY_RESTORE_SESSIONS_LIST = "restoreSessionsListString";
|
||||||
|
|
||||||
|
|
@ -115,6 +116,26 @@ public final class MagePreferences {
|
||||||
prefs().putBoolean(KEY_AUTO_CONNECT, autoConnect);
|
prefs().putBoolean(KEY_AUTO_CONNECT, autoConnect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getFavoriteCardNumber(String cardName) {
|
||||||
|
String setAndNumber = prefs().get(prefixedKey(KEY_FAVORITE_CARD_PREFIX, cardName), "");
|
||||||
|
if (setAndNumber != null && !setAndNumber.equals("")) {
|
||||||
|
return setAndNumber.split("##")[1];
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getFavoriteCardSet(String cardName) {
|
||||||
|
String setAndNumber = prefs().get(prefixedKey(KEY_FAVORITE_CARD_PREFIX, cardName), "");
|
||||||
|
if (setAndNumber != null && !setAndNumber.equals("")) {
|
||||||
|
return setAndNumber.split("##")[0];
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setFavoriteCard(String cardName, String cardNumber, String setCode) {
|
||||||
|
prefs().put(prefixedKey(KEY_FAVORITE_CARD_PREFIX, cardName), setCode + "##" + cardNumber);
|
||||||
|
}
|
||||||
|
|
||||||
public static void addIgnoredUser(String serverAddress, String username) {
|
public static void addIgnoredUser(String serverAddress, String username) {
|
||||||
ignoreListNode(serverAddress).putBoolean(username, true);
|
ignoreListNode(serverAddress).putBoolean(username, true);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.prefs.Preferences;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -47,6 +48,12 @@ public abstract class DeckImporter {
|
||||||
|
|
||||||
private static final String[] SIDEBOARD_MARKS = new String[]{"//sideboard", "sb: "};
|
private static final String[] SIDEBOARD_MARKS = new String[]{"//sideboard", "sb: "};
|
||||||
|
|
||||||
|
protected Preferences prefs = null;
|
||||||
|
|
||||||
|
public void setPreferences(Preferences prefs) {
|
||||||
|
this.prefs = prefs;
|
||||||
|
}
|
||||||
|
|
||||||
public static DeckImporter getDeckImporter(String file) {
|
public static DeckImporter getDeckImporter(String file) {
|
||||||
if (file == null) {
|
if (file == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.prefs.Preferences;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deck import: text deck, compatible with MTGO and many other apps/services
|
* Deck import: text deck, compatible with MTGO and many other apps/services
|
||||||
|
|
@ -21,6 +22,7 @@ public class TxtDeckImporter extends PlainTextDeckImporter {
|
||||||
private static final String[] SET_VALUES = new String[]{"lands", "creatures", "planeswalkers", "other spells", "sideboard cards",
|
private static final String[] SET_VALUES = new String[]{"lands", "creatures", "planeswalkers", "other spells", "sideboard cards",
|
||||||
"Instant", "Land", "Enchantment", "Artifact", "Sorcery", "Planeswalker", "Creature"};
|
"Instant", "Land", "Enchantment", "Artifact", "Sorcery", "Planeswalker", "Creature"};
|
||||||
private static final Set<String> IGNORE_NAMES = new HashSet<>(Arrays.asList(SET_VALUES));
|
private static final Set<String> IGNORE_NAMES = new HashSet<>(Arrays.asList(SET_VALUES));
|
||||||
|
private static final String KEY_FAVORITE_CARD_PREFIX = "favoriteCard";
|
||||||
|
|
||||||
private boolean sideboard = false;
|
private boolean sideboard = false;
|
||||||
private boolean switchSideboardByEmptyLine = true; // all cards after first empty line will be sideboard (like mtgo format)
|
private boolean switchSideboardByEmptyLine = true; // all cards after first empty line will be sideboard (like mtgo format)
|
||||||
|
|
@ -129,6 +131,16 @@ public class TxtDeckImporter extends PlainTextDeckImporter {
|
||||||
wasCardLines = true;
|
wasCardLines = true;
|
||||||
|
|
||||||
CardInfo cardInfo = CardRepository.instance.findPreferredCoreExpansionCard(lineName);
|
CardInfo cardInfo = CardRepository.instance.findPreferredCoreExpansionCard(lineName);
|
||||||
|
|
||||||
|
if (prefs != null) {
|
||||||
|
String favSetAndNumber = prefs.get(KEY_FAVORITE_CARD_PREFIX + '/' + lineName, "");
|
||||||
|
if (favSetAndNumber != null && !favSetAndNumber.equals("")) {
|
||||||
|
String favoriteSet = favSetAndNumber.split("##")[0];
|
||||||
|
String favoriteNumber = favSetAndNumber.split("##")[1];
|
||||||
|
cardInfo = CardRepository.instance.findCard(favoriteSet, favoriteNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (cardInfo == null) {
|
if (cardInfo == null) {
|
||||||
sbMessage.append("Could not find card: '").append(lineName).append("' at line ").append(lineCount).append('\n');
|
sbMessage.append("Could not find card: '").append(lineName).append("' at line ").append(lineCount).append('\n');
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue