diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 898262946..d729cf4fd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,7 @@ [versions] accompanistAdaptive = "0.37.3" cachemapVersion = "0.2.4" +comDitchoomBufferCompression = "2.1.0" composeMultiplatform = "1.9.3" activityCompose = "1.12.2" agp = "8.13.2" @@ -118,6 +119,7 @@ coil-compose = { group = "io.coil-kt.coil3", name = "coil-compose", version.ref coil-gif = { group = "io.coil-kt.coil3", name = "coil-gif", version.ref = "coil" } coil-svg = { group = "io.coil-kt.coil3", name = "coil-svg", version.ref = "coil" } coil-okhttp = { group = "io.coil-kt.coil3", name = "coil-network-okhttp", version.ref = "coil" } +com-ditchoom-buffer-compression = { module = "com.ditchoom:buffer-compression", version.ref = "comDitchoomBufferCompression" } drfonfon-geohash = { group = "com.github.drfonfon", name = "android-kotlin-geohash", version.ref = "androidKotlinGeohash" } firebase-bom = { group = "com.google.firebase", name = "firebase-bom", version.ref = "firebaseBom" } firebase-messaging = { group = "com.google.firebase", name = "firebase-messaging" } diff --git a/quartz/build.gradle.kts b/quartz/build.gradle.kts index a1c2b00c0..27c80e4e8 100644 --- a/quartz/build.gradle.kts +++ b/quartz/build.gradle.kts @@ -252,6 +252,7 @@ kotlin { dependencies { implementation(libs.charlietap.cachemap) implementation(libs.net.thauvin.erik.urlencoder.lib) + implementation(libs.com.ditchoom.buffer.compression) } } diff --git a/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/GZip.ios.kt b/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/GZip.ios.kt index d8e12849b..a1efabe67 100644 --- a/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/GZip.ios.kt +++ b/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/GZip.ios.kt @@ -20,12 +20,29 @@ */ package com.vitorpamplona.quartz.utils +import com.ditchoom.buffer.PlatformBuffer +import com.ditchoom.buffer.ReadBuffer +import com.ditchoom.buffer.compression.CompressionAlgorithm +import com.ditchoom.buffer.compression.getOrThrow +import com.ditchoom.buffer.toByteArray +import com.ditchoom.buffer.toReadBuffer +import com.ditchoom.buffer.wrap +import com.ditchoom.buffer.compression.compress as compressData +import com.ditchoom.buffer.compression.decompress as decompressData + actual object GZip { actual fun compress(content: String): ByteArray { - TODO("Not yet implemented") + val contentBuffer = content.toReadBuffer() + val compressedContent = compressData(contentBuffer, algorithm = CompressionAlgorithm.Gzip).getOrThrow().toByteArray() + return compressedContent + } actual fun decompress(content: ByteArray): String { - TODO("Not yet implemented") + val contentBuffer = PlatformBuffer.wrap(content) + val decompressedContentBuffer = decompressData(contentBuffer, algorithm = CompressionAlgorithm.Gzip) + .getOrThrow() + val content = decompressedContentBuffer.toByteArray().decodeToString() + return content } } diff --git a/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/URLs.ios.kt b/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/URLs.ios.kt index 5dfc876ad..e0b584e6e 100644 --- a/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/URLs.ios.kt +++ b/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/URLs.ios.kt @@ -23,9 +23,9 @@ package com.vitorpamplona.quartz.utils import kotlinx.cinterop.ExperimentalForeignApi import swiftbridge.UrlDetector +@Suppress("UNCHECKED_CAST") @OptIn(ExperimentalForeignApi::class) actual fun fastFindURLs(text: String): List { val detectorInstance = UrlDetector() return detectorInstance.findURLsWithText(text) as List -// TODO("Not yet implemented") }