import be.nikiroo.fanfix.Instance;
import be.nikiroo.fanfix.bundles.Config;
+import be.nikiroo.fanfix.data.Chapter;
import be.nikiroo.fanfix.data.MetaData;
+import be.nikiroo.utils.IOUtils;
import be.nikiroo.utils.Image;
import be.nikiroo.utils.streams.MarkableFileInputStream;
-// not complete: no "description" tag
public class InfoReader {
static protected BasicSupportHelper bsHelper = new BasicSupportHelper();
- // static protected BasicSupportImages bsImages = new BasicSupportImages();
- // static protected BasicSupportPara bsPara = new BasicSupportPara(new
- // BasicSupportHelper(), new BasicSupportImages());
+ static protected BasicSupportImages bsImages = new BasicSupportImages();
+ static protected BasicSupportPara bsPara = new BasicSupportPara(
+ new BasicSupportHelper(), new BasicSupportImages());
public static MetaData readMeta(File infoFile, boolean withCover)
throws IOException {
if (infoFile == null) {
throw new IOException("File is null");
}
+
+ MetaData meta = null;
if (infoFile.exists()) {
InputStream in = new MarkableFileInputStream(infoFile);
try {
- MetaData meta = createMeta(infoFile.toURI().toURL(), in,
+ meta = createMeta(infoFile.toURI().toURL(), in,
withCover);
// Some old .info files were using UUID for URL...
// formats have a copy of the original text file)
if (!hasIt(meta.getTitle(), meta.getAuthor(), meta.getDate(),
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;
+
} finally {
in.close();
}
}
+ if (meta != null) {
+ try {
+ File summaryFile = new File(infoFile.getAbsolutePath()
+ .replaceFirst("\\.info$", ".summary"));
+ InputStream in = new MarkableFileInputStream(summaryFile);
+ try {
+ String content = IOUtils.readSmallStream(in);
+ Chapter desc = bsPara.makeChapter(null, null, 0,
+ "Description", content, false, null);
+ meta.setResume(desc);
+ } finally {
+ in.close();
+ }
+ } catch (IOException e) {
+ // ignore absent or bad summary
+ }
+
+ return meta;
+ }
+
throw new FileNotFoundException(
"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 {
+ // TODO: not nice, would be better to do it properly...
+ 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.
meta.setTitle(getInfoTag(in, "TITLE"));
meta.setAuthor(getInfoTag(in, "AUTHOR"));
- meta.setDate(getInfoTag(in, "DATE"));
+ meta.setDate(bsHelper.formatDate(getInfoTag(in, "DATE")));
meta.setTags(getInfoTagList(in, "TAGS", ","));
meta.setSource(getInfoTag(in, "SOURCE"));
meta.setUrl(getInfoTag(in, "URL"));
} catch (NumberFormatException e) {
meta.setWords(0);
}
- meta.setCreationDate(getInfoTag(in, "CREATION_DATE"));
+ meta.setCreationDate(
+ bsHelper.formatDate(getInfoTag(in, "CREATION_DATE")));
meta.setFakeCover(Boolean.parseBoolean(getInfoTag(in, "FAKE_COVER")));
if (withCover && meta.getCover() == null) {