mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
update ImageFetcher and setlookup
- use newWorkStealingPool - update setlookup method
This commit is contained in:
@@ -173,16 +173,12 @@ public final class ImageKeys {
|
|||||||
}
|
}
|
||||||
//setlookup
|
//setlookup
|
||||||
if (hasSetLookup(filename)) {
|
if (hasSetLookup(filename)) {
|
||||||
//delay processing so gui is responsive
|
ThreadUtil.getServicePool().submit(() -> {
|
||||||
ThreadUtil.delay(60, new Runnable() {
|
File f = setLookUpFile(filename, fullborderFile);
|
||||||
@Override
|
if (f != null)
|
||||||
public void run() {
|
cachedCards.put(filename, f);
|
||||||
File f = setLookUpFile(filename, fullborderFile);
|
else //is null
|
||||||
if (f != null)
|
missingCards.add(filename);
|
||||||
cachedCards.put(filename, f);
|
|
||||||
else //is null
|
|
||||||
missingCards.add(filename);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -283,27 +279,30 @@ public final class ImageKeys {
|
|||||||
for (String setLookup : StaticData.instance().getSetLookup().get(setKey)) {
|
for (String setLookup : StaticData.instance().getSetLookup().get(setKey)) {
|
||||||
String lookupDirectory = CACHE_CARD_PICS_DIR + setLookup;
|
String lookupDirectory = CACHE_CARD_PICS_DIR + setLookup;
|
||||||
File f = new File(lookupDirectory);
|
File f = new File(lookupDirectory);
|
||||||
String[] cardNames = f.list();
|
if (f.exists() && f.isDirectory()) {
|
||||||
if (cardNames != null) {
|
|
||||||
Set<String> cardList = new HashSet<>(Arrays.asList(cardNames));
|
|
||||||
for (String ext : FILE_EXTENSIONS) {
|
for (String ext : FILE_EXTENSIONS) {
|
||||||
if (ext.equals(""))
|
if (ext.equals(""))
|
||||||
continue;
|
continue;
|
||||||
|
File placeholder;
|
||||||
String fb1 = fullborderFile.replace(setKey+"/","")+ext;
|
String fb1 = fullborderFile.replace(setKey+"/","")+ext;
|
||||||
if (cardList.contains(fb1)) {
|
placeholder = new File(lookupDirectory+"/"+fb1);
|
||||||
return new File(lookupDirectory+"/"+fb1);
|
if (placeholder.exists()) {
|
||||||
|
return placeholder;
|
||||||
}
|
}
|
||||||
String fb2 = fullborderFile.replace(setKey+"/","").replaceAll("[0-9]*.fullborder", "1.fullborder")+ext;
|
String fb2 = fullborderFile.replace(setKey+"/","").replaceAll("[0-9]*.fullborder", "1.fullborder")+ext;
|
||||||
if (cardList.contains(fb2)) {
|
placeholder = new File(lookupDirectory+"/"+fb2);
|
||||||
return new File(lookupDirectory+"/"+fb2);
|
if (placeholder.exists()) {
|
||||||
|
return placeholder;
|
||||||
}
|
}
|
||||||
String f1 = filename.replace(setKey+"/","")+ext;
|
String f1 = filename.replace(setKey+"/","")+ext;
|
||||||
if (cardList.contains(f1)) {
|
placeholder = new File(lookupDirectory+"/"+f1);
|
||||||
return new File(lookupDirectory+"/"+f1);
|
if (placeholder.exists()) {
|
||||||
|
return placeholder;
|
||||||
}
|
}
|
||||||
String f2 = filename.replace(setKey+"/","").replaceAll("[0-9]*.full", "1.full")+ext;
|
String f2 = filename.replace(setKey+"/","").replaceAll("[0-9]*.full", "1.full")+ext;
|
||||||
if (cardList.contains(f2)) {
|
placeholder = new File(lookupDirectory+"/"+f2);
|
||||||
return new File(lookupDirectory+"/"+f2);
|
if (placeholder.exists()) {
|
||||||
|
return placeholder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,27 @@ public class ThreadUtil {
|
|||||||
return Thread.currentThread().getName().startsWith("Game");
|
return Thread.currentThread().getName().startsWith("Game");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static ExecutorService service = Executors.newWorkStealingPool();
|
||||||
|
public static ExecutorService getServicePool() {
|
||||||
|
return service;
|
||||||
|
}
|
||||||
|
public static void refreshServicePool() {
|
||||||
|
service = Executors.newWorkStealingPool();
|
||||||
|
}
|
||||||
|
public static <T> T limit(Callable<T> task, long millis){
|
||||||
|
Future<T> future = null;
|
||||||
|
T result;
|
||||||
|
try {
|
||||||
|
future = service.submit(task);
|
||||||
|
result = future.get(millis, TimeUnit.MILLISECONDS);
|
||||||
|
} catch (Exception e) {
|
||||||
|
result = null;
|
||||||
|
} finally {
|
||||||
|
if (future != null)
|
||||||
|
future.cancel(true);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
public static <T> T executeWithTimeout(Callable<T> task, int milliseconds) {
|
public static <T> T executeWithTimeout(Callable<T> task, int milliseconds) {
|
||||||
ExecutorService executor = Executors.newCachedThreadPool();
|
ExecutorService executor = Executors.newCachedThreadPool();
|
||||||
Future<T> future = executor.submit(task);
|
Future<T> future = executor.submit(task);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package forge.util;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.RejectedExecutionException;
|
||||||
|
|
||||||
import forge.card.CardEdition;
|
import forge.card.CardEdition;
|
||||||
import forge.item.IPaperCard;
|
import forge.item.IPaperCard;
|
||||||
@@ -18,7 +18,7 @@ import forge.localinstance.properties.ForgePreferences;
|
|||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
|
|
||||||
public abstract class ImageFetcher {
|
public abstract class ImageFetcher {
|
||||||
private static final ExecutorService threadPool = Executors.newCachedThreadPool();
|
private static final ExecutorService threadPool = ThreadUtil.getServicePool();
|
||||||
// see https://scryfall.com/docs/api/languages and
|
// see https://scryfall.com/docs/api/languages and
|
||||||
// https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
// https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||||
private static final HashMap<String, String> langCodeMap = new HashMap<>();
|
private static final HashMap<String, String> langCodeMap = new HashMap<>();
|
||||||
@@ -167,7 +167,11 @@ public abstract class ImageFetcher {
|
|||||||
currentFetches.remove(destPath);
|
currentFetches.remove(destPath);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
threadPool.submit(getDownloadTask(downloadUrls.toArray(new String[0]), destPath, notifyObservers));
|
try {
|
||||||
|
threadPool.submit(getDownloadTask(downloadUrls.toArray(new String[0]), destPath, notifyObservers));
|
||||||
|
} catch (RejectedExecutionException re) {
|
||||||
|
re.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract Runnable getDownloadTask(String[] toArray, String destPath, Runnable notifyObservers);
|
protected abstract Runnable getDownloadTask(String[] toArray, String destPath, Runnable notifyObservers);
|
||||||
|
|||||||
Reference in New Issue
Block a user