X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Fsupported%2FEpub.java;h=783d724e36aaa84e822f1fb5f4c6590371a4a8fd;hp=5a1fe43ce1e87929ee70e11e43c4d461f4ba3fc1;hb=0a264fbe3d5a43516006052574a5f322d9d38897;hpb=298d405a94bd30b67ce69add67bd7c764061def4 diff --git a/src/be/nikiroo/fanfix/supported/Epub.java b/src/be/nikiroo/fanfix/supported/Epub.java index 5a1fe43..783d724 100644 --- a/src/be/nikiroo/fanfix/supported/Epub.java +++ b/src/be/nikiroo/fanfix/supported/Epub.java @@ -1,13 +1,14 @@ package be.nikiroo.fanfix.supported; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; import java.net.URL; import java.net.URLDecoder; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -17,8 +18,8 @@ import be.nikiroo.fanfix.Instance; import be.nikiroo.fanfix.data.MetaData; import be.nikiroo.utils.IOUtils; import be.nikiroo.utils.Image; -import be.nikiroo.utils.MarkableFileInputStream; import be.nikiroo.utils.StringUtils; +import be.nikiroo.utils.streams.MarkableFileInputStream; /** * Support class for EPUB files created with this program (as we need some @@ -34,11 +35,6 @@ class Epub extends InfoText { private URL fakeSource; private InputStream fakeIn; - @Override - public String getSourceName() { - return "epub"; - } - public File getSourceFileOriginal() { return super.getSourceFile(); } @@ -48,10 +44,8 @@ class Epub extends InfoText { try { return new File(fakeSource.toURI()); } catch (URISyntaxException e) { - Instance.getTraceHandler() - .error(new IOException( - "Cannot get the source file from the info-text URL", - e)); + Instance.getInstance().getTraceHandler().error(new IOException( + "Cannot get the source file from the info-text URL", e)); } return null; @@ -63,9 +57,8 @@ class Epub extends InfoText { try { fakeIn.reset(); } catch (IOException e) { - Instance.getTraceHandler() - .error(new IOException( - "Cannot reset the Epub Text stream", e)); + Instance.getInstance().getTraceHandler().error(new IOException( + "Cannot reset the Epub Text stream", e)); } return fakeIn; @@ -93,8 +86,8 @@ class Epub extends InfoText { ZipInputStream zipIn = null; try { zipIn = new ZipInputStream(in); - tmpDir = Instance.getTempFiles().createTempDir( - "fanfic-reader-parser"); + tmpDir = Instance.getInstance().getTempFiles() + .createTempDir("fanfic-reader-parser"); File tmp = new File(tmpDir, "file.txt"); File tmpInfo = new File(tmpDir, "file.info"); @@ -110,20 +103,22 @@ class Epub extends InfoText { String title = null; String author = null; - for (ZipEntry entry = zipIn.getNextEntry(); entry != null; entry = zipIn - .getNextEntry()) { + for (ZipEntry entry = zipIn + .getNextEntry(); entry != null; entry = zipIn + .getNextEntry()) { if (!entry.isDirectory() && entry.getName().startsWith(getDataPrefix())) { String entryLName = entry.getName().toLowerCase(); + entryLName = entryLName.substring(getDataPrefix().length()); boolean imageEntry = false; - for (String ext : BasicSupportImages.getImageExt(false)) { + for (String ext : bsImages.getImageExt(false)) { if (entryLName.endsWith(ext)) { imageEntry = true; } } - if (entry.getName().equals(getDataPrefix() + "version")) { + if (entryLName.equals("version")) { // Nothing to do for now ("first" // version is 3.0) } else if (entryLName.endsWith(".info")) { @@ -131,22 +126,33 @@ class Epub extends InfoText { IOUtils.write(zipIn, tmpInfo); } else if (imageEntry) { // Cover - if (getCover()) { + if (getCover() && cover == null) { try { - cover = new Image(zipIn); + Image img = new Image(zipIn); + if (img.getSize() == 0) { + img.close(); + throw new IOException( + "Empty image not accepted"); + } + cover = img; } catch (Exception e) { - Instance.getTraceHandler().error(e); + Instance.getInstance().getTraceHandler() + .error(e); } } - } else if (entry.getName().equals(getDataPrefix() + "URL")) { + } else if (entryLName.equals("url")) { 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")) { + } else if (entryLName.endsWith(".desc")) { + // // For old files + // if (this.desc != null) { + // this.desc = IOUtils.readSmallStream(zipIn).trim(); + // } + } else if (entryLName.equals("summary")) { String[] descArray = StringUtils .unhtml(IOUtils.readSmallStream(zipIn)).trim() .split("\n"); @@ -160,12 +166,12 @@ class Epub extends InfoText { skip = 2; } } - this.desc = ""; - for (int i = skip; i < descArray.length; i++) { - this.desc += descArray[i].trim() + "\n"; - } - - this.desc = this.desc.trim(); + // 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); @@ -173,40 +179,51 @@ class Epub extends InfoText { } } - if (requireInfo() && (!tmp.exists() || !tmpInfo.exists())) { + if (requireInfo() && !tmp.exists()) { throw new IOException( "file not supported (maybe not created with this program or corrupt)"); } if (tmp.exists()) { - this.fakeIn = new MarkableFileInputStream(new FileInputStream( - tmp)); + this.fakeIn = new MarkableFileInputStream(tmp); } if (tmpInfo.exists()) { meta = InfoReader.readMeta(tmpInfo, true); - if (cover != null) { - meta.setCover(cover); - } tmpInfo.delete(); } else { if (title == null || title.isEmpty()) { title = getSourceFileOriginal().getName(); - if (title.toLowerCase().endsWith(".cbz")) { - title = title.substring(0, title.length() - 4); + String exts[] = new String[] {".epub", ".cbz"}; + for (String ext : exts) { + if (title.toLowerCase().endsWith(ext)) { + title = title.substring(0, + title.length() - ext.length()); + } } title = URLDecoder.decode(title, "UTF-8").trim(); } meta = new MetaData(); meta.setLang("en"); - meta.setTags(new ArrayList()); - meta.setSource(getSourceName()); + meta.setTags(Arrays.asList("[no_info]")); + meta.setSource(getType().getSourceName()); meta.setUuid(url); meta.setUrl(url); meta.setTitle(title); meta.setAuthor(author); meta.setImageDocument(isImagesDocumentByDefault()); + + InfoReader.completeMeta(tmp, meta); + } + + if (meta.getCover() == null) { + if (cover != null) { + meta.setCover(cover); + } else { + meta.setCover(InfoReader.getCoverByName( + getSourceFileOriginal().toURI().toURL())); + } } } finally { if (zipIn != null) {