1 package net.pterodactylus.sone.core
3 import com.google.common.cache.CacheBuilder
4 import freenet.keys.FreenetURI
5 import java.io.ByteArrayInputStream
6 import javax.imageio.ImageIO
9 * [ImageLoader] implementation that uses a simple Guava [com.google.common.cache.Cache].
11 class DefaultImageLoader(private val freenetInterface: FreenetInterface) : ImageLoader {
13 private val imageCache = CacheBuilder.newBuilder().build<String, LoadedImage>()
14 private val callback = object : FreenetInterface.BackgroundFetchCallback {
15 override fun loaded(uri: FreenetURI, mimeType: String, data: ByteArray) {
16 if (!mimeType.startsWith("image/")) {
19 val image = ByteArrayInputStream(data).use {
22 val loadedImage = LoadedImage(uri.toString(), mimeType, image.width, image.height)
23 imageCache.get(uri.toString()) { loadedImage }
26 override fun failed(uri: FreenetURI) {
30 override fun toLoadedImage(link: String): LoadedImage? {
31 imageCache.getIfPresent(link)?.run {
34 freenetInterface.startFetch(FreenetURI(link), callback)