X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FLocalLibrary.java;h=bc41157328e7a0656b065c7b45ba2afc07872ba0;hp=d7fd5212ed8bddaec5afca42179f37c9b4d80ee6;hb=14b574483b51d3859acef6a269f8841b5a4eb5f8;hpb=5c2ea9078adc2037e1ec2033f5798d4c0e11c6ea diff --git a/src/be/nikiroo/fanfix/library/LocalLibrary.java b/src/be/nikiroo/fanfix/library/LocalLibrary.java index d7fd521..bc41157 100644 --- a/src/be/nikiroo/fanfix/library/LocalLibrary.java +++ b/src/be/nikiroo/fanfix/library/LocalLibrary.java @@ -3,12 +3,16 @@ package be.nikiroo.fanfix.library; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileFilter; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.imageio.ImageIO; + import be.nikiroo.fanfix.Instance; import be.nikiroo.fanfix.bundles.Config; import be.nikiroo.fanfix.data.MetaData; @@ -18,6 +22,8 @@ import be.nikiroo.fanfix.output.BasicOutput.OutputType; import be.nikiroo.fanfix.output.InfoCover; import be.nikiroo.fanfix.supported.InfoReader; import be.nikiroo.utils.IOUtils; +import be.nikiroo.utils.ImageUtils; +import be.nikiroo.utils.MarkableFileInputStream; import be.nikiroo.utils.Progress; /** @@ -28,6 +34,7 @@ import be.nikiroo.utils.Progress; public class LocalLibrary extends BasicLibrary { private int lastId; private Map stories; // Files: [ infoFile, TargetFile ] + private Map sourceCovers; private File baseDir; private OutputType text; @@ -50,6 +57,7 @@ public class LocalLibrary extends BasicLibrary { this.lastId = 0; this.stories = null; + this.sourceCovers = new HashMap(); baseDir.mkdirs(); } @@ -92,10 +100,12 @@ public class LocalLibrary extends BasicLibrary { @Override protected void clearCache() { stories = null; + sourceCovers = new HashMap(); } @Override protected synchronized int getNextId() { + getStories(null); // make sure lastId is set return ++lastId; } @@ -150,6 +160,27 @@ public class LocalLibrary extends BasicLibrary { clearCache(); } + @Override + public BufferedImage getSourceCover(String source) { + if (!sourceCovers.containsKey(source)) { + sourceCovers.put(source, super.getSourceCover(source)); + } + + return sourceCovers.get(source); + } + + @Override + public void setSourceCover(String source, String luid) { + sourceCovers.put(source, getCover(luid)); + File cover = new File(getExpectedDir(source), ".cover.png"); + try { + ImageIO.write(sourceCovers.get(source), "png", cover); + } catch (IOException e) { + Instance.syserr(e); + sourceCovers.remove(source); + } + } + /** * Return the {@link OutputType} for this {@link Story}. * @@ -324,10 +355,12 @@ public class LocalLibrary extends BasicLibrary { pgDirs.addProgress(pgFiles, 100); pgDirs.setName("Loading from: " + dir.getName()); + String source = null; for (File infoFile : infoFiles) { pgFiles.setName(infoFile.getName()); try { MetaData meta = InfoReader.readMeta(infoFile, false); + source = meta.getSource(); try { int id = Integer.parseInt(meta.getLuid()); if (id > lastId) { @@ -354,6 +387,21 @@ public class LocalLibrary extends BasicLibrary { pgFiles.add(1); } + File cover = new File(dir, ".cover.png"); + if (cover.exists()) { + try { + InputStream in = new MarkableFileInputStream( + new FileInputStream(cover)); + try { + sourceCovers.put(source, ImageUtils.fromStream(in)); + } finally { + in.close(); + } + } catch (IOException e) { + Instance.syserr(e); + } + } + pgFiles.setName(null); }