tests: fix NPE, add BasicSupportUtilities tests
[nikiroo-utils.git] / src / be / nikiroo / fanfix / supported / InfoReader.java
index 80f873989ad03b95db685ffa94603fa7f4e4f30f..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;
@@ -14,10 +13,14 @@ import be.nikiroo.fanfix.Instance;
 import be.nikiroo.fanfix.bundles.Config;
 import be.nikiroo.fanfix.data.MetaData;
 import be.nikiroo.utils.Image;
-import be.nikiroo.utils.MarkableFileInputStream;
+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) {
@@ -25,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 {
@@ -59,7 +61,7 @@ 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));
                        }
                        if (meta.getCover() == null) {
@@ -76,7 +78,7 @@ 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;
@@ -91,17 +93,30 @@ public class InfoReader {
         * @return the cover if present, NULL if not
         */
        public static Image getCoverByName(URL sourceInfoFile) {
-               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();
-                       return BasicSupportHelper
-                                       .getImage(null, sourceInfoFile, info + ext);
+               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 null;
+               return cover;
        }
 
        private static boolean getInfoTagBoolean(InputStream in, String key,