Merge branch 'subtree'
[fanfix.git] / src / be / nikiroo / fanfix / output / Epub.java
index 64797d395f1442d0d49220f4072bb7df832e9634..fc2dc8c982127210c308d6a9dc70a20b667162eb 100644 (file)
@@ -36,7 +36,7 @@ class Epub extends BasicOutput {
                String targetNameOrig = targetName;
                targetName += getDefaultExtension(false);
 
-               tmpDir = File.createTempFile("fanfic-reader-epub_", ".wip");
+               tmpDir = Instance.getInstance().getTempFiles().createTempDir("fanfic-reader-epub");
                tmpDir.delete();
 
                if (!tmpDir.mkdir()) {
@@ -46,51 +46,54 @@ class Epub extends BasicOutput {
 
                super.process(story, targetDir, targetNameOrig);
 
-               // "Originals"
-               File data = new File(tmpDir, "DATA");
-               data.mkdir();
-               BasicOutput.getOutput(OutputType.TEXT, isWriteInfo(), isWriteCover())
-                               .process(story, data, targetNameOrig);
-               InfoCover.writeInfo(data, targetNameOrig, story.getMeta());
-               IOUtils.writeSmallFile(data, "version", "3.0");
-
-               // zip/epub
-               File epub = new File(targetDir, targetName);
-               IOUtils.zip(tmpDir, epub, true);
-
-               OutputStream out = new FileOutputStream(epub);
+               File epub = null;
                try {
-                       ZipOutputStream zip = new ZipOutputStream(out);
+                       // "Originals"
+                       File data = new File(tmpDir, "DATA");
+                       data.mkdir();
+                       BasicOutput.getOutput(OutputType.TEXT, isWriteInfo(),
+                                       isWriteCover()).process(story, data, targetNameOrig);
+                       InfoCover.writeInfo(data, targetNameOrig, story.getMeta());
+                       IOUtils.writeSmallFile(data, "version", "3.0");
+
+                       // zip/epub
+                       epub = new File(targetDir, targetName);
+                       IOUtils.zip(tmpDir, epub, true);
+
+                       OutputStream out = new FileOutputStream(epub);
                        try {
-                               // "mimetype" MUST be the first element and not compressed
-                               zip.setLevel(ZipOutputStream.STORED);
-                               File mimetype = new File(tmpDir, "mimetype");
-                               IOUtils.writeSmallFile(tmpDir, "mimetype",
-                                               "application/epub+zip");
-                               ZipEntry entry = new ZipEntry("mimetype");
-                               entry.setExtra(new byte[] {});
-                               zip.putNextEntry(entry);
-                               FileInputStream in = new FileInputStream(mimetype);
+                               ZipOutputStream zip = new ZipOutputStream(out);
                                try {
-                                       IOUtils.write(in, zip);
+                                       // "mimetype" MUST be the first element and not compressed
+                                       zip.setLevel(ZipOutputStream.STORED);
+                                       File mimetype = new File(tmpDir, "mimetype");
+                                       IOUtils.writeSmallFile(tmpDir, "mimetype",
+                                                       "application/epub+zip");
+                                       ZipEntry entry = new ZipEntry("mimetype");
+                                       entry.setExtra(new byte[] {});
+                                       zip.putNextEntry(entry);
+                                       FileInputStream in = new FileInputStream(mimetype);
+                                       try {
+                                               IOUtils.write(in, zip);
+                                       } finally {
+                                               in.close();
+                                       }
+                                       IOUtils.deltree(mimetype);
+                                       zip.setLevel(ZipOutputStream.DEFLATED);
+                                       //
+
+                                       IOUtils.zip(zip, "", tmpDir, true);
                                } finally {
-                                       in.close();
+                                       zip.close();
                                }
-                               IOUtils.deltree(mimetype);
-                               zip.setLevel(ZipOutputStream.DEFLATED);
-                               //
-
-                               IOUtils.zip(zip, "", tmpDir, true);
                        } finally {
-                               zip.close();
+                               out.close();
                        }
                } finally {
-                       out.close();
+                       IOUtils.deltree(tmpDir);
+                       tmpDir = null;
                }
 
-               IOUtils.deltree(tmpDir);
-               tmpDir = null;
-
                return epub;
        }
 
@@ -133,8 +136,11 @@ class Epub extends BasicOutput {
                // OPS/images
                if (story.getMeta() != null && story.getMeta().getCover() != null) {
                        File file = new File(images, "cover");
-                       Instance.getCache().saveAsImage(story.getMeta().getCover(), file,
-                                       true);
+                       try {
+                               Instance.getInstance().getCache().saveAsImage(story.getMeta().getCover(), file, true);
+                       } catch (Exception e) {
+                               Instance.getInstance().getTraceHandler().error(e);
+                       }
                }
 
                // OPS/* except chapters
@@ -239,8 +245,7 @@ class Epub extends BasicOutput {
                        break;
                case IMAGE:
                        File file = new File(images, getCurrentImageBestName(false));
-                       Instance.getCache().saveAsImage(para.getContentImage(), file,
-                                       nextParaIsCover);
+                       Instance.getInstance().getCache().saveAsImage(para.getContentImage(), file, nextParaIsCover);
                        writer.write("                  <img alt='page image' class='page-image' src='images/"
                                        + getCurrentImageBestName(false) + "'/>");
                        break;
@@ -351,11 +356,10 @@ class Epub extends BasicOutput {
        private void generateNcx(Chapter chap, StringBuilder builder, int navPoint) {
                String name;
                if (chap.getName() != null && !chap.getName().isEmpty()) {
-                       name = Instance.getTrans().getString(StringId.CHAPTER_NAMED,
-                                       chap.getNumber(), chap.getName());
+                       name = Instance.getInstance().getTrans().getString(StringId.CHAPTER_NAMED, chap.getNumber(),
+                                       chap.getName());
                } else {
-                       name = Instance.getTrans().getString(StringId.CHAPTER_UNNAMED,
-                                       chap.getNumber());
+                       name = Instance.getInstance().getTrans().getString(StringId.CHAPTER_UNNAMED, chap.getNumber());
                }
 
                String nnn = String.format("%03d", (navPoint - 2));
@@ -433,8 +437,9 @@ class Epub extends BasicOutput {
                builder.append("\n      <!-- Images -->");
 
                if (story.getMeta() != null && story.getMeta().getCover() != null) {
-                       String format = Instance.getConfig()
-                                       .getString(Config.IMAGE_FORMAT_COVER).toLowerCase();
+                       String format = Instance.getInstance().getConfig()
+                                       .getString(Config.FILE_FORMAT_IMAGE_FORMAT_COVER)
+                                       .toLowerCase();
                        builder.append("\n      <item id=\"cover\" href=\"images/cover."
                                        + format + "\" media-type=\"image/png\"/>");
                }
@@ -479,8 +484,8 @@ class Epub extends BasicOutput {
                        author = meta.getAuthor();
                }
 
-               String format = Instance.getConfig()
-                               .getString(Config.IMAGE_FORMAT_COVER).toLowerCase();
+               String format = Instance.getInstance().getConfig()
+                               .getString(Config.FILE_FORMAT_IMAGE_FORMAT_COVER).toLowerCase();
 
                builder.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
                builder.append("\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">");