Skip to content

Commit cd68d0f

Browse files
committed
perf(sync): Improve PermissionV1 parsing
This increased parsing performance by 3 times on old devices and around 2 times in newer devices
1 parent bb096f0 commit cd68d0f

File tree

3 files changed

+6
-43
lines changed

3 files changed

+6
-43
lines changed

sync/fdroid/src/main/kotlin/com/looker/sync/fdroid/common/IndexConverter.kt

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import com.looker.sync.fdroid.v1.model.IndexV1
55
import com.looker.sync.fdroid.v1.model.Localized
66
import com.looker.sync.fdroid.v1.model.PackageV1
77
import com.looker.sync.fdroid.v1.model.RepoV1
8+
import com.looker.sync.fdroid.v1.model.maxSdk
9+
import com.looker.sync.fdroid.v1.model.name
810
import com.looker.sync.fdroid.v2.model.AntiFeatureV2
911
import com.looker.sync.fdroid.v2.model.CategoryV2
1012
import com.looker.sync.fdroid.v2.model.FeatureV2

sync/fdroid/src/main/kotlin/com/looker/sync/fdroid/common/JsonParser.kt

+1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ import kotlinx.serialization.json.Json
55
val JsonParser = Json {
66
ignoreUnknownKeys = true
77
coerceInputValues = true
8+
isLenient = true
89
}

sync/fdroid/src/main/kotlin/com/looker/sync/fdroid/v1/model/PackageV1.kt

+3-43
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,8 @@ package com.looker.sync.fdroid.v1.model
44
* PackageV1, PermissionV1 are licensed under the GPL 3.0 to FDroid Organization.
55
* */
66

7-
import kotlinx.serialization.KSerializer
87
import kotlinx.serialization.SerialName
98
import kotlinx.serialization.Serializable
10-
import kotlinx.serialization.builtins.serializer
11-
import kotlinx.serialization.descriptors.SerialDescriptor
12-
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
13-
import kotlinx.serialization.descriptors.element
14-
import kotlinx.serialization.encoding.Decoder
15-
import kotlinx.serialization.encoding.Encoder
16-
import kotlinx.serialization.encoding.encodeCollection
17-
import kotlinx.serialization.json.JsonArray
18-
import kotlinx.serialization.json.JsonDecoder
19-
import kotlinx.serialization.json.intOrNull
20-
import kotlinx.serialization.json.jsonArray
21-
import kotlinx.serialization.json.jsonPrimitive
229

2310
@Serializable
2411
data class PackageV1(
@@ -45,36 +32,9 @@ data class PackageV1(
4532
val nativeCode: List<String>? = null,
4633
val features: List<String>? = null,
4734
val antiFeatures: List<String>? = null,
48-
49-
)
50-
51-
@Serializable(PermissionV1Serializer::class)
52-
data class PermissionV1(
53-
val name: String,
54-
val maxSdk: Int? = null,
5535
)
5636

57-
internal class PermissionV1Serializer : KSerializer<PermissionV1> {
58-
59-
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("PermissionV1") {
60-
element<String>("name")
61-
element<Int?>("maxSdk")
62-
}
63-
64-
override fun deserialize(decoder: Decoder): PermissionV1 {
65-
decoder as? JsonDecoder ?: error("Not a JSON")
66-
val array: JsonArray = decoder.decodeJsonElement().jsonArray
67-
require(array.size == 2) { "Permission array is invalid: $array" }
68-
require(array[0].jsonPrimitive.isString) { "Name is not the first element in permission: $array" }
69-
val name: String = array[0].jsonPrimitive.content
70-
val maxSdk: Int? = array[1].jsonPrimitive.intOrNull
71-
return PermissionV1(name, maxSdk)
72-
}
37+
typealias PermissionV1 = Array<String?>
7338

74-
override fun serialize(encoder: Encoder, permission: PermissionV1) {
75-
encoder.encodeCollection(JsonArray.serializer().descriptor, 2) {
76-
encodeStringElement(descriptor, 0, permission.name)
77-
encodeNullableSerializableElement(descriptor, 1, Int.serializer(), permission.maxSdk)
78-
}
79-
}
80-
}
39+
val PermissionV1.name: String get() = first()!!
40+
val PermissionV1.maxSdk: Int? get() = getOrNull(1)?.toInt()

0 commit comments

Comments
 (0)