From: David ‘Bombe’ Roden Date: Sat, 3 Oct 2026 13:32:44 +0000 (+0200) Subject: 🧑‍💻 Include reason for rejection in rejection object X-Git-Tag: v83^2~5^2~12 X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=a7b569c5739650f829b6097ee006c0f2ac1018ab;p=Sone.git 🧑‍💻 Include reason for rejection in rejection object --- diff --git a/src/main/kotlin/net/pterodactylus/sone/core/DefaultElementLoader.kt b/src/main/kotlin/net/pterodactylus/sone/core/DefaultElementLoader.kt index 7615776..72e9c78 100644 --- a/src/main/kotlin/net/pterodactylus/sone/core/DefaultElementLoader.kt +++ b/src/main/kotlin/net/pterodactylus/sone/core/DefaultElementLoader.kt @@ -32,12 +32,12 @@ class DefaultElementLoader(private val freenetInterface: FreenetInterface, ticke 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 @@ -111,7 +111,7 @@ class DefaultElementLoader(private val freenetInterface: FreenetInterface, ticke val loadedElements: Set get() = elementCache.asMap().values.toSet() - val rejectedElements: Map + val rejectedElements: Map field = mutableMapOf() val failedElements: Set @@ -124,6 +124,8 @@ class DefaultElementLoader(private val freenetInterface: FreenetInterface, ticke } + 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 } diff --git a/src/test/kotlin/net/pterodactylus/sone/core/DefaultElementLoaderTest.kt b/src/test/kotlin/net/pterodactylus/sone/core/DefaultElementLoaderTest.kt index eb9ee15..bc2f177 100644 --- a/src/test/kotlin/net/pterodactylus/sone/core/DefaultElementLoaderTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/core/DefaultElementLoaderTest.kt @@ -10,6 +10,7 @@ import java.util.logging.Level.ALL 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 @@ -263,7 +264,7 @@ class DefaultElementLoaderTest { 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"))) } } @@ -271,7 +272,7 @@ class DefaultElementLoaderTest { 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))) } }