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
7 import javax.inject.Inject
10 * [ImageLoader] implementation that uses a simple Guava [com.google.common.cache.Cache].
12 class DefaultImageLoader @Inject constructor(private val freenetInterface: FreenetInterface) : ImageLoader {
14 private val imageCache = CacheBuilder.newBuilder().build<String, LoadedImage>()
15 private val callback = object : FreenetInterface.BackgroundFetchCallback {
16 override fun loaded(uri: FreenetURI, mimeType: String, data: ByteArray) {
17 if (!mimeType.startsWith("image/")) {
20 val image = ByteArrayInputStream(data).use {
23 val loadedImage = LoadedImage(uri.toString(), mimeType, image.width, image.height)
24 imageCache.get(uri.toString()) { loadedImage }
27 override fun failed(uri: FreenetURI) {
31 override fun toLoadedImage(link: String): LoadedImage? {
32 imageCache.getIfPresent(link)?.run {
35 freenetInterface.startFetch(FreenetURI(link), callback)