Skip to content
Open
9 changes: 6 additions & 3 deletions forge-core/src/main/java/forge/item/PaperCard.java
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,9 @@ public boolean equals(final Object obj) {
if (!name.equals(other.name)) {
return false;
}
if (!edition.equals(other.edition)) {
CardEdition thisCardEdition = StaticData.instance().getCardEdition(edition);
CardEdition otherCardEdition = StaticData.instance().getCardEdition(other.getEdition());
if (!thisCardEdition.equals(otherCardEdition)) {
return false;
}
if (!getCollectorNumber().equals(other.getCollectorNumber()))
Expand Down Expand Up @@ -415,8 +417,9 @@ public int compareTo(final IPaperCard o) {
if (0 != nameCmp) {
return nameCmp;
}
//FIXME: compare sets properly
int setDiff = edition.compareTo(o.getEdition());
CardEdition thisCardEdition = StaticData.instance().getCardEdition(edition);
CardEdition oCardEdition = StaticData.instance().getCardEdition(o.getEdition());
int setDiff = thisCardEdition.compareTo(oCardEdition);
if (0 != setDiff)
return setDiff;
String thisCollNrKey = getCollectorNumberSortingKey();
Expand Down
34 changes: 26 additions & 8 deletions forge-gui-mobile/src/forge/deck/FDeckViewer.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package forge.deck;

import java.util.Set;
import java.util.HashSet;
import java.util.Map.Entry;
import java.util.regex.Pattern;

import forge.Forge;
import forge.adventure.player.AdventurePlayer;
import forge.assets.FImage;
import forge.assets.FSkinImage;
import forge.assets.ImageCache;
Expand All @@ -17,6 +17,8 @@
import forge.screens.FScreen;
import forge.screens.match.MatchController;
import forge.toolbox.FOptionPane;
import forge.util.ItemPool;
import org.apache.commons.lang3.StringUtils;

public class FDeckViewer extends FScreen {
private static FDeckViewer deckViewer;
Expand Down Expand Up @@ -49,16 +51,32 @@ public static void copyDeckToClipboard(Deck deck) {
}

public static void copyCollectionToClipboard(CardPool pool) {
ItemPool<PaperCard> autoSellCards = AdventurePlayer.current().getAutoSellCards();
CardPool playedCards = pool.getFilteredPool(card -> !autoSellCards.contains(card));

final String nl = System.lineSeparator();
final StringBuilder collectionList = new StringBuilder();
Set<String> accounted = new HashSet<>();
for (final Entry<PaperCard, Integer> entry : pool) {
String cardName = entry.getKey().getCardName();
if (!accounted.contains(cardName)) {
collectionList.append(pool.countByName(cardName)).append(" ").append(cardName).append(nl);
accounted.add(cardName);
collectionList.append("\"Count\",\"Name\",\"Edition\",\"Collector Number\",\"Foil\"").append(nl);
Pattern regexQuote = Pattern.compile("\"");
Pattern regexEdPlst = Pattern.compile("PLIST|MB1");
Pattern regexEdNem = Pattern.compile("NMS");
Pattern regexEdP02 = Pattern.compile("PO2");

for (final Entry<PaperCard, Integer> entry : playedCards) {
PaperCard card = entry.getKey();
if (!card.isVeryBasicLand()) {
Integer count = entry.getValue();
String cleanCardName = regexQuote.matcher(card.getCardName()).replaceAll("\"\"");
// Moxfield import will choke on accented characters so replace them with ASCII equivalents
cleanCardName = StringUtils.stripAccents(cleanCardName);
String cleanCardEdition = regexEdPlst.matcher(card.getEdition()).replaceAll("PLST");
cleanCardEdition = regexEdNem.matcher(cleanCardEdition).replaceAll("NEM");
cleanCardEdition = regexEdP02.matcher(cleanCardEdition).replaceAll("P02");
String cardLine = "\"" + count + "\",\"" + cleanCardName + "\",\"" + cleanCardEdition + "\",\"" + card.getCollectorNumber() + "\",\"" + (card.isFoil() ? "foil" : "") + "\"" + nl;
collectionList.append(cardLine);
}
}

Forge.getClipboard().setContents(collectionList.toString());
FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblCollectionCopiedClipboard"));
}
Expand Down