tests: fix NPE, add BasicSupportUtilities tests
[nikiroo-utils.git] / src / be / nikiroo / fanfix / supported / InfoReader.java
index 8e1c385cfa8d115fd9fd6035be77eac10c580611..c22dbd711bedca99d1bde9f08400ba8e83b069b7 100644 (file)
@@ -1,7 +1,6 @@
 package be.nikiroo.fanfix.supported;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -13,10 +12,15 @@ import java.util.Scanner;
 import be.nikiroo.fanfix.Instance;
 import be.nikiroo.fanfix.bundles.Config;
 import be.nikiroo.fanfix.data.MetaData;
-import be.nikiroo.utils.MarkableFileInputStream;
+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());
+
        public static MetaData readMeta(File infoFile, boolean withCover)
                        throws IOException {
                if (infoFile == null) {
@@ -24,8 +28,7 @@ public class InfoReader {
                }
 
                if (infoFile.exists()) {
-                       InputStream in = new MarkableFileInputStream(new FileInputStream(
-                                       infoFile));
+                       InputStream in = new MarkableFileInputStream(infoFile);
                        try {
                                return createMeta(infoFile.toURI().toURL(), in, withCover);
                        } finally {
@@ -58,21 +61,12 @@ public class InfoReader {
                if (withCover) {
                        String infoTag = getInfoTag(in, "COVER");
                        if (infoTag != null && !infoTag.trim().isEmpty()) {
-                               meta.setCover(BasicSupportHelper.getImage(null, sourceInfoFile,
+                               meta.setCover(bsHelper.getImage(null, sourceInfoFile,
                                                infoTag));
                        }
-                       // 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)
-                                                                       .toLowerCase();
-                                       meta.setCover(BasicSupportHelper.getImage(null,
-                                                       sourceInfoFile, info + ext));
-                               }
+                               // Second chance: try to check for a cover next to the info file
+                               meta.setCover(getCoverByName(sourceInfoFile));
                        }
                }
                try {
@@ -84,12 +78,47 @@ public class InfoReader {
                meta.setFakeCover(Boolean.parseBoolean(getInfoTag(in, "FAKE_COVER")));
 
                if (withCover && meta.getCover() == null) {
-                       meta.setCover(BasicSupportHelper.getDefaultCover(meta.getSubject()));
+                       meta.setCover(bsHelper.getDefaultCover(meta.getSubject()));
                }
 
                return meta;
        }
 
+       /**
+        * Return the cover image if it is next to the source file.
+        * 
+        * @param sourceInfoFile
+        *            the source file
+        * 
+        * @return the cover if present, NULL if not
+        */
+       public static Image getCoverByName(URL sourceInfoFile) {
+               Image cover = null;
+
+               File basefile = new File(sourceInfoFile.getFile());
+
+               String ext = "."
+                               + Instance.getConfig().getString(Config.FILE_FORMAT_IMAGE_FORMAT_COVER)
+                                               .toLowerCase();
+
+               // Without removing ext
+               cover = bsHelper.getImage(null, sourceInfoFile,
+                               basefile.getAbsolutePath() + ext);
+
+               // Try without ext
+               String name = basefile.getName();
+               int pos = name.lastIndexOf(".");
+               if (cover == null && pos > 0) {
+                       name = name.substring(0, pos);
+                       basefile = new File(basefile.getParent(), name);
+
+                       cover = bsHelper.getImage(null, sourceInfoFile,
+                                       basefile.getAbsolutePath() + ext);
+               }
+
+               return cover;
+       }
+
        private static boolean getInfoTagBoolean(InputStream in, String key,
                        boolean def) throws IOException {
                Boolean value = getInfoTagBoolean(in, key);