When cover not found, check next to .info
[fanfix.git] / src / be / nikiroo / fanfix / supported / InfoReader.java
index 1695ebdeadfb9792dcbe73011fb02540692e2fdc..571f77b0a1cda5b08e6e775b257d9db8f27eb101 100644 (file)
@@ -5,15 +5,19 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 
+import be.nikiroo.fanfix.Instance;
+import be.nikiroo.fanfix.bundles.Config;
 import be.nikiroo.fanfix.data.MetaData;
 import be.nikiroo.utils.MarkableFileInputStream;
 
 // not complete: no "description" tag
 public class InfoReader {
-       public static MetaData readMeta(File infoFile) throws IOException {
+       public static MetaData readMeta(File infoFile, boolean withCover)
+                       throws IOException {
                if (infoFile == null) {
                        throw new IOException("File is null");
                }
@@ -22,7 +26,7 @@ public class InfoReader {
                        InputStream in = new MarkableFileInputStream(new FileInputStream(
                                        infoFile));
                        try {
-                               return createMeta(in);
+                               return createMeta(infoFile.toURI().toURL(), in, withCover);
                        } finally {
                                in.close();
                                in = null;
@@ -34,7 +38,8 @@ public class InfoReader {
                }
        }
 
-       private static MetaData createMeta(InputStream in) throws IOException {
+       private static MetaData createMeta(URL sourceInfoFile, InputStream in,
+                       boolean withCover) throws IOException {
                MetaData meta = new MetaData();
 
                meta.setTitle(getInfoTag(in, "TITLE"));
@@ -42,6 +47,7 @@ public class InfoReader {
                meta.setDate(getInfoTag(in, "DATE"));
                meta.setTags(getInfoTagList(in, "TAGS", ","));
                meta.setSource(getInfoTag(in, "SOURCE"));
+               meta.setUrl(getInfoTag(in, "URL"));
                meta.setPublisher(getInfoTag(in, "PUBLISHER"));
                meta.setUuid(getInfoTag(in, "UUID"));
                meta.setLuid(getInfoTag(in, "LUID"));
@@ -49,9 +55,31 @@ public class InfoReader {
                meta.setSubject(getInfoTag(in, "SUBJECT"));
                meta.setType(getInfoTag(in, "TYPE"));
                meta.setImageDocument(getInfoTagBoolean(in, "IMAGES_DOCUMENT", false));
-               meta.setCover(BasicSupport.getImage(null, getInfoTag(in, "COVER")));
+               if (withCover) {
+                       meta.setCover(BasicSupport.getImage(null, sourceInfoFile,
+                                       getInfoTag(in, "COVER")));
+                       // Second chance: try to check for a cover next to the info file
+                       if (meta.getCover() == null) {
+                               String info = sourceInfoFile.getFile().toString();
+                               if (info.endsWith(".info")) {
+                                       info = info.substring(0, info.length() - ".info".length());
+                                       String ext = "."
+                                                       + Instance.getConfig().getString(
+                                                                       Config.IMAGE_FORMAT_COVER);
+                                       meta.setCover(BasicSupport.getImage(null, sourceInfoFile,
+                                                       info + ext));
+                               }
+                       }
+               }
+               try {
+                       meta.setWords(Long.parseLong(getInfoTag(in, "WORDCOUNT")));
+               } catch (NumberFormatException e) {
+                       meta.setWords(0);
+               }
+               meta.setCreationDate(getInfoTag(in, "CREATION_DATE"));
+               meta.setFakeCover(Boolean.parseBoolean(getInfoTag(in, "FAKE_COVER")));
 
-               if (meta.getCover() == null) {
+               if (withCover && meta.getCover() == null) {
                        meta.setCover(BasicSupport.getDefaultCover(meta.getSubject()));
                }