package be.nikiroo.fanfix;
+import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
// MUST NOT return null
try {
InputStream in = cache.load(originalUrl, false, stable);
- Instance.trace("Cache " + (in != null ? "hit" : "miss") + ": "
- + url);
+ Instance.getTraceHandler().trace(
+ "Cache " + (in != null ? "hit" : "miss") + ": " + url);
if (in == null) {
try {
public void saveAsImage(URL url, File target) throws IOException {
InputStream in = open(url, null, true);
try {
- ImageIO.write(ImageUtils.fromStream(in), Instance.getConfig()
- .getString(Config.IMAGE_FORMAT_CONTENT).toLowerCase(),
- target);
- } catch (IOException e) {
- throw new IOException("Cannot write image " + url, e);
+ saveAsImage(ImageUtils.fromStream(in), target);
} finally {
in.close();
}
}
+ /**
+ * Save the given resource as an image on disk using the default image
+ * format for content.
+ *
+ * @param image
+ * the resource
+ * @param target
+ * the target file
+ *
+ * @throws IOException
+ * in case of I/O error
+ */
+ public void saveAsImage(BufferedImage image, File target)
+ throws IOException {
+ try {
+ String format = Instance.getConfig()
+ .getString(Config.IMAGE_FORMAT_CONTENT).toLowerCase();
+
+ boolean ok = false;
+ try {
+ ok = ImageIO.write(image, format, target);
+ } catch (IOException e) {
+ ok = false;
+ }
+
+ // Some formats are not reliable
+ // Second change: PNG
+ if (!ok && !format.equals("png")) {
+ ok = ImageIO.write(image, "png", target);
+ }
+
+ if (!ok) {
+ throw new IOException(
+ "Cannot find a writer for this image and format: "
+ + format);
+ }
+ } catch (IOException e) {
+ throw new IOException("Cannot write image to " + target, e);
+ }
+ }
+
/**
* Manually add this item to the cache.
*
return cache.load(uniqueID, true, true);
}
+ /**
+ * Remove the given resource from the cache.
+ *
+ * @param uniqueID
+ * a unique ID used to locate the cached resource
+ *
+ * @return TRUE if it was removed
+ */
+ public boolean removeFromCache(String uniqueID) {
+ return cache.remove(uniqueID);
+ }
+
/**
* Clean the cache (delete the cached items).
*