X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2FDataLoader.java;h=abc958501a9fcf04e80be952de2c8ec92e59b6b9;hb=e427985713a58ca5b74be650befb142be59dc960;hp=222c61463c815e8000b6e491fe0234598071a05b;hpb=16a81ef7656c5c692fb831927e75edde25dd77a0;p=nikiroo-utils.git diff --git a/src/be/nikiroo/fanfix/DataLoader.java b/src/be/nikiroo/fanfix/DataLoader.java index 222c614..abc9585 100644 --- a/src/be/nikiroo/fanfix/DataLoader.java +++ b/src/be/nikiroo/fanfix/DataLoader.java @@ -9,9 +9,11 @@ import java.util.Map; import be.nikiroo.fanfix.bundles.Config; import be.nikiroo.fanfix.supported.BasicSupport; import be.nikiroo.utils.Cache; +import be.nikiroo.utils.CacheMemory; import be.nikiroo.utils.Downloader; import be.nikiroo.utils.Image; import be.nikiroo.utils.ImageUtils; +import be.nikiroo.utils.TraceHandler; /** * This cache will manage Internet (and local) downloads, as well as put the @@ -23,8 +25,9 @@ import be.nikiroo.utils.ImageUtils; * @author niki */ public class DataLoader { - private Cache cache; private Downloader downloader; + private Downloader downloaderNoCache; + private Cache cache; /** * Create a new {@link DataLoader} object. @@ -47,15 +50,47 @@ public class DataLoader { */ public DataLoader(File dir, String UA, int hoursChanging, int hoursStable) throws IOException { - cache = new Cache(dir, hoursChanging, hoursStable); - cache.setTraceHandler(Instance.getTraceHandler()); + downloader = new Downloader(UA, new Cache(dir, hoursChanging, + hoursStable)); + downloaderNoCache = new Downloader(UA); + + cache = downloader.getCache(); + } + + /** + * Create a new {@link DataLoader} object without disk cache (will keep a + * memory cache for manual cache operations). + * + * @param UA + * the User-Agent to use to download the resources + */ + public DataLoader(String UA) { downloader = new Downloader(UA); - downloader.setTraceHandler(Instance.getTraceHandler()); + downloaderNoCache = downloader; + cache = new CacheMemory(); + } + + /** + * The traces handler for this {@link Cache}. + * + * @param tracer + * the new traces handler + */ + public void setTraceHandler(TraceHandler tracer) { + downloader.setTraceHandler(tracer); + downloaderNoCache.setTraceHandler(tracer); + cache.setTraceHandler(tracer); + if (downloader.getCache() != null) { + downloader.getCache().setTraceHandler(tracer); + } + } /** * Open a resource (will load it from the cache if possible, or save it into * the cache after downloading if not). + *
+ * The cached resource will be assimilated to the given original {@link URL} * * @param url * the resource to open @@ -71,8 +106,7 @@ public class DataLoader { */ public InputStream open(URL url, BasicSupport support, boolean stable) throws IOException { - // MUST NOT return null - return open(url, support, stable, url); + return open(url, url, support, stable, null, null, null); } /** @@ -83,60 +117,71 @@ public class DataLoader { * * @param url * the resource to open + * @param originalUrl + * the original {@link URL} before any redirection occurs, which + * is also used for the cache ID if needed (so we can retrieve + * the content with this URL if needed) * @param support * the support to use to download the resource * @param stable * TRUE for more stable resources, FALSE when they often change - * @param originalUrl - * the original {@link URL} used to locate the cached resource * * @return the opened resource, NOT NULL * * @throws IOException * in case of I/O error */ - public InputStream open(URL url, BasicSupport support, boolean stable, - URL originalUrl) throws IOException { - // MUST NOT return null - try { - InputStream in = cache.load(originalUrl, false, stable); - Instance.getTraceHandler().trace( - "Cache " + (in != null ? "hit" : "miss") + ": " + url); - - if (in == null) { - try { - in = openNoCache(url, support, null, null, null); - cache.save(in, originalUrl); - // ..But we want a resetable stream - in.close(); - in = cache.load(originalUrl, false, stable); - } catch (IOException e) { - throw new IOException("Cannot save the url: " - + (url == null ? "null" : url.toString()), e); - } - } - - return in; - } catch (IOException e) { - throw new IOException("Cannot open the url: " - + (url == null ? "null" : url.toString()), e); - } + public InputStream open(URL url, URL originalUrl, BasicSupport support, + boolean stable) throws IOException { + return open(url, originalUrl, support, stable, null, null, null); } /** - * Open the given {@link URL} without using the cache, but still update the - * cookies. + * Open a resource (will load it from the cache if possible, or save it into + * the cache after downloading if not). + *
+ * The cached resource will be assimilated to the given original {@link URL}
*
* @param url
- * the {@link URL} to open
+ * the resource to open
+ * @param originalUrl
+ * the original {@link URL} before any redirection occurs, which
+ * is also used for the cache ID if needed (so we can retrieve
+ * the content with this URL if needed)
+ * @param support
+ * the support to use to download the resource
+ * @param stable
+ * TRUE for more stable resources, FALSE when they often change
+ * @param postParams
+ * the POST parameters
+ * @param getParams
+ * the GET parameters (priority over POST)
+ * @param oauth
+ * OAuth authorization (aka, "bearer XXXXXXX")
*
- * @return the {@link InputStream} of the opened page
+ * @return the opened resource, NOT NULL
*
* @throws IOException
* in case of I/O error
*/
- public InputStream openNoCache(URL url) throws IOException {
- return downloader.open(url);
+ public InputStream open(URL url, URL originalUrl, BasicSupport support,
+ boolean stable, Map