X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FLocalLibrary.java;h=eafd18a6ecf642317c9e35c1e8e1c25aeea0ec5b;hb=cf45a4c44b472d0e1bbbcbc9891020366e99364c;hp=5e0ad40097f8add91f78d73cf1cf61b3334c53e7;hpb=9fe3f17729759e933d7687cc2838f7255f2c9283;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/library/LocalLibrary.java b/src/be/nikiroo/fanfix/library/LocalLibrary.java index 5e0ad40..eafd18a 100644 --- a/src/be/nikiroo/fanfix/library/LocalLibrary.java +++ b/src/be/nikiroo/fanfix/library/LocalLibrary.java @@ -3,6 +3,7 @@ package be.nikiroo.fanfix.library; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -20,7 +21,6 @@ import be.nikiroo.fanfix.output.InfoCover; import be.nikiroo.fanfix.supported.InfoReader; import be.nikiroo.utils.IOUtils; import be.nikiroo.utils.Image; -import be.nikiroo.utils.MarkableFileInputStream; import be.nikiroo.utils.Progress; /** @@ -87,7 +87,7 @@ public class LocalLibrary extends BasicLibrary { this.lastId = 0; this.stories = null; - this.sourceCovers = new HashMap(); + this.sourceCovers = null; baseDir.mkdirs(); } @@ -99,18 +99,34 @@ public class LocalLibrary extends BasicLibrary { @Override public File getFile(String luid, Progress pg) { - File[] files = getStories(pg).get(getInfo(luid)); + Instance.getTraceHandler().trace( + this.getClass().getSimpleName() + ": get file for " + luid); + + File file = null; + String mess = "no file found for "; + + MetaData meta = getInfo(luid); + File[] files = getStories(pg).get(meta); if (files != null) { - return files[1]; + mess = "file retrieved for "; + file = files[1]; } - return null; + Instance.getTraceHandler().trace( + this.getClass().getSimpleName() + ": " + mess + luid + " (" + + meta.getTitle() + ")"); + + return file; } @Override public Image getCover(String luid) { MetaData meta = getInfo(luid); if (meta != null) { + if (meta.getCover() != null) { + return meta.getCover(); + } + File[] files = getStories(null).get(meta); if (files != null) { File infoFile = files[0]; @@ -128,9 +144,14 @@ public class LocalLibrary extends BasicLibrary { } @Override - protected synchronized void invalidateInfo(String luid) { + protected synchronized void updateInfo(MetaData meta) { + deleteInfo(); + } + + @Override + protected void deleteInfo(String luid) { stories = null; - sourceCovers = new HashMap(); + sourceCovers = null; } @Override @@ -190,13 +211,41 @@ public class LocalLibrary extends BasicLibrary { } } - invalidateInfo(); + deleteInfo(); } @Override - public Image getSourceCover(String source) { - if (!sourceCovers.containsKey(source)) { - sourceCovers.put(source, super.getSourceCover(source)); + public synchronized Image getCustomSourceCover(String source) { + if (sourceCovers == null) { + sourceCovers = new HashMap(); + } + + Image img = sourceCovers.get(source); + if (img != null) { + return img; + } + + File coverDir = new File(baseDir, source); + if (coverDir.isDirectory()) { + File cover = new File(coverDir, ".cover.png"); + if (cover.exists()) { + InputStream in; + try { + in = new FileInputStream(cover); + try { + sourceCovers.put(source, new Image(in)); + } finally { + in.close(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + Instance.getTraceHandler().error( + new IOException( + "Cannot load the existing custom source cover: " + + cover, e)); + } + } } return sourceCovers.get(source); @@ -204,14 +253,28 @@ public class LocalLibrary extends BasicLibrary { @Override public void setSourceCover(String source, String luid) { - sourceCovers.put(source, getCover(luid)); - File cover = new File(getExpectedDir(source), ".cover.png"); + setSourceCover(source, getCover(luid)); + } + + /** + * Fix the source cover to the given story cover. + * + * @param source + * the source to change + * @param coverImage + * the cover image + */ + synchronized void setSourceCover(String source, Image coverImage) { + File dir = getExpectedDir(source); + dir.mkdirs(); + File cover = new File(dir, ".cover"); try { - Instance.getCache().saveAsImage(sourceCovers.get(source), cover, - true); + Instance.getCache().saveAsImage(coverImage, cover, true); + if (sourceCovers != null) { + sourceCovers.put(source, coverImage); + } } catch (IOException e) { Instance.getTraceHandler().error(e); - sourceCovers.remove(source); } } @@ -262,15 +325,13 @@ public class LocalLibrary extends BasicLibrary { pg.add(1); } - invalidateInfo(); + deleteInfo(); pg.done(); return; } } super.imprt(other, luid, pg); - - invalidateInfo(); } /** @@ -405,12 +466,13 @@ public class LocalLibrary extends BasicLibrary { * {@link LocalLibrary#baseDir}. *

* Will use a cached list when possible (see - * {@link BasicLibrary#invalidateInfo()}). + * {@link BasicLibrary#deleteInfo()}). * * @param pg * the optional {@link Progress} * - * @return the list of stories + * @return the list of stories (for each item, the first {@link File} is the + * info file, the second file is the target {@link File}) */ private synchronized Map getStories(Progress pg) { if (pg == null) { @@ -449,13 +511,11 @@ 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) { @@ -468,10 +528,8 @@ public class LocalLibrary extends BasicLibrary { // not normal!! throw new IOException( "Cannot understand the LUID of " - + infoFile - + ": " - + (meta == null ? "[meta is NULL]" - : meta.getLuid()), e); + + infoFile + ": " + + meta.getLuid(), e); } } catch (IOException e) { // We should not have not-supported files in the @@ -484,20 +542,6 @@ public class LocalLibrary extends BasicLibrary { pgFiles.add(1); } - File cover = new File(dir, ".cover.png"); - if (cover.exists()) { - try { - InputStream in = new FileInputStream(cover); - try { - sourceCovers.put(source, new Image(in)); - } finally { - in.close(); - } - } catch (IOException e) { - Instance.getTraceHandler().error(e); - } - } - pgFiles.setName(null); } @@ -508,24 +552,4 @@ public class LocalLibrary extends BasicLibrary { pg.done(); return stories; } - - /** - * Fix the source cover to the given story cover. - * - * @param source - * the source to change - * @param coverImage - * the cover image - */ - void setSourceCover(String source, Image coverImage) { - sourceCovers.put(source, coverImage); - File cover = new File(getExpectedDir(source), ".cover.png"); - try { - Instance.getCache().saveAsImage(sourceCovers.get(source), cover, - true); - } catch (IOException e) { - Instance.getTraceHandler().error(e); - sourceCovers.remove(source); - } - } }