Fixes:
[nikiroo-utils.git] / src / be / nikiroo / fanfix / library / LocalLibrary.java
index 4cdfb944e0cd7b62bdbdedadac580cefa61f895b..bdded01810ebedc0452867175da9eb1b3899ffdb 100644 (file)
@@ -20,7 +20,6 @@ import be.nikiroo.fanfix.output.InfoCover;
 import be.nikiroo.fanfix.supported.InfoReader;
 import be.nikiroo.utils.IOUtils;
 import be.nikiroo.utils.Image;
-import be.nikiroo.utils.MarkableFileInputStream;
 import be.nikiroo.utils.Progress;
 
 /**
@@ -87,7 +86,7 @@ public class LocalLibrary extends BasicLibrary {
 
                this.lastId = 0;
                this.stories = null;
-               this.sourceCovers = new HashMap<String, Image>();
+               this.sourceCovers = null;
 
                baseDir.mkdirs();
        }
@@ -99,12 +98,25 @@ public class LocalLibrary extends BasicLibrary {
 
        @Override
        public File getFile(String luid, Progress pg) {
-               File[] files = getStories(pg).get(getInfo(luid));
+               Instance.getTraceHandler().trace(
+                               this.getClass().getSimpleName() + ": get file for " + luid);
+
+               File file = null;
+               String mess = "no file found for ";
+
+               MetaData meta = getInfo(luid);
+               Instance.getTraceHandler().trace("(info is: " + meta + ")");
+
+               File[] files = getStories(pg).get(meta);
                if (files != null) {
-                       return files[1];
+                       mess = "file retrieved for ";
+                       file = files[1];
                }
 
-               return null;
+               Instance.getTraceHandler().trace(
+                               this.getClass().getSimpleName() + ": " + mess + luid);
+
+               return file;
        }
 
        @Override
@@ -128,9 +140,14 @@ public class LocalLibrary extends BasicLibrary {
        }
 
        @Override
-       protected void invalidateInfo(String luid) {
+       protected synchronized void updateInfo(MetaData meta) {
+               deleteInfo();
+       }
+
+       @Override
+       protected void deleteInfo(String luid) {
                stories = null;
-               sourceCovers = new HashMap<String, Image>();
+               sourceCovers = null;
        }
 
        @Override
@@ -190,11 +207,15 @@ public class LocalLibrary extends BasicLibrary {
                        }
                }
 
-               invalidateInfo();
+               deleteInfo();
        }
 
        @Override
        public Image getSourceCover(String source) {
+               if (sourceCovers == null) {
+                       getStories(null);
+               }
+
                if (!sourceCovers.containsKey(source)) {
                        sourceCovers.put(source, super.getSourceCover(source));
                }
@@ -204,8 +225,12 @@ public class LocalLibrary extends BasicLibrary {
 
        @Override
        public void setSourceCover(String source, String luid) {
+               if (sourceCovers == null) {
+                       getStories(null);
+               }
+
                sourceCovers.put(source, getCover(luid));
-               File cover = new File(getExpectedDir(source), ".cover.png");
+               File cover = new File(getExpectedDir(source), ".cover");
                try {
                        Instance.getCache().saveAsImage(sourceCovers.get(source), cover,
                                        true);
@@ -262,15 +287,13 @@ public class LocalLibrary extends BasicLibrary {
                                        pg.add(1);
                                }
 
-                               invalidateInfo();
+                               deleteInfo();
                                pg.done();
                                return;
                        }
                }
 
                super.imprt(other, luid, pg);
-
-               invalidateInfo();
        }
 
        /**
@@ -405,12 +428,13 @@ public class LocalLibrary extends BasicLibrary {
         * {@link LocalLibrary#baseDir}.
         * <p>
         * Will use a cached list when possible (see
-        * {@link BasicLibrary#invalidateInfo()}).
+        * {@link BasicLibrary#deleteInfo()}).
         * 
         * @param pg
         *            the optional {@link Progress}
         * 
-        * @return the list of stories
+        * @return the list of stories (for each item, the first {@link File} is the info file, the
+        *         second file is the target {@link File})
         */
        private synchronized Map<MetaData, File[]> getStories(Progress pg) {
                if (pg == null) {
@@ -421,6 +445,7 @@ public class LocalLibrary extends BasicLibrary {
 
                if (stories == null) {
                        stories = new HashMap<MetaData, File[]>();
+                       sourceCovers = new HashMap<String, Image>();
 
                        lastId = 0;
 
@@ -468,10 +493,8 @@ public class LocalLibrary extends BasicLibrary {
                                                                // not normal!!
                                                                throw new IOException(
                                                                                "Cannot understand the LUID of "
-                                                                                               + infoFile
-                                                                                               + ": "
-                                                                                               + (meta == null ? "[meta is NULL]"
-                                                                                                               : meta.getLuid()), e);
+                                                                                               + infoFile + ": "
+                                                                                               + meta.getLuid(), e);
                                                        }
                                                } catch (IOException e) {
                                                        // We should not have not-supported files in the
@@ -518,8 +541,12 @@ public class LocalLibrary extends BasicLibrary {
         *            the cover image
         */
        void setSourceCover(String source, Image coverImage) {
+               if (sourceCovers == null) {
+                       getStories(null);
+               }
+
                sourceCovers.put(source, coverImage);
-               File cover = new File(getExpectedDir(source), ".cover.png");
+               File cover = new File(getExpectedDir(source), ".cover");
                try {
                        Instance.getCache().saveAsImage(sourceCovers.get(source), cover,
                                        true);