X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FLocalLibrary.java;h=d811d2b2249ec365232c9ea31657d5b1504f5a11;hb=e604986c4208da0091d26bc0e1c4feb4ff3c588f;hp=bc41157328e7a0656b065c7b45ba2afc07872ba0;hpb=14b574483b51d3859acef6a269f8841b5a4eb5f8;p=nikiroo-utils.git diff --git a/src/be/nikiroo/fanfix/library/LocalLibrary.java b/src/be/nikiroo/fanfix/library/LocalLibrary.java index bc41157..d811d2b 100644 --- a/src/be/nikiroo/fanfix/library/LocalLibrary.java +++ b/src/be/nikiroo/fanfix/library/LocalLibrary.java @@ -40,15 +40,41 @@ public class LocalLibrary extends BasicLibrary { private OutputType text; private OutputType image; + /** + * Create a new {@link LocalLibrary} with the given back-end directory. + * + * @param baseDir + * the directory where to find the {@link Story} objects + */ + public LocalLibrary(File baseDir) { + this(baseDir, Instance.getConfig().getString( + Config.NON_IMAGES_DOCUMENT_TYPE), Instance.getConfig() + .getString(Config.IMAGES_DOCUMENT_TYPE), false); + } + + /** + * Create a new {@link LocalLibrary} with the given back-end directory. + * + * @param baseDir + * the directory where to find the {@link Story} objects + */ + public LocalLibrary(File baseDir, String text, String image, + boolean defaultIsHtml) { + this(baseDir, OutputType.valueOfNullOkUC(text, + defaultIsHtml ? OutputType.HTML : OutputType.INFO_TEXT), + OutputType.valueOfNullOkUC(image, + defaultIsHtml ? OutputType.HTML : OutputType.CBZ)); + } + /** * Create a new {@link LocalLibrary} with the given back-end directory. * * @param baseDir * the directory where to find the {@link Story} objects * @param text - * the {@link OutputType} to save the text-focused stories into + * the {@link OutputType} to use for non-image documents * @param image - * the {@link OutputType} to save the images-focused stories into + * the {@link OutputType} to use for image documents */ public LocalLibrary(File baseDir, OutputType text, OutputType image) { this.baseDir = baseDir; @@ -181,6 +207,71 @@ public class LocalLibrary extends BasicLibrary { } } + @Override + public void imprt(BasicLibrary other, String luid, Progress pg) + throws IOException { + if (pg == null) { + pg = new Progress(); + } + + LocalLibrary otherLocalLibrary = null; + if (other instanceof RemoteLibrary) { + otherLocalLibrary = ((RemoteLibrary) other).getLocalLibrary(); + } + + if (other instanceof 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); + if (meta != null && meta.getType().equals(expectedType)) { + File from = otherLocalLibrary.getExpectedDir(meta.getSource()); + File to = this.getExpectedDir(meta.getSource()); + List sources = otherLocalLibrary.getRelatedFiles(luid); + if (!sources.isEmpty()) { + pg.setMinMax(0, sources.size()); + } + + for (File source : sources) { + File target = new File(source.getAbsolutePath().replace( + from.getAbsolutePath(), to.getAbsolutePath())); + if (!source.equals(target)) { + target.getParentFile().mkdirs(); + InputStream in = null; + try { + in = new FileInputStream(source); + IOUtils.write(in, target); + } catch (IOException e) { + if (in != null) { + try { + in.close(); + } catch (Exception ee) { + } + } + + pg.done(); + throw e; + } + } + + pg.add(1); + } + + clearCache(); + pg.done(); + return; + } + } + + super.imprt(other, luid, pg); + + clearCache(); + } + /** * Return the {@link OutputType} for this {@link Story}. *