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
* @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
+ * @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.valueOfAllOkUC(text,
+ defaultIsHtml ? OutputType.HTML : OutputType.INFO_TEXT),
+ OutputType.valueOfAllOkUC(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 use for non-image documents
+ * @param image
+ * the {@link OutputType} to use for image documents
*/
public LocalLibrary(File baseDir, OutputType text, OutputType image) {
this.baseDir = baseDir;
}
@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];
}
}
}
+ @Override
+ public void imprt(BasicLibrary other, String luid, Progress pg)
+ throws IOException {
+ if (pg == null) {
+ pg = new Progress();
+ }
+
+ // Check if we can simply copy the files instead of the whole process
+ if (other instanceof LocalLibrary) {
+ LocalLibrary otherLocalLibrary = (LocalLibrary) other;
+
+ 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<File> 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}.
*
* 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);
}
/**
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.syserr(e);
+ sourceCovers.remove(source);
+ }
+ }
}