Fixed too large temp files creation for svg icons on startup

This commit is contained in:
Oleg Agafonov 2018-08-20 17:52:30 +04:00
parent 8b8392f42c
commit 09f5af154e
4 changed files with 46 additions and 22 deletions

View file

@ -325,6 +325,7 @@ public class DeckGeneratorDialog {
// Generated deck has a nice unique name which corresponds to the timestamp at which it was created. // Generated deck has a nice unique name which corresponds to the timestamp at which it was created.
String deckName = "Generated-Deck-" + dateFormat.format(new Date()); String deckName = "Generated-Deck-" + dateFormat.format(new Date());
File tmp = new File(tempDir + File.separator + deckName + ".dck"); File tmp = new File(tempDir + File.separator + deckName + ".dck");
tmp.getParentFile().mkdirs();
tmp.createNewFile(); tmp.createNewFile();
deck.setName(deckName); deck.setName(deckName);
Sets.saveDeck(tmp.getAbsolutePath(), deck.getDeckCardLists()); Sets.saveDeck(tmp.getAbsolutePath(), deck.getDeckCardLists());

View file

@ -57,6 +57,7 @@ public final class SaveObjectUtil {
String time = now(DATE_PATTERN); String time = now(DATE_PATTERN);
File f = new File("income" + File.separator + name + '_' + time + ".save"); File f = new File("income" + File.separator + name + '_' + time + ".save");
if (!f.exists()) { if (!f.exists()) {
f.getParentFile().mkdirs();
f.createNewFile(); f.createNewFile();
} }
oos = new ObjectOutputStream(new FileOutputStream(f)); oos = new ObjectOutputStream(new FileOutputStream(f));

View file

@ -56,6 +56,8 @@ import org.apache.batik.util.SVGConstants;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.mage.plugins.card.utils.CardImageUtils; import org.mage.plugins.card.utils.CardImageUtils;
import static org.mage.plugins.card.utils.CardImageUtils.getImagesDir;
public final class ManaSymbols { public final class ManaSymbols {
private static final Logger LOGGER = Logger.getLogger(ManaSymbols.class); private static final Logger LOGGER = Logger.getLogger(ManaSymbols.class);
@ -93,6 +95,41 @@ public final class ManaSymbols {
private static final JLabel labelRender = new JLabel(); // render mana text private static final JLabel labelRender = new JLabel(); // render mana text
private static String getSvgPathToCss() {
return getImagesDir() + File.separator + "temp" + File.separator + "batic-svg-settings.css";
}
private static void prepareSvg(Boolean forceToCreateCss) {
File f = new File(getSvgPathToCss());
if (forceToCreateCss || !f.exists()) {
// Rendering hints can't be set programatically, so
// we override defaults with a temporary stylesheet.
// These defaults emphasize quality and precision, and
// are more similar to the defaults of other SVG viewers.
// SVG documents can still override these defaults.
String css = "svg {"
+ "shape-rendering: geometricPrecision;"
+ "text-rendering: geometricPrecision;"
+ "color-rendering: optimizeQuality;"
+ "image-rendering: optimizeQuality;"
+ "}";
FileWriter w = null;
try {
f.getParentFile().mkdirs();
f.createNewFile();
w = new FileWriter(f);
w.write(css);
} catch (Throwable e) {
LOGGER.error("Can't create css file for svg", e);
}
finally {
StreamUtils.closeQuietly(w);
}
}
}
public static void loadImages() { public static void loadImages() {
// TODO: delete files rename jpg->gif (it was for backward compatibility for one of the old version?) // TODO: delete files rename jpg->gif (it was for backward compatibility for one of the old version?)
renameSymbols(getResourceSymbolsPath(ResourceSymbolSize.SMALL)); renameSymbols(getResourceSymbolsPath(ResourceSymbolSize.SMALL));
@ -101,6 +138,9 @@ public final class ManaSymbols {
//renameSymbols(getSymbolsPath(ResourceSymbolSize.SVG)); // not need //renameSymbols(getSymbolsPath(ResourceSymbolSize.SVG)); // not need
// TODO: remove medium sets files to "medium" folder like symbols above? // TODO: remove medium sets files to "medium" folder like symbols above?
// prepare svg settings
prepareSvg(true);
// preload symbol images // preload symbol images
loadSymbolImages(15); loadSymbolImages(15);
loadSymbolImages(25); loadSymbolImages(25);
@ -243,26 +283,9 @@ public final class ManaSymbols {
final BufferedImage[] imagePointer = new BufferedImage[1]; final BufferedImage[] imagePointer = new BufferedImage[1];
// Rendering hints can't be set programatically, so // css settings for svg
// we override defaults with a temporary stylesheet. prepareSvg(false);
// These defaults emphasize quality and precision, and File cssFile = new File(getSvgPathToCss());
// are more similar to the defaults of other SVG viewers.
// SVG documents can still override these defaults.
String css = "svg {"
+ "shape-rendering: geometricPrecision;"
+ "text-rendering: geometricPrecision;"
+ "color-rendering: optimizeQuality;"
+ "image-rendering: optimizeQuality;"
+ "}";
File cssFile = File.createTempFile("batik-default-override-", ".css");
FileWriter w = null;
try {
w = new FileWriter(cssFile);
w.write(css);
} finally {
StreamUtils.closeQuietly(w);
}
TranscodingHints transcoderHints = new TranscodingHints(); TranscodingHints transcoderHints = new TranscodingHints();
@ -311,8 +334,6 @@ public final class ManaSymbols {
t.transcode(input, null); t.transcode(input, null);
} catch (Exception e) { } catch (Exception e) {
throw new IOException("Couldn't convert svg file: " + svgFile + " , reason: " + e.getMessage()); throw new IOException("Couldn't convert svg file: " + svgFile + " , reason: " + e.getMessage());
} finally {
cssFile.delete();
} }
BufferedImage originImage = imagePointer[0]; BufferedImage originImage = imagePointer[0];

View file

@ -41,6 +41,7 @@ public class CounterPluginImpl implements CounterPlugin {
File data = new File(PLUGIN_DATA_FOLDER_PATH + File.separator + DATA_STORAGE_FILE); File data = new File(PLUGIN_DATA_FOLDER_PATH + File.separator + DATA_STORAGE_FILE);
if (!data.exists()) { if (!data.exists()) {
try { try {
data.getParentFile().mkdirs();
data.createNewFile(); data.createNewFile();
} catch (IOException e) { } catch (IOException e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);