diff --git a/.idea/dictionaries/sven.xml b/.idea/dictionaries/sven.xml
index 59599970..841ed08c 100644
--- a/.idea/dictionaries/sven.xml
+++ b/.idea/dictionaries/sven.xml
@@ -6,6 +6,7 @@
constraintlayout
gitversioner
jakewharton
+ jodel
kotest
léon
mikepenz
@@ -21,4 +22,4 @@
welsch
-
+
\ No newline at end of file
diff --git a/app/src/main/kotlin/com/svenjacobs/app/leon/startup/ContainerInitializer.kt b/app/src/main/kotlin/com/svenjacobs/app/leon/startup/ContainerInitializer.kt
index 6b81a2d4..8252c811 100644
--- a/app/src/main/kotlin/com/svenjacobs/app/leon/startup/ContainerInitializer.kt
+++ b/app/src/main/kotlin/com/svenjacobs/app/leon/startup/ContainerInitializer.kt
@@ -41,6 +41,7 @@ import com.svenjacobs.app.leon.core.domain.sanitizer.google.GoogleSearchSanitize
import com.svenjacobs.app.leon.core.domain.sanitizer.heise.HeiseSanitizer
import com.svenjacobs.app.leon.core.domain.sanitizer.instagram.InstagramSanitizer
import com.svenjacobs.app.leon.core.domain.sanitizer.jdoqocy.JdoqocySanitizer
+import com.svenjacobs.app.leon.core.domain.sanitizer.jodel.JodelSanitizer
import com.svenjacobs.app.leon.core.domain.sanitizer.lazada.LazadaSanitizer
import com.svenjacobs.app.leon.core.domain.sanitizer.linksynergy.LinkSynergySanitizer
import com.svenjacobs.app.leon.core.domain.sanitizer.netflix.NetflixSanitizer
@@ -95,6 +96,7 @@ class ContainerInitializer : DistinctInitializer {
HeiseSanitizer(),
InstagramSanitizer(),
JdoqocySanitizer(),
+ JodelSanitizer(),
LazadaSanitizer(),
LinkSynergySanitizer(),
NetflixSanitizer(),
diff --git a/core-domain/build.gradle.kts b/core-domain/build.gradle.kts
index c9da58a9..57757f47 100644
--- a/core-domain/build.gradle.kts
+++ b/core-domain/build.gradle.kts
@@ -26,4 +26,5 @@ android {
dependencies {
api(libs.kotlinx.collections.immutable)
+ api(libs.kotlinx.serialization.json)
}
diff --git a/core-domain/src/main/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/jodel/JodelSanitizer.kt b/core-domain/src/main/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/jodel/JodelSanitizer.kt
new file mode 100644
index 00000000..bf20d4e1
--- /dev/null
+++ b/core-domain/src/main/kotlin/com/svenjacobs/app/leon/core/domain/sanitizer/jodel/JodelSanitizer.kt
@@ -0,0 +1,34 @@
+package com.svenjacobs.app.leon.core.domain.sanitizer.jodel
+
+import android.content.Context
+import com.svenjacobs.app.leon.core.common.url.decodeUrl
+import com.svenjacobs.app.leon.core.domain.R
+import com.svenjacobs.app.leon.core.domain.sanitizer.Sanitizer
+import com.svenjacobs.app.leon.core.domain.sanitizer.SanitizerId
+import kotlin.io.encoding.Base64
+import kotlin.io.encoding.ExperimentalEncodingApi
+import kotlinx.serialization.json.Json
+
+class JodelSanitizer : Sanitizer {
+ override val id = SanitizerId("jodel")
+
+ override fun getMetadata(context: Context) = Sanitizer.Metadata(
+ name = context.getString(R.string.sanitizer_jodel_name),
+ )
+
+ @OptIn(ExperimentalEncodingApi::class)
+ override fun invoke(input: String): String {
+ val encoded = URL_REGEX.find(input)?.groupValues?.getOrNull(1) ?: return input
+ val base64Data = decodeUrl(encoded)
+ val jsonString = Base64.Default.decode(base64Data)
+ val jsonMap = Json.decodeFromString