back to dev
[fanfix.git] / src / be / nikiroo / fanfix / supported / Cbz.java
index 9d71046e3e8afd69f28da7cded27ae0b61964156..3aaa355b7b0827015e8334af7362f56c2bdc966d 100644 (file)
@@ -1,7 +1,9 @@
 package be.nikiroo.fanfix.supported;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -18,6 +20,7 @@ import be.nikiroo.fanfix.data.Paragraph;
 import be.nikiroo.fanfix.data.Story;
 import be.nikiroo.utils.IOUtils;
 import be.nikiroo.utils.Image;
+import be.nikiroo.utils.MarkableFileInputStream;
 import be.nikiroo.utils.Progress;
 
 /**
@@ -76,8 +79,12 @@ class Cbz extends Epub {
                String basename = null;
 
                Map<String, Image> images = new HashMap<String, Image>();
+               InputStream cbzIn = null;
+               ZipInputStream zipIn = null;
                try {
-                       ZipInputStream zipIn = new ZipInputStream(getInput());
+                       cbzIn = new MarkableFileInputStream(new FileInputStream(
+                                       getSourceFileOriginal()));
+                       zipIn = new ZipInputStream(cbzIn);
                        for (ZipEntry entry = zipIn.getNextEntry(); entry != null; entry = zipIn
                                        .getNextEntry()) {
                                if (!entry.isDirectory()
@@ -119,25 +126,15 @@ class Cbz extends Epub {
 
                        pg.setProgress(90);
 
-                       File txt = new File(tmpDir, basename + ".txt");
-                       if (!txt.exists()) {
-                               basename = null;
-                       }
-                       if (basename != null) {
-                               try {
-                                       BasicSupport support = BasicSupport.getSupport(txt.toURI()
-                                                       .toURL());
-                                       Story origStory = support.process(null);
-                                       story.setChapters(origStory.getChapters());
-                                       story.setMeta(origStory.getMeta());
-                               } catch (Exception e) {
-                                       basename = null;
+                       // only the description is kept, we do not support hybrid CBZ
+                       Story origStory = getStoryFromTxt(tmpDir, basename);
+                       if (origStory != null) {
+                               if (origStory.getMeta().getCover() == null) {
+                                       origStory.getMeta().setCover(story.getMeta().getCover());
                                }
+                               story.setMeta(origStory.getMeta());
                        }
-
-                       if (basename == null) {
-                               story.setChapters(new ArrayList<Chapter>());
-                       }
+                       story.setChapters(new ArrayList<Chapter>());
 
                        if (!imagesList.isEmpty()) {
                                Chapter chap = new Chapter(story.getChapters().size() + 1, null);
@@ -157,12 +154,38 @@ class Cbz extends Epub {
                                meta.setCover(images.get(imagesList.get(0)));
                                meta.setFakeCover(true);
                        }
-
                } finally {
                        IOUtils.deltree(tmpDir);
+                       if (zipIn != null) {
+                               zipIn.close();
+                       }
+                       if (cbzIn != null) {
+                               cbzIn.close();
+                       }
                }
 
                pg.setProgress(100);
                return story;
        }
+
+       private Story getStoryFromTxt(File tmpDir, String basename) {
+               Story origStory = null;
+
+               File txt = new File(tmpDir, basename + ".txt");
+               if (!txt.exists()) {
+                       basename = null;
+               }
+               if (basename != null) {
+                       try {
+                               BasicSupport support = BasicSupport.getSupport(txt.toURI()
+                                               .toURL());
+                               origStory = support.process(null);
+                       } catch (Exception e) {
+                               basename = null;
+                       }
+               }
+
+               return origStory;
+
+       }
 }