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;
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;
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;
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");
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 : bsImages.getImageExt(false)) {
}
}
- 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")) {
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");
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);
}
}
- if (requireInfo() && (!tmp.exists() || !tmpInfo.exists())) {
+ if (requireInfo() && !tmp.exists()) {
throw new IOException(
"file not supported (maybe not created with this program or corrupt)");
}
} 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<String>());
+ 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()));
+ meta.setCover(InfoReader.getCoverByName(
+ getSourceFileOriginal().toURI().toURL()));
}
}
} finally {