override fun shouldCancel(uri: FreenetURI, mimeType: String, size: Long): Boolean {
if (size > 2097152) {
logger.fine { "Canceling download of $uri because it’s > 2 MiB." }
- rejectedElements += uri.toString() to RejectionReason.SizeTooLarge
+ rejectedElements[uri.toString()] = Rejected(RejectionReason.SizeTooLarge, size)
return true
}
if (!mimeType.startsWith("image/") && !mimeType.startsWith("text/html")) {
logger.fine { "Canceling download of $uri because of its MIME type, $mimeType." }
- rejectedElements += uri.toString() to RejectionReason.InvalidMediaType
+ rejectedElements[uri.toString()] = Rejected(RejectionReason.InvalidMediaType, mimeType)
return true
}
return false
val loadedElements: Set<LinkedElement>
get() = elementCache.asMap().values.toSet()
- val rejectedElements: Map<String, RejectionReason>
+ val rejectedElements: Map<String, Rejected>
field = mutableMapOf()
val failedElements: Set<String>
}
+ data class Rejected(val reason: RejectionReason, val data: Any)
+
}
private fun String.decode() = try { URLDecoder.decode(this, "UTF-8")!! } catch (e: RuntimeException) { freenet.support.Logger.error(DefaultElementLoader::class.java, "Could not decode %s!".format(this), e); throw e }
import java.util.logging.LogRecord
import java.util.logging.Logger
import kotlin.math.min
+import net.pterodactylus.sone.core.DefaultElementLoader.Rejected
import net.pterodactylus.sone.core.DefaultElementLoader.RejectionReason.InvalidMediaType
import net.pterodactylus.sone.core.DefaultElementLoader.RejectionReason.SizeTooLarge
import net.pterodactylus.sone.core.FreenetInterface.BackgroundFetchCallback
fun `element loader exposes rejected element when media type does not match`() {
runWithCallback("KSK@test") { elementLoader, _, callback, _ ->
callback.shouldCancel(FreenetURI("KSK@test"), "application/x-test-data", 1234)
- assertThat(elementLoader.rejectedElements, hasEntry("KSK@test", InvalidMediaType))
+ assertThat(elementLoader.rejectedElements, hasEntry("KSK@test", Rejected(InvalidMediaType, "application/x-test-data")))
}
}
fun `element loader exposes rejected element when data is too large`() {
runWithCallback("KSK@test") { elementLoader, _, callback, _ ->
callback.shouldCancel(FreenetURI("KSK@test"), "image/png", 12345678)
- assertThat(elementLoader.rejectedElements, hasEntry("KSK@test", SizeTooLarge))
+ assertThat(elementLoader.rejectedElements, hasEntry("KSK@test", Rejected(SizeTooLarge, 12345678L)))
}
}