Fix CBZ: do not include the first page twice
[nikiroo-utils.git] / src / be / nikiroo / fanfix / supported / Cbz.java
index b63ec5d45395c8a8529e1e20bcdfef8f267626e4..7113248ba485fb4b91ad06f5b614cd49f1b7a3c7 100644 (file)
@@ -1,5 +1,6 @@
 package be.nikiroo.fanfix.supported;
 
+import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -10,6 +11,8 @@ import java.util.List;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
+import javax.imageio.ImageIO;
+
 import be.nikiroo.fanfix.Instance;
 import be.nikiroo.fanfix.data.Chapter;
 import be.nikiroo.fanfix.data.Paragraph;
@@ -85,9 +88,9 @@ class Cbz extends Epub {
 
                                if (imageEntry) {
                                        String uuid = meta.getUuid() + "_" + entry.getName();
-                                       images.add(uuid);
                                        try {
-                                               Instance.getCache().addToCache(zipIn, uuid);
+                                               File tmp = Instance.getCache().addToCache(zipIn, uuid);
+                                               images.add(tmp.toURI().toURL().toString());
                                        } catch (Exception e) {
                                                Instance.syserr(e);
                                        }
@@ -97,19 +100,30 @@ class Cbz extends Epub {
 
                pg.setProgress(80);
 
-               // ZIP order is not sure
+               // ZIP order is not correct for us
                Collections.sort(images);
                pg.setProgress(90);
 
                for (String uuid : images) {
                        try {
-                               chap.getParagraphs().add(
-                                               new Paragraph(new File(uuid).toURI().toURL()));
+                               chap.getParagraphs().add(new Paragraph(new URL(uuid)));
                        } catch (Exception e) {
                                Instance.syserr(e);
                        }
                }
 
+               if (meta.getCover() == null && !images.isEmpty()) {
+                       InputStream in = Instance.getCache().open(new URL(images.get(0)),
+                                       this, true);
+                       try {
+                               BufferedImage fcover = ImageIO.read(in);
+                               meta.setCover(fcover);
+                               meta.setFakeCover(true);
+                       } finally {
+                               in.close();
+                       }
+               }
+
                pg.setProgress(100);
                return story;
        }