From ef0a73f26dd041c6931d8e7d516ce4e8280f292b Mon Sep 17 00:00:00 2001 From: magenoxx Date: Tue, 28 Jun 2011 11:15:19 +0400 Subject: [PATCH] Made images path configurable. Fixed Issue 36. --- Mage.Client/plugins/mage-card-plugin.jar | Bin 316706 -> 317864 bytes .../mage/client/dialog/PreferencesDialog.java | 68 ++++++++++++++++-- .../mage/client/plugins/impl/Plugins.java | 9 ++- .../mage/interfaces/plugin/CardPlugin.java | 18 ++++- .../org/mage/plugins/card/CardPluginImpl.java | 21 ++++-- .../plugins/card/constants/Constants.java | 8 +-- .../plugins/card/dl/sources/GathererSets.java | 31 +++++++- .../card/dl/sources/GathererSymbols.java | 40 +++++++++-- .../plugins/card/images/DownloadPictures.java | 31 ++++---- .../plugins/card/utils/CardImageUtils.java | 19 +++-- 10 files changed, 196 insertions(+), 49 deletions(-) diff --git a/Mage.Client/plugins/mage-card-plugin.jar b/Mage.Client/plugins/mage-card-plugin.jar index 71349b30d898c84ce59f0b26486a75b9ab58ee0d..e07b0eadb6285ff010815c30ecb20b7c6a5d9b70 100644 GIT binary patch delta 48502 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%0DTT@5*VW(%`Be-q&%F*uysg7e^ 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 F^nVvGeLnyI delta 47348 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 cache = new HashMap(); private static final Boolean UPDATE_CACHE_POLICY = Boolean.TRUE; + private final JFileChooser fc = new JFileChooser(); + + { + fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + } + /** Creates new form PreferencesDialog */ public PreferencesDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); + imageFolderPath.setEditable(false); } /** This method is called from within the constructor to @@ -420,6 +430,7 @@ public class PreferencesDialog extends javax.swing.JDialog { save(prefs, dialog.checkBoxEndTurnOthers, END_OF_TURN_OTHERS); save(prefs, dialog.displayBigCardsInHand, KEY_HAND_USE_BIG_CARDS, "true", "false", UPDATE_CACHE_POLICY); save(prefs, dialog.showToolTipsInHand, KEY_HAND_SHOW_TOOLTIPS, "true", "false", UPDATE_CACHE_POLICY); + saveImagesPath(prefs); try { prefs.flush(); } catch (BackingStoreException ex) { @@ -443,18 +454,32 @@ public class PreferencesDialog extends javax.swing.JDialog { private void useDefaultImageFolderActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useDefaultImageFolderActionPerformed if (useDefaultImageFolder.isSelected()) { - imageFolderPath.setText("./plugins/images/"); - imageFolderPath.setEnabled(false); - browseButton.setEnabled(false); + useDefaultPath(); } else { - imageFolderPath.setText(""); - imageFolderPath.setEnabled(true); - browseButton.setEnabled(true); + useConfigurablePath(); } }//GEN-LAST:event_useDefaultImageFolderActionPerformed + private void useDefaultPath() { + imageFolderPath.setText("./plugins/images/"); + imageFolderPath.setEnabled(false); + browseButton.setEnabled(false); + } + + private void useConfigurablePath() { + String path = cache.get(KEY_CARD_IMAGES_PATH); + dialog.imageFolderPath.setText(path); + imageFolderPath.setEnabled(true); + browseButton.setEnabled(true); + } + private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed - // TODO add your handling code here: + int returnVal = fc.showOpenDialog(PreferencesDialog.this); + + if (returnVal == JFileChooser.APPROVE_OPTION) { + File file = fc.getSelectedFile(); + imageFolderPath.setText(file.getAbsolutePath()); + } }//GEN-LAST:event_browseButtonActionPerformed /** @@ -482,6 +507,7 @@ public class PreferencesDialog extends javax.swing.JDialog { load(prefs, dialog.checkBoxEndTurnOthers, END_OF_TURN_OTHERS); load(prefs, dialog.displayBigCardsInHand, KEY_HAND_USE_BIG_CARDS, "true"); load(prefs, dialog.showToolTipsInHand, KEY_HAND_SHOW_TOOLTIPS, "true"); + loadImagesPath(prefs); dialog.setLocation(300, 200); dialog.reset(); dialog.setVisible(true); @@ -492,6 +518,33 @@ public class PreferencesDialog extends javax.swing.JDialog { }); } + private static void loadImagesPath(Preferences prefs) { + String prop = prefs.get(KEY_CARD_IMAGES_USE_DEFAULT, "true"); + if (prop.equals("true")) { + dialog.useDefaultImageFolder.setSelected(true); + dialog.useDefaultPath(); + } else { + dialog.useDefaultImageFolder.setSelected(false); + dialog.useConfigurablePath(); + String path = prefs.get(KEY_CARD_IMAGES_PATH, ""); + dialog.imageFolderPath.setText(path); + updateCache(KEY_CARD_IMAGES_PATH, path); + } + } + + private static void saveImagesPath(Preferences prefs) { + if (dialog.useDefaultImageFolder.isSelected()) { + prefs.put(KEY_CARD_IMAGES_USE_DEFAULT, "true"); + updateCache(KEY_CARD_IMAGES_USE_DEFAULT, "true"); + } else { + prefs.put(KEY_CARD_IMAGES_USE_DEFAULT, "false"); + updateCache(KEY_CARD_IMAGES_USE_DEFAULT, "false"); + String path = dialog.imageFolderPath.getText(); + prefs.put(KEY_CARD_IMAGES_PATH, path); + updateCache(KEY_CARD_IMAGES_PATH, path); + } + } + private static void load(Preferences prefs, JCheckBox checkBox, String propName, String yesValue) { String prop = prefs.get(propName, yesValue); checkBox.setSelected(prop.equals(yesValue)); @@ -522,6 +575,7 @@ public class PreferencesDialog extends javax.swing.JDialog { } else { Preferences prefs = MageFrame.getPreferences(); String value = prefs.get(key, def); + if (value == null) return null; cache.put(key, value); return value; } diff --git a/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java b/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java index 4041e7f955d..7e10bf51ff5 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java +++ b/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java @@ -7,6 +7,7 @@ import mage.client.MageFrame; import mage.client.cards.BigCard; import mage.client.cards.Card; import mage.client.cards.Permanent; +import mage.client.dialog.PreferencesDialog; import mage.client.plugins.MagePlugins; import mage.client.plugins.adapters.MageActionCallback; import mage.client.util.Config; @@ -108,12 +109,16 @@ public class Plugins implements MagePlugins { @Override public void downloadImage(Set allCards) { - if (this.cardPlugin != null) this.cardPlugin.downloadImages(allCards); + String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true"); + String path = useDefault.equals("true") ? null : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null); + if (this.cardPlugin != null) this.cardPlugin.downloadImages(allCards, path); } @Override public void downloadSymbols() { - if (this.cardPlugin != null) this.cardPlugin.downloadSymbols(); + String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true"); + String path = useDefault.equals("true") ? null : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null); + if (this.cardPlugin != null) this.cardPlugin.downloadSymbols(path); } @Override diff --git a/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java b/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java index 9a9ab5878a3..36369a98651 100644 --- a/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java +++ b/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java @@ -29,8 +29,22 @@ public interface CardPlugin extends Plugin { MagePermanent getMagePermanent(PermanentView permanent, Dimension dimension, UUID gameId, ActionCallback callback, boolean canBeFoil, boolean loadImage); MagePermanent getMageCard(CardView permanent, Dimension dimension, UUID gameId, ActionCallback callback, boolean canBeFoil, boolean loadImage); void sortPermanents(Map ui, Collection cards); - void downloadImages(Set allCards); - void downloadSymbols(); + + /** + * Download images. + * + * @param allCards Set of cards to download images for. + * @param imagesPath Path to check in and store images to. Can be null, in such case default path should be used. + */ + void downloadImages(Set allCards, String imagesPath); + + /** + * Download various symbols (mana, tap, set). + * + * @param imagesPath Path to check in and store symbols to. Can be null, in such case default path should be used. + */ + void downloadSymbols(String imagesPath); + Image getManaSymbolImage(String symbol); void onAddCard(MagePermanent card, int count); void onRemoveCard(MagePermanent card, int count); diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java index b61e938b5c3..aa851df5e0f 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java @@ -396,22 +396,33 @@ public class CardPluginImpl implements CardPlugin { } } + /** + * Download images. + * + * @param allCards Set of cards to download images for. + * @param imagesPath Path to check in and store images to. Can be null, in such case default path should be used. + */ @Override - public void downloadImages(Set allCards) { - DownloadPictures.startDownload(null, allCards); + public void downloadImages(Set allCards, String imagesPath) { + DownloadPictures.startDownload(null, allCards, imagesPath); } + /** + * Download various symbols (mana, tap, set). + * + * @param imagesPath Path to check in and store symbols to. Can be null, in such case default path should be used. + */ @Override - public void downloadSymbols() { + public void downloadSymbols(String imagesPath) { final DownloadGui g = new DownloadGui(new Downloader()); - Iterable it = new GathererSymbols(); + Iterable it = new GathererSymbols(imagesPath); for (DownloadJob job : it) { g.getDownloader().add(job); } - it = new GathererSets(); + it = new GathererSets(imagesPath); for(DownloadJob job:it) { g.getDownloader().add(job); } diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/constants/Constants.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/constants/Constants.java index f3b9cebdd26..da20066ddcd 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/constants/Constants.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/constants/Constants.java @@ -4,17 +4,17 @@ import java.awt.Rectangle; import java.io.File; public class Constants { - public static final String RESOURCE_PATH_MANA_LARGE = IO.imageBaseDir + "symbols" + File.separator + "large"; - public static final String RESOURCE_PATH_MANA_MEDIUM = IO.imageBaseDir + "symbols" + File.separator + "medium"; + public static final String RESOURCE_PATH_MANA_LARGE = IO.imageBaseDir + File.separator + "symbols" + File.separator + "large"; + public static final String RESOURCE_PATH_MANA_MEDIUM = IO.imageBaseDir + File.separator + "symbols" + File.separator + "medium"; - public static final String RESOURCE_PATH_SET = IO.imageBaseDir + "sets" + File.separator; + public static final String RESOURCE_PATH_SET = IO.imageBaseDir + File.separator + "sets" + File.separator; public static final String RESOURCE_PATH_SET_SMALL = RESOURCE_PATH_SET + File.separator + "small" + File.separator; public static final Rectangle CARD_SIZE_FULL = new Rectangle(101, 149); public static final Rectangle THUMBNAIL_SIZE_FULL = new Rectangle(102, 146); public interface IO { - public static final String imageBaseDir = "plugins" + File.separator + "images" + File.separator; + public static final String imageBaseDir = "plugins" + File.separator + "images"; public static final String IMAGE_PROPERTIES_FILE = "image.url.properties"; } diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java index 474138d3a3f..faacadaba39 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/dl/sources/GathererSets.java @@ -1,6 +1,5 @@ package org.mage.plugins.card.dl.sources; -import com.google.common.collect.AbstractIterator; import org.mage.plugins.card.dl.DownloadJob; import java.io.File; @@ -12,7 +11,11 @@ import static org.mage.plugins.card.dl.DownloadJob.fromURL; import static org.mage.plugins.card.dl.DownloadJob.toFile; public class GathererSets implements Iterable { - private static final File outDir = new File("plugins/images/sets"); + + private final static String SETS_PATH = File.separator + "sets"; + private final static File DEFAULT_OUT_DIR = new File("plugins" + File.separator + "images" + SETS_PATH); + private static File outDir = DEFAULT_OUT_DIR; + private static final String[] symbols = {"DIS", "DST", "GPT", "RAV", "MRD", "10E", "HOP", "EVE", "APC", "TMP", "CHK"}; private static final String[] withMythics = {"ALA", "CFX", "ARB", "ZEN", "WWK", "ROE", "SOM", "M10", "M11", "DDF", "MBS", "NPH"}; private static final HashMap symbolsReplacements = new HashMap(); @@ -23,6 +26,14 @@ public class GathererSets implements Iterable { symbolsReplacements.put("TMP", "TE"); } + public GathererSets(String path) { + if (path == null) { + useDefaultDir(); + } else { + changeOutDir(path); + } + } + @Override public Iterator iterator() { ArrayList jobs = new ArrayList(); @@ -48,4 +59,20 @@ public class GathererSets implements Iterable { String url = "http://gatherer.wizards.com/Handlers/Image.ashx?type=symbol&set=" + set + "&size=small&rarity=" + rarity; return new DownloadJob(set + "-" + rarity, fromURL(url), toFile(dst)); } + + private void changeOutDir(String path) { + File file = new File(path + SETS_PATH); + if (file.exists()) { + outDir = file; + } else { + file.mkdirs(); + if (file.exists()) { + outDir = file; + } + } + } + + private void useDefaultDir() { + outDir = DEFAULT_OUT_DIR; + } } diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/dl/sources/GathererSymbols.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/dl/sources/GathererSymbols.java index 004f7a899e6..17f336a1bd2 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/dl/sources/GathererSymbols.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/dl/sources/GathererSymbols.java @@ -7,16 +7,15 @@ package org.mage.plugins.card.dl.sources; -import static java.lang.String.format; -import static org.mage.plugins.card.dl.DownloadJob.fromURL; -import static org.mage.plugins.card.dl.DownloadJob.toFile; +import com.google.common.collect.AbstractIterator; +import org.mage.plugins.card.dl.DownloadJob; import java.io.File; import java.util.Iterator; -import org.mage.plugins.card.dl.DownloadJob; - -import com.google.common.collect.AbstractIterator; +import static java.lang.String.format; +import static org.mage.plugins.card.dl.DownloadJob.fromURL; +import static org.mage.plugins.card.dl.DownloadJob.toFile; /** @@ -29,7 +28,10 @@ public class GathererSymbols implements Iterable { //TODO chaos and planeswalker symbol //chaos: http://gatherer.wizards.com/Images/Symbols/chaos.gif - private static final File outDir = new File("plugins/images/symbols"); + private final static String SYMBOLS_PATH = File.separator + "symbols"; + private final static File DEFAULT_OUT_DIR = new File("plugins" + File.separator + "images" + SYMBOLS_PATH); + private static File outDir = DEFAULT_OUT_DIR; + private static final String urlFmt = "http://gatherer.wizards.com/handlers/image.ashx?size=%1$s&name=%2$s&type=symbol"; private static final String[] sizes = {"small", "medium", "large"}; @@ -44,6 +46,14 @@ public class GathererSymbols implements Iterable { "X", "S", "T", "Q"}; private static final int minNumeric = 0, maxNumeric = 16; + + public GathererSymbols(String path) { + if (path == null) { + useDefaultDir(); + } else { + changeOutDir(path); + } + } @Override public Iterator iterator() { @@ -80,4 +90,20 @@ public class GathererSymbols implements Iterable { } }; } + + private void changeOutDir(String path) { + File file = new File(path + SYMBOLS_PATH); + if (file.exists()) { + outDir = file; + } else { + file.mkdirs(); + if (file.exists()) { + outDir = file; + } + } + } + + private void useDefaultDir() { + outDir = DEFAULT_OUT_DIR; + } } diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/DownloadPictures.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/DownloadPictures.java index f73b9bb0cd5..b6089be5747 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/DownloadPictures.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/DownloadPictures.java @@ -21,6 +21,7 @@ import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import javax.management.ImmutableDescriptor; import javax.swing.AbstractButton; import javax.swing.Box; import javax.swing.BoxLayout; @@ -69,6 +70,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab private static boolean offlineMode = false; private JCheckBox checkBox; private final Object sync = new Object(); + private String imagesPath; private static CardImageSource cardImageSource; @@ -79,11 +81,11 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab public static final Proxy.Type[] types = Proxy.Type.values(); public static void main(String[] args) { - startDownload(null, null); + startDownload(null, null, null); } - public static void startDownload(JFrame frame, Set allCards) { - ArrayList cards = getNeededCards(allCards); + public static void startDownload(JFrame frame, Set allCards, String imagesPath) { + ArrayList cards = getNeededCards(allCards, imagesPath); /* * if (cards == null || cards.size() == 0) { @@ -91,7 +93,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab * "All card pictures have been downloaded."); return; } */ - DownloadPictures download = new DownloadPictures(cards); + DownloadPictures download = new DownloadPictures(cards, imagesPath); JDialog dlg = download.getDlg(frame); dlg.setVisible(true); dlg.dispose(); @@ -115,8 +117,9 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab this.cancel = cancel; } - public DownloadPictures(ArrayList cards) { + public DownloadPictures(ArrayList cards, String imagesPath) { this.cards = cards; + this.imagesPath = imagesPath; addr = new JTextField("Proxy Address"); port = new JTextField("Proxy Port"); @@ -230,7 +233,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab dlg = new JOptionPane(p0, JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[1]); } - private static ArrayList getNeededCards(Set allCards) { + private static ArrayList getNeededCards(Set allCards, String imagesPath) { ArrayList cardsToDownload = new ArrayList(); @@ -273,7 +276,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab || card.getName().equals("Plains")) { withCollectorId = true; } - file = new File(CardImageUtils.getImagePath(card, withCollectorId)); + file = new File(CardImageUtils.getImagePath(card, withCollectorId, imagesPath)); if (!file.exists()) { cardsToDownload.add(card); } @@ -375,7 +378,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab @Override public void run() { - File base = new File(Constants.IO.imageBaseDir); + File base = new File(this.imagesPath != null ? imagesPath : Constants.IO.imageBaseDir); if (!base.exists()) { base.mkdir(); } @@ -411,7 +414,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab } if (url != null) { - Runnable task = new DownloadTask(card, new URL(url)); + Runnable task = new DownloadTask(card, new URL(url), imagesPath); executor.execute(task); } else { synchronized (sync) { @@ -435,10 +438,12 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab private final class DownloadTask implements Runnable { private CardInfo card; private URL url; + private String imagesPath; - public DownloadTask(CardInfo card, URL url) { + public DownloadTask(CardInfo card, URL url, String imagesPath) { this.card = card; this.url = url; + this.imagesPath = imagesPath; } @Override @@ -446,7 +451,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab try { BufferedInputStream in = new BufferedInputStream(url.openConnection(p).getInputStream()); - createDirForCard(card); + createDirForCard(card, imagesPath); boolean withCollectorId = false; if (card.getName().equals("Forest") || card.getName().equals("Mountain") || card.getName().equals("Swamp") @@ -485,8 +490,8 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab } } - private static File createDirForCard(CardInfo card) throws Exception { - File setDir = new File(CardImageUtils.getImageDir(card)); + private static File createDirForCard(CardInfo card, String imagesPath) throws Exception { + File setDir = new File(CardImageUtils.getImageDir(card, imagesPath)); if (!setDir.exists()) { setDir.mkdirs(); } diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java index 411ff93da53..a24a6d291b8 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/utils/CardImageUtils.java @@ -127,23 +127,28 @@ public class CardImageUtils { return set; } - public static String getImageDir(CardInfo card) { + public static String getImageDir(CardInfo card, String imagesPath) { if (card.getSet() == null) { return ""; } String set = updateSet(card.getSet(), false).toUpperCase(); + String imagesDir = (imagesPath != null ? imagesPath : Constants.IO.imageBaseDir); if (card.isToken()) { - return Constants.IO.imageBaseDir + File.separator + "TOK" + File.separator + set; + return imagesDir + File.separator + "TOK" + File.separator + set; } else { - return Constants.IO.imageBaseDir + set; + return imagesDir + File.separator + set; } } - - public static String getImagePath(CardInfo card, boolean withCollector) { + + public static String getImagePath(CardInfo card, boolean withCollector) { + return getImagePath(card, withCollector, null); + } + + public static String getImagePath(CardInfo card, boolean withCollector, String imagesPath) { if (withCollector) { - return getImageDir(card) + File.separator + card.getName() + "." + card.getCollectorId() + ".full.jpg"; + return getImageDir(card, imagesPath) + File.separator + card.getName() + "." + card.getCollectorId() + ".full.jpg"; } else { - return getImageDir(card) + File.separator + card.getName() + ".full.jpg"; + return getImageDir(card, imagesPath) + File.separator + card.getName() + ".full.jpg"; } } }