X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Fsupported%2FEpub.java;h=6819ec29e272f1ee319fdf69da893b8d20855a77;hb=b7afbe4297ae1f0c4db57cc431c2341b9fc6c061;hp=6cfe4f3d38de3b26b6b4392e1d55fedfb82a32c2;hpb=57f02339393c9997391b76ffcb22ae72fd0a45cb;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/supported/Epub.java b/src/be/nikiroo/fanfix/supported/Epub.java index 6cfe4f3..6819ec2 100644 --- a/src/be/nikiroo/fanfix/supported/Epub.java +++ b/src/be/nikiroo/fanfix/supported/Epub.java @@ -15,8 +15,10 @@ import java.util.zip.ZipInputStream; import be.nikiroo.fanfix.Instance; import be.nikiroo.fanfix.data.MetaData; import be.nikiroo.utils.IOUtils; +import be.nikiroo.utils.ImageUtils; import be.nikiroo.utils.MarkableFileInputStream; import be.nikiroo.utils.Progress; +import be.nikiroo.utils.StringUtils; /** * Support class for EPUB files created with this program (as we need some @@ -25,8 +27,9 @@ import be.nikiroo.utils.Progress; * @author niki */ class Epub extends InfoText { - private File tmp; protected MetaData meta; + private File tmp; + private String desc; private URL fakeSource; private InputStream fakeIn; @@ -52,6 +55,10 @@ class Epub extends InfoText { @Override protected String getDesc(URL source, InputStream in) throws IOException { + if (desc != null) { + return desc; + } + if (fakeIn != null) { fakeIn.reset(); return super.getDesc(fakeSource, fakeIn); @@ -91,6 +98,10 @@ class Epub extends InfoText { fakeSource = tmp.toURI().toURL(); BufferedImage cover = null; + String url = source.toString(); + String title = null; + String author = null; + for (ZipEntry entry = zipIn.getNextEntry(); entry != null; entry = zipIn .getNextEntry()) { if (!entry.isDirectory() @@ -114,15 +125,38 @@ class Epub extends InfoText { // Cover if (getCover()) { try { - cover = IOUtils.toImage(zipIn); + cover = ImageUtils.fromStream(zipIn); } catch (Exception e) { Instance.syserr(e); } } } else if (entry.getName().equals(getDataPrefix() + "URL")) { - // Do nothing + String[] descArray = StringUtils + .unhtml(IOUtils.readSmallStream(zipIn)).trim() + .split("\n"); + if (descArray.length > 0) { + url = descArray[0].trim(); + } } else if (entry.getName().equals(getDataPrefix() + "SUMMARY")) { - // Do nothing + String[] descArray = StringUtils + .unhtml(IOUtils.readSmallStream(zipIn)).trim() + .split("\n"); + int skip = 0; + if (descArray.length > 1) { + title = descArray[0].trim(); + skip = 1; + if (descArray.length > 2 + && descArray[1].startsWith("©")) { + author = descArray[1].substring(1).trim(); + skip = 2; + } + } + this.desc = ""; + for (int i = skip; i < descArray.length; i++) { + this.desc += descArray[i].trim() + "\n"; + } + + this.desc = this.desc.trim(); } else { // Hopefully the data file IOUtils.write(zipIn, tmp); @@ -147,11 +181,13 @@ class Epub extends InfoText { tmpInfo.delete(); } else { meta = new MetaData(); - meta.setUuid(source.toString()); meta.setLang("EN"); meta.setTags(new ArrayList()); meta.setSource(getSourceName()); - meta.setUrl(source.toString()); + meta.setUuid(url); + meta.setUrl(url); + meta.setTitle(title); + meta.setAuthor(author); } } @@ -165,7 +201,10 @@ class Epub extends InfoText { tmp = null; - fakeIn.close(); + if (fakeIn != null) { + fakeIn.close(); + } + super.close(); }