package be.nikiroo.fanfix.supported;
+import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Collections;
+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;
import be.nikiroo.fanfix.data.Story;
+import be.nikiroo.utils.Progress;
/**
* Support class for CBZ files (works better with CBZ created with this program,
protected boolean requireInfo() {
return false;
}
-
- @Override
- public boolean isImageDocument(URL source, InputStream in)
- throws IOException {
- return true;
- }
@Override
protected boolean getCover() {
}
@Override
- public Story process(URL url) throws IOException {
- Story story = processMeta(url, false, true);
+ protected void preprocess(URL source, InputStream in) throws IOException {
+ super.preprocess(source, in);
+ meta.setImageDocument(true);
+ }
+
+ @Override
+ public Story process(URL url, Progress pg) throws IOException {
+ if (pg == null) {
+ pg = new Progress();
+ } else {
+ pg.setMinMax(0, 100);
+ }
+
+ Progress pgMeta = new Progress();
+ pg.addProgress(pgMeta, 10);
+ Story story = processMeta(url, false, true, pgMeta);
+ if (!pgMeta.isDone()) {
+ pgMeta.setProgress(pgMeta.getMax()); // 10%
+ }
+
story.setChapters(new ArrayList<Chapter>());
Chapter chap = new Chapter(1, null);
story.getChapters().add(chap);
ZipInputStream zipIn = new ZipInputStream(getInput());
+ List<String> images = new ArrayList<String>();
for (ZipEntry entry = zipIn.getNextEntry(); entry != null; entry = zipIn
.getNextEntry()) {
if (!entry.isDirectory()
}
if (imageEntry) {
+ String uuid = meta.getUuid() + "_" + entry.getName();
try {
- // we assume that we can get the UUID without a stream
- String uuid = getUuid(url, null) + "_"
- + entry.getName();
-
- Instance.getCache().addToCache(zipIn, uuid);
- chap.getParagraphs().add(
- new Paragraph(new File(uuid).toURI().toURL()));
+ File tmp = Instance.getCache().addToCache(zipIn, uuid);
+ images.add(tmp.toURI().toURL().toString());
} catch (Exception e) {
Instance.syserr(e);
}
}
}
+ pg.setProgress(80);
+
+ // ZIP order is not correct for us
+ Collections.sort(images);
+ pg.setProgress(90);
+
+ for (String uuid : images) {
+ try {
+ 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;
}
}