X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FLocalLibrary.java;h=92676b3530288eac94244b9b84c4f23c24bd82c8;hb=e272f05fd49f01e9fb6bd71c7b74a32839bbcc38;hp=d811d2b2249ec365232c9ea31657d5b1504f5a11;hpb=e604986c4208da0091d26bc0e1c4feb4ff3c588f;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/library/LocalLibrary.java b/src/be/nikiroo/fanfix/library/LocalLibrary.java index d811d2b..92676b3 100644 --- a/src/be/nikiroo/fanfix/library/LocalLibrary.java +++ b/src/be/nikiroo/fanfix/library/LocalLibrary.java @@ -57,12 +57,19 @@ public class LocalLibrary extends BasicLibrary { * * @param baseDir * the directory where to find the {@link Story} objects + * @param text + * the {@link OutputType} to use for non-image documents + * @param image + * the {@link OutputType} to use for image documents + * @param defaultIsHtml + * if the given text or image is invalid, use HTML by default (if + * not, it will be INFO_TEXT/CBZ by default) */ public LocalLibrary(File baseDir, String text, String image, boolean defaultIsHtml) { - this(baseDir, OutputType.valueOfNullOkUC(text, + this(baseDir, OutputType.valueOfAllOkUC(text, defaultIsHtml ? OutputType.HTML : OutputType.INFO_TEXT), - OutputType.valueOfNullOkUC(image, + OutputType.valueOfAllOkUC(image, defaultIsHtml ? OutputType.HTML : OutputType.CBZ)); } @@ -94,8 +101,8 @@ public class LocalLibrary extends BasicLibrary { } @Override - public File getFile(String luid) { - File[] files = getStories(null).get(getInfo(luid)); + public File getFile(String luid, Progress pg) { + File[] files = getStories(pg).get(getInfo(luid)); if (files != null) { return files[1]; } @@ -115,7 +122,7 @@ public class LocalLibrary extends BasicLibrary { meta = InfoReader.readMeta(infoFile, true); return meta.getCover(); } catch (IOException e) { - Instance.syserr(e); + Instance.getTraceHandler().error(e); } } } @@ -124,7 +131,7 @@ public class LocalLibrary extends BasicLibrary { } @Override - protected void clearCache() { + protected void invalidateInfo(String luid) { stories = null; sourceCovers = new HashMap(); } @@ -140,6 +147,7 @@ public class LocalLibrary extends BasicLibrary { for (File file : getRelatedFiles(luid)) { // TODO: throw an IOException if we cannot delete the files? IOUtils.deltree(file); + file.getParentFile().delete(); } } @@ -150,7 +158,7 @@ public class LocalLibrary extends BasicLibrary { File expectedTarget = getExpectedFile(meta); expectedTarget.getParentFile().mkdirs(); - BasicOutput it = BasicOutput.getOutput(getOutputType(meta), true); + BasicOutput it = BasicOutput.getOutput(getOutputType(meta), true, true); it.process(story, expectedTarget.getPath(), pg); return story; @@ -175,15 +183,17 @@ public class LocalLibrary extends BasicLibrary { "\\.info$", ""); InfoCover.writeInfo(newDir, name, meta); relatedFile.delete(); + relatedFile.getParentFile().delete(); } catch (IOException e) { - Instance.syserr(e); + Instance.getTraceHandler().error(e); } } else { relatedFile.renameTo(new File(newDir, relatedFile.getName())); + relatedFile.getParentFile().delete(); } } - clearCache(); + invalidateInfo(); } @Override @@ -202,7 +212,7 @@ public class LocalLibrary extends BasicLibrary { try { ImageIO.write(sourceCovers.get(source), "png", cover); } catch (IOException e) { - Instance.syserr(e); + Instance.getTraceHandler().error(e); sourceCovers.remove(source); } } @@ -214,17 +224,10 @@ public class LocalLibrary extends BasicLibrary { pg = new Progress(); } - LocalLibrary otherLocalLibrary = null; - if (other instanceof RemoteLibrary) { - otherLocalLibrary = ((RemoteLibrary) other).getLocalLibrary(); - } - + // Check if we can simply copy the files instead of the whole process if (other instanceof LocalLibrary) { - otherLocalLibrary = (LocalLibrary) other; - } + LocalLibrary otherLocalLibrary = (LocalLibrary) other; - // Check if we can simply copy the files instead of the whole process - if (otherLocalLibrary != null) { MetaData meta = otherLocalLibrary.getInfo(luid); String expectedType = "" + (meta != null && meta.isImageDocument() ? image : text); @@ -261,7 +264,7 @@ public class LocalLibrary extends BasicLibrary { pg.add(1); } - clearCache(); + invalidateInfo(); pg.done(); return; } @@ -269,7 +272,7 @@ public class LocalLibrary extends BasicLibrary { super.imprt(other, luid, pg); - clearCache(); + invalidateInfo(); } /** @@ -331,14 +334,14 @@ public class LocalLibrary extends BasicLibrary { * The directory (full path) where the new {@link Story} related to this * {@link MetaData} should be located on disk. * - * @param type + * @param source * the type (source) * * @return the target directory */ - private File getExpectedDir(String type) { - String source = type.replaceAll("[^a-zA-Z0-9._+-]", "_"); - return new File(baseDir, source); + private File getExpectedDir(String source) { + String sanitizedSource = source.replaceAll("[^a-zA-Z0-9._+-]", "_"); + return new File(baseDir, sanitizedSource); } /** @@ -383,7 +386,8 @@ public class LocalLibrary extends BasicLibrary { } String coverExt = "." - + Instance.getConfig().getString(Config.IMAGE_FORMAT_COVER); + + Instance.getConfig().getString(Config.IMAGE_FORMAT_COVER) + .toLowerCase(); File coverFile = new File(path + coverExt); if (!coverFile.exists()) { coverFile = new File(path.substring(0, @@ -403,7 +407,7 @@ public class LocalLibrary extends BasicLibrary { * {@link LocalLibrary#baseDir}. *

* Will use a cached list when possible (see - * {@link BasicLibrary#clearCache()}). + * {@link BasicLibrary#invalidateInfo()}). * * @param pg * the optional {@link Progress} @@ -472,8 +476,10 @@ public class LocalLibrary extends BasicLibrary { } catch (IOException e) { // We should not have not-supported files in the // library - Instance.syserr(new IOException( - "Cannot load file from library: " + infoFile, e)); + Instance.getTraceHandler().error( + new IOException( + "Cannot load file from library: " + + infoFile, e)); } pgFiles.add(1); } @@ -489,7 +495,7 @@ public class LocalLibrary extends BasicLibrary { in.close(); } } catch (IOException e) { - Instance.syserr(e); + Instance.getTraceHandler().error(e); } } @@ -501,4 +507,23 @@ public class LocalLibrary extends BasicLibrary { 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, BufferedImage coverImage) { + sourceCovers.put(source, coverImage); + File cover = new File(getExpectedDir(source), ".cover.png"); + try { + ImageIO.write(sourceCovers.get(source), "png", cover); + } catch (IOException e) { + Instance.getTraceHandler().error(e); + sourceCovers.remove(source); + } + } }