From 17507970364e146b73e9926084fd12ef095c9041 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Thu, 13 Jun 2024 00:26:44 +0400 Subject: [PATCH] images: made normal images size as default download source, improved description and info messages --- .../card/dl/sources/CardImageSource.java | 2 +- .../card/dl/sources/CopyPasteImageSource.java | 2 +- .../card/dl/sources/GrabbagImageSource.java | 2 +- .../card/dl/sources/ScryfallImageSource.java | 6 +-- .../dl/sources/ScryfallImageSourceNormal.java | 5 ++- .../dl/sources/ScryfallImageSourceSmall.java | 5 ++- .../dl/sources/WizardCardsImageSource.java | 2 +- .../card/images/DownloadPicturesService.java | 39 +++++++++++-------- 8 files changed, 36 insertions(+), 27 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java index 4b3d024afc4..1ee0c5371cd 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CardImageSource.java @@ -24,7 +24,7 @@ public interface CardImageSource { String getSourceName(); - float getAverageSize(); + float getAverageSizeKb(); int getTotalImages(); diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CopyPasteImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CopyPasteImageSource.java index dcd7b067b6f..2a14b9c5483 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CopyPasteImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/CopyPasteImageSource.java @@ -35,7 +35,7 @@ public enum CopyPasteImageSource implements CardImageSource { } @Override - public float getAverageSize() { + public float getAverageSizeKb() { return 260.7f; } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java index e0f45758178..8e7c7f0bc5e 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/GrabbagImageSource.java @@ -28,7 +28,7 @@ public enum GrabbagImageSource implements CardImageSource { } @Override - public float getAverageSize() { + public float getAverageSizeKb() { return 74.8f; } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java index 1e61663be00..00d807c4e00 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSource.java @@ -299,9 +299,9 @@ public class ScryfallImageSource implements CardImageSource { } @Override - public float getAverageSize() { - // March 2020: 46_354 image files with total size 9_545_168 KiB - return 206; + public float getAverageSizeKb() { + // June 2024: MH3 set - 46450 Kb / 332 = 140 Kb + return 140f; } @Override diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSourceNormal.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSourceNormal.java index e4fa83381fc..04d9a085c13 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSourceNormal.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSourceNormal.java @@ -43,8 +43,9 @@ public class ScryfallImageSourceNormal extends ScryfallImageSource { } @Override - public float getAverageSize() { - return 100; // initial estimate - TODO calculate a more accurate number + public float getAverageSizeKb() { + // June 2024: MH3 set - 30500 Kb / 332 = 92 Kb + return 92f; } } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSourceSmall.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSourceSmall.java index 5841c13e7f3..29d86c97287 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSourceSmall.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/ScryfallImageSourceSmall.java @@ -43,8 +43,9 @@ public class ScryfallImageSourceSmall extends ScryfallImageSource { } @Override - public float getAverageSize() { - return 14; // 1,035,907,575 bytes / 73,637 files = 14,068 bytes/file (or 13.78kb/file) + public float getAverageSizeKb() { + // June 2024: MH3 set - 4500 Kb / 332 = 14 Kb + return 14f; } } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index dab1c75fe6d..1fae9aa419b 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -674,7 +674,7 @@ public enum WizardCardsImageSource implements CardImageSource { } @Override - public float getAverageSize() { + public float getAverageSizeKb() { return 60.0f; } diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java index 3e5291fec21..cd6539125aa 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPicturesService.java @@ -21,7 +21,6 @@ import org.apache.log4j.Logger; import org.mage.plugins.card.dl.DownloadServiceInfo; import org.mage.plugins.card.dl.sources.*; import org.mage.plugins.card.utils.CardImageUtils; -import static org.mage.plugins.card.utils.CardImageUtils.getImagesDir; import javax.swing.*; import java.awt.*; @@ -36,6 +35,8 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import static org.mage.plugins.card.utils.CardImageUtils.getImagesDir; + /** * @author JayDi85 */ @@ -74,10 +75,10 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements private Proxy proxy = Proxy.NO_PROXY; enum DownloadSources { - WIZARDS("1. wizards.com - low quality, cards only, multi-language", WizardCardsImageSource.instance), - SCRYFALL_BIG("2a. scryfall.com - BIG: high quality, multi-language", ScryfallImageSource.getInstance()), - SCRYFALL_SMALL("2b. scryfall.com - small: low quality, multi-language", ScryfallImageSourceSmall.getInstance()), - SCRYFALL_NORM("2c. scryfall.com - normal: good quality, multi-language", ScryfallImageSourceNormal.getInstance()), + WIZARDS("1. wizards.com - low quality, cards only", WizardCardsImageSource.instance), + SCRYFALL_BIG("2a. scryfall.com - BIG: high quality (~15 GB)", ScryfallImageSource.getInstance()), + SCRYFALL_NORM("2b. scryfall.com - normal: good quality (~10 GB)", ScryfallImageSourceNormal.getInstance()), + SCRYFALL_SMALL("2c. scryfall.com - small: low quality, unreadable text (~1.5 GB)", ScryfallImageSourceSmall.getInstance()), GRAB_BAG("3. GrabBag - unofficial STAR WARS cards and tokens", GrabbagImageSource.instance), COPYPASTE("4. Experimental - copy and paste image URLs", CopyPasteImageSource.instance); // TODO: need rework for user friendly GUI @@ -160,7 +161,7 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements // SOURCES - scryfall is default source uiDialog.getSourcesCombo().setModel(new DefaultComboBoxModel(DownloadSources.values())); - uiDialog.getSourcesCombo().setSelectedItem(DownloadSources.SCRYFALL_BIG); + uiDialog.getSourcesCombo().setSelectedItem(DownloadSources.SCRYFALL_NORM); selectedSource = ScryfallImageSource.getInstance(); uiDialog.getSourcesCombo().addItemListener((ItemEvent event) -> { if (event.getStateChange() == ItemEvent.SELECTED) { @@ -390,7 +391,7 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements && selectedSource.isCardImageProvided(data.getSet(), data.getName()) && selectedSets.contains(data.getSet())) { if (!onlyBasics - || basicList.contains(data.getName())) { + || basicList.contains(data.getName())) { numberCardImagesAvailable++; cardsDownloadQueue.add(data); } @@ -427,12 +428,17 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements uiDialog.setCurrentInfo("Missing: " + missingCardsCount + " card images / " + missingTokensCount + " token images"); int imageSum = cardCount + tokenCount; - float mb = (imageSum * selectedSource.getAverageSize()) / 1024; - updateProgressMessage(String.format( - cardIndex == imageSum - ? "%d of %d (%d cards/%d tokens) image downloads finished! Please close!" - : "%d of %d (%d cards/%d tokens) image downloads finished! Please wait! [%.1f Mb]", - 0, imageSum, cardCount, tokenCount, mb + float mb = (imageSum * selectedSource.getAverageSizeKb()) / 1024; + String statusEnd; + if (imageSum == 0) { + statusEnd = "you have all images. Please close."; + } else if (cardIndex == 0) { + statusEnd = "image download NOT STARTED. Please start."; + } else { + statusEnd = String.format("image downloading... Please wait [%.1f Mb left].", mb); + } + updateProgressMessage(String.format("%d of %d (%d cards and %d tokens) %s", + 0, imageSum, cardCount, tokenCount, statusEnd ), 0, imageSum); } @@ -930,11 +936,12 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements if (cardIndex < needDownloadCount) { // downloading - float mb = ((needDownloadCount - lastCardIndex) * selectedSource.getAverageSize()) / 1024; - updateProgressMessage(String.format("%d of %d image downloads finished! Please wait! [%.1f Mb]", + float mb = ((needDownloadCount - lastCardIndex) * selectedSource.getAverageSizeKb()) / 1024; + updateProgressMessage(String.format("%d of %d image downloading... Please wait [%.1f Mb left].", lastCardIndex, needDownloadCount, mb), lastCardIndex, needDownloadCount); } else { // finished + updateProgressMessage("Image download DONE, refreshing stats... Please wait."); List downloadedCards = Collections.synchronizedList(new ArrayList<>()); DownloadPicturesService.this.cardsMissing.parallelStream().forEach(cardDownloadData -> { TFile file = new TFile(CardImageUtils.buildImagePathToCardOrToken(cardDownloadData)); @@ -949,7 +956,7 @@ public class DownloadPicturesService extends DefaultBoundedRangeModel implements if (this.cardsDownloadQueue.isEmpty()) { // stop download - updateProgressMessage("0 images remaining. Please close."); + updateProgressMessage("Nothing to download. Please close."); } else { // try download again }