X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2FDownloader.java;h=4191d0aea0da85511e2741c50c2a6c83806f612f;hp=68e4dd73e285a941e3193ac6155d846fea2e8316;hb=HEAD;hpb=59654e2ab1f6d3314eff438bf9e30ed6f32e5e74 diff --git a/src/be/nikiroo/utils/Downloader.java b/src/be/nikiroo/utils/Downloader.java index 68e4dd7..4191d0a 100644 --- a/src/be/nikiroo/utils/Downloader.java +++ b/src/be/nikiroo/utils/Downloader.java @@ -1,6 +1,5 @@ package be.nikiroo.utils; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; @@ -31,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}. @@ -39,7 +39,7 @@ public class Downloader { * the User-Agent to use to download the resources -- note that * some websites require one, some actively blacklist real UAs * like the one from wget, some whitelist a couple of browsers - * only (!) + * only (!) -- can be NULL */ public Downloader(String UA) { this(UA, null); @@ -52,7 +52,7 @@ public class Downloader { * the User-Agent to use to download the resources -- note that * some websites require one, some actively blacklist real UAs * like the one from wget, some whitelist a couple of browsers - * only (!) + * only (!) -- can be NULL * @param cache * the {@link Cache} to use for all access (can be NULL) */ @@ -64,6 +64,32 @@ public class Downloader { setCache(cache); } + + /** + * This {@link Downloader} is forbidden to try and connect to the network. + *

+ * If TRUE, it will only check the cache if any. + *

+ * Default is FALSE. + * + * @return TRUE if offline + */ + public boolean isOffline() { + return offline; + } + + /** + * This {@link Downloader} is forbidden to try and connect to the network. + *

+ * If TRUE, it will only check the cache if any. + *

+ * 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}. @@ -168,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 cookiesValues, Map postParams, @@ -200,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 cookiesValues, Map postParams, @@ -237,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 cookiesValues, Map postParams, @@ -255,6 +281,13 @@ public class Downloader { } } + String protocol = originalUrl == null ? null : originalUrl + .getProtocol(); + if (isOffline() && !"file".equalsIgnoreCase(protocol)) { + 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, @@ -346,8 +379,8 @@ public class Downloader { } if (cache != null) { - String size = conn.getContentLengthLong() < 0 ? "unknown size" - : StringUtils.formatNumber(conn.getContentLengthLong()) + String size = conn.getContentLength() < 0 ? "unknown size" + : StringUtils.formatNumber(conn.getContentLength()) + "bytes"; tracer.trace("Save to cache (" + size + "): " + originalUrl); try { @@ -366,6 +399,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( @@ -395,7 +433,9 @@ public class Downloader { conn.setRequestProperty("Cookie", cookies); } - conn.setRequestProperty("User-Agent", UA); + if (UA != null) { + conn.setRequestProperty("User-Agent", UA); + } conn.setRequestProperty("Accept-Encoding", "gzip"); conn.setRequestProperty("Accept", "*/*"); conn.setRequestProperty("Charset", "utf-8");