X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Foutput%2FBasicOutput.java;h=1342eb03016189535039fedf322f41cadcb92ff7;hp=e2bf2ff89fc0e28c382b8c8fa20db5a357b27e49;hb=bee7dffea9ef8d3312eee90993a9faaeac6c1127;hpb=68686a37a591a767f6d1af428ea0d5f3d3a1ddc1 diff --git a/src/be/nikiroo/fanfix/output/BasicOutput.java b/src/be/nikiroo/fanfix/output/BasicOutput.java index e2bf2ff..1342eb0 100644 --- a/src/be/nikiroo/fanfix/output/BasicOutput.java +++ b/src/be/nikiroo/fanfix/output/BasicOutput.java @@ -2,13 +2,16 @@ package be.nikiroo.fanfix.output; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import be.nikiroo.fanfix.Instance; import be.nikiroo.fanfix.bundles.StringId; import be.nikiroo.fanfix.data.Chapter; import be.nikiroo.fanfix.data.Paragraph; -import be.nikiroo.fanfix.data.Story; import be.nikiroo.fanfix.data.Paragraph.ParagraphType; +import be.nikiroo.fanfix.data.Story; +import be.nikiroo.utils.ui.Progress; /** * This class is the base class used by the other output classes. It can be used @@ -36,7 +39,12 @@ public abstract class BasicOutput { /** ZIP with (PNG) images */ CBZ, /** LaTeX file with "book" template */ - LATEX; + LATEX, + /** HTML files in a dedicated directory */ + HTML, + + ; + public String toString() { return super.toString().toLowerCase(); } @@ -58,6 +66,20 @@ public abstract class BasicOutput { return desc; } + /** + * The default extension to add to the output files. + * + * @return the extension + */ + public String getDefaultExtension() { + BasicOutput output = BasicOutput.getOutput(this, false); + if (output != null) { + return output.getDefaultExtension(); + } + + return null; + } + /** * Call {@link OutputType#valueOf(String.toUpperCase())}. * @@ -73,7 +95,7 @@ public abstract class BasicOutput { /** * Call {@link OutputType#valueOf(String.toUpperCase())} but return NULL - * for NULL instead of raising exception. + * for NULL and empty instead of raising an exception. * * @param typeName * the possible type name @@ -81,7 +103,7 @@ public abstract class BasicOutput { * @return NULL or the type */ public static OutputType valueOfNullOkUC(String typeName) { - if (typeName == null) { + if (typeName == null || typeName.isEmpty()) { return null; } @@ -116,6 +138,8 @@ public abstract class BasicOutput { private OutputType type; private boolean writeCover; private boolean writeInfo; + private Progress storyPg; + private Progress chapPg; /** * Process the {@link Story} into the given target. @@ -125,6 +149,8 @@ public abstract class BasicOutput { * @param target * the target where to save to (will not necessary be taken as is * by the processor, for instance an extension can be added) + * @param pg + * the optional progress reporter * * @return the actual main target saved, which can be slightly different * that the input one @@ -132,7 +158,10 @@ public abstract class BasicOutput { * @throws IOException * in case of I/O error */ - public File process(Story story, String target) throws IOException { + public File process(Story story, String target, Progress pg) + throws IOException { + storyPg = pg; + target = new File(target).getAbsolutePath(); File targetDir = new File(target).getParentFile(); String targetName = new File(target).getName(); @@ -161,6 +190,7 @@ public abstract class BasicOutput { * the target filename (will not necessary be taken as is by the * processor, for instance an extension can be added) * + * * @return the actual main target saved, which can be slightly different * that the input one * @@ -208,12 +238,10 @@ public abstract class BasicOutput { /** * The default extension to add to the output files. - *

- * Cannot be NULL! * * @return the extension */ - protected String getDefaultExtension() { + public String getDefaultExtension() { return ""; } @@ -236,6 +264,12 @@ public abstract class BasicOutput { } protected void writeStory(Story story) throws IOException { + if (storyPg == null) { + storyPg = new Progress(0, story.getChapters().size() + 2); + } else { + storyPg.setMinMax(0, story.getChapters().size() + 2); + } + String chapterNameNum = String.format("%03d", 0); String paragraphNumber = String.format("%04d", 0); imageName = paragraphNumber + "_" + chapterNameNum + ".png"; @@ -251,11 +285,28 @@ public abstract class BasicOutput { InfoCover.writeInfo(targetDir, targetName, story.getMeta()); } - writeStoryHeader(story); + storyPg.setProgress(1); + + List chapPgs = new ArrayList(story.getChapters() + .size()); for (Chapter chap : story) { - writeChapter(chap); + chapPg = new Progress(0, chap.getParagraphs().size()); + storyPg.addProgress(chapPg, 1); + chapPgs.add(chapPg); + chapPg = null; + } + + writeStoryHeader(story); + for (int i = 0; i < story.getChapters().size(); i++) { + chapPg = chapPgs.get(i); + writeChapter(story.getChapters().get(i)); + chapPg.setProgress(chapPg.getMax()); + chapPg = null; } writeStoryFooter(story); + + storyPg.setProgress(storyPg.getMax()); + storyPg = null; } protected void writeChapter(Chapter chap) throws IOException { @@ -272,10 +323,14 @@ public abstract class BasicOutput { imageName = chapterNameNum + "_" + paragraphNumber + ".png"; writeChapterHeader(chap); + int i = 1; for (Paragraph para : chap) { paragraphNumber = String.format("%04d", num++); imageName = chapterNameNum + "_" + paragraphNumber + ".png"; writeParagraph(para); + if (chapPg != null) { + chapPg.setProgress(i++); + } } writeChapterFooter(chap); } @@ -423,6 +478,8 @@ public abstract class BasicOutput { return new Cbz().setType(type, infoCover, infoCover); case LATEX: return new LaTeX().setType(type, infoCover, infoCover); + case HTML: + return new Html().setType(type, infoCover, infoCover); } }