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;
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);
} catch (Exception e) {
.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().endsWith(".desc")) {
+ } else if (entryLName.endsWith(".desc")) {
// // For old files
// if (this.desc != null) {
// this.desc = IOUtils.readSmallStream(zipIn).trim();
// }
- } else if (entry.getName()
- .equals(getDataPrefix() + "SUMMARY")) {
+ } else if (entryLName.equals("summary")) {
String[] descArray = StringUtils
.unhtml(IOUtils.readSmallStream(zipIn)).trim()
.split("\n");
}
}
- 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) {
meta.getUrl())) {
// TODO: not nice, would be better to do it properly...
-
String base = infoFile.getPath();
if (base.endsWith(".info")) {
base = base.substring(0,
textFile = new File(base + ".text");
}
- if (textFile.exists()) {
- final URL source = textFile.toURI().toURL();
- final MetaData[] superMetaA = new MetaData[1];
- @SuppressWarnings("unused")
- Text unused = new Text() {
- private boolean loaded = loadDocument();
-
- @Override
- public SupportType getType() {
- return SupportType.TEXT;
- }
-
- protected boolean loadDocument()
- throws IOException {
- loadDocument(source);
- superMetaA[0] = getMeta();
- return true;
- }
-
- @Override
- protected Image getCover(File sourceFile) {
- return null;
- }
- };
-
- MetaData superMeta = superMetaA[0];
- if (!hasIt(meta.getTitle())) {
- meta.setTitle(superMeta.getTitle());
- }
- if (!hasIt(meta.getAuthor())) {
- meta.setAuthor(superMeta.getAuthor());
- }
- if (!hasIt(meta.getDate())) {
- meta.setDate(superMeta.getDate());
- }
- if (!hasIt(meta.getUrl())) {
- meta.setUrl(superMeta.getUrl());
- }
- }
+ completeMeta(textFile, meta);
+ //
}
return meta;
"File given as argument does not exists: "
+ infoFile.getAbsolutePath());
}
+
+ /**
+ * Complete the given {@link MetaData} with the original text file if needed
+ * and possible.
+ *
+ * @param textFile
+ * the original text file
+ * @param meta
+ * the {@link MetaData} to complete if needed and possible
+ *
+ * @throws IOException
+ * in case of I/O errors
+ */
+ static public void completeMeta(File textFile,
+ MetaData meta) throws IOException {
+ if (textFile != null && textFile.exists()) {
+ final URL source = textFile.toURI().toURL();
+ final MetaData[] superMetaA = new MetaData[1];
+ @SuppressWarnings("unused")
+ Text unused = new Text() {
+ private boolean loaded = loadDocument();
+
+ @Override
+ public SupportType getType() {
+ return SupportType.TEXT;
+ }
+
+ protected boolean loadDocument() throws IOException {
+ loadDocument(source);
+ superMetaA[0] = getMeta();
+ return true;
+ }
+
+ @Override
+ protected Image getCover(File sourceFile) {
+ return null;
+ }
+ };
+
+ MetaData superMeta = superMetaA[0];
+ if (!hasIt(meta.getTitle())) {
+ meta.setTitle(superMeta.getTitle());
+ }
+ if (!hasIt(meta.getAuthor())) {
+ meta.setAuthor(superMeta.getAuthor());
+ }
+ if (!hasIt(meta.getDate())) {
+ meta.setDate(superMeta.getDate());
+ }
+ if (!hasIt(meta.getUrl())) {
+ meta.setUrl(superMeta.getUrl());
+ }
+ }
+ }
/**
* Check if we have non-empty values for all the given {@link String}s.