Downloader: new offline mode
authorNiki Roo <niki@nikiroo.be>
Tue, 17 Sep 2019 06:18:34 +0000 (08:18 +0200)
committerNiki Roo <niki@nikiroo.be>
Tue, 17 Sep 2019 06:18:34 +0000 (08:18 +0200)
changelog.md
src/be/nikiroo/utils/Downloader.java

index e38522694c1eeb4458356c69b787e2c6e37dbc74..3fcdb7626166b66956980b69f69dcddf3e230b7f 100644 (file)
@@ -1,5 +1,9 @@
 # nikiroo-utils
 
+## Version WIP
+
+- Downloader: new Offline mode for cache accesses only
+
 ## Version 5.0.0
 
 - new: server: count the bytes we rec/send
index 2a462a81efe752a7b596c631e1dae68e2b3de00a..b1ac56c0508300e6fee02eada0affd499117b7a8 100644 (file)
@@ -30,6 +30,7 @@ public class Downloader {
        private CookieManager cookies;
        private TraceHandler tracer = new TraceHandler();
        private Cache cache;
+       private boolean offline;
 
        /**
         * Create a new {@link Downloader}.
@@ -63,6 +64,32 @@ public class Downloader {
 
                setCache(cache);
        }
+       
+       /**
+        * This {@link Downloader} is forbidden to try and connect to the network.
+        * <p>
+        * If TRUE, it will only check the cache if any.
+        * <p>
+        * Default is FALSE.
+        * 
+        * @return TRUE if offline
+        */
+       public boolean isOffline() {
+               return offline;
+       }
+       
+       /**
+        * This {@link Downloader} is forbidden to try and connect to the network.
+        * <p>
+        * If TRUE, it will only check the cache if any.
+        * <p>
+        * Default is FALSE.
+        * 
+        * @param offline TRUE for offline, FALSE for online
+        */
+       public void setOffline(boolean offline) {
+               this.offline = offline;
+       }
 
        /**
         * The traces handler for this {@link Cache}.
@@ -167,7 +194,7 @@ public class Downloader {
         * @return the {@link InputStream} of the opened page
         * 
         * @throws IOException
-        *             in case of I/O error
+        *             in case of I/O error (including offline mode + not in cache)
         */
        public InputStream open(URL url, URL currentReferer,
                        Map<String, String> cookiesValues, Map<String, String> postParams,
@@ -199,7 +226,7 @@ public class Downloader {
         * @return the {@link InputStream} of the opened page
         * 
         * @throws IOException
-        *             in case of I/O error
+        *             in case of I/O error (including offline mode + not in cache)
         */
        public InputStream open(URL url, URL currentReferer,
                        Map<String, String> cookiesValues, Map<String, String> postParams,
@@ -236,7 +263,7 @@ public class Downloader {
         * @return the {@link InputStream} of the opened page
         * 
         * @throws IOException
-        *             in case of I/O error
+        *             in case of I/O error (including offline mode + not in cache)
         */
        public InputStream open(URL url, final URL originalUrl, URL currentReferer,
                        Map<String, String> cookiesValues, Map<String, String> postParams,
@@ -254,6 +281,11 @@ public class Downloader {
                        }
                }
 
+               if (offline) {
+                       tracer.error("Downloader OFFLINE, cannot proceed to URL: " + url);
+                       throw new IOException("Downloader is currently OFFLINE, cannot download: " + url);
+               }
+               
                tracer.trace("Download: " + url);
 
                URLConnection conn = openConnectionWithCookies(url, currentReferer,