cache save/load workflow
authorNiki Roo <niki@nikiroo.be>
Thu, 19 Sep 2019 06:26:13 +0000 (08:26 +0200)
committerNiki Roo <niki@nikiroo.be>
Thu, 19 Sep 2019 06:26:13 +0000 (08:26 +0200)
changelog.md
src/be/nikiroo/utils/Cache.java
src/be/nikiroo/utils/Downloader.java

index 3fcdb7626166b66956980b69f69dcddf3e230b7f..0831070cfdea1f2fef18e70c8e13d5418044d2e5 100644 (file)
@@ -3,6 +3,7 @@
 ## Version WIP
 
 - Downloader: new Offline mode for cache accesses only
+- Cache: make sure an immedate SAVE/LOAD always work, even with 0 retention delays
 
 ## Version 5.0.0
 
index 779b194f5cc66f0e706865e360c6a7b992344f9d..6233082742606f72538fb5ccb2a3ffd4c64e9136 100644 (file)
@@ -326,9 +326,12 @@ public class Cache {
         *             in case of I/O error
         */
        private long save(InputStream in, File cached) throws IOException {
-               // We delete AFTER so not to remove the subdir we will use...
-               long bytes = IOUtils.write(in, cached);
+               // We want to force at least an immediate SAVE/LOAD to work for some
+               // workflows, even if we don't accept cached files (times set to "0"
+               // -- and not "-1" or a positive value)
                clean(true, dir, 10);
+               cached.getParentFile().mkdirs(); // in case we deleted our own parent
+               long bytes = IOUtils.write(in, cached);
                return bytes;
        }
 
index b1ac56c0508300e6fee02eada0affd499117b7a8..c9a319aa0eb725159287562ae76718fc531c8097 100644 (file)
@@ -397,6 +397,11 @@ public class Downloader {
                                }
                        }
 
+                       if (in == null) {
+                               throw new IOException(
+                                               "Cannot retrieve the file after storing it in the cache (??)");
+                       }
+                       
                        return in;
                } catch (IOException e) {
                        throw new IOException(String.format(