KotlinPublicationScriptsBui.../core/src/commonMain/kotlin/dev/inmo/kmppscriptbuilder/core/models/License.kt

50 lines
1.8 KiB
Kotlin
Raw Normal View History

2021-03-01 14:17:06 +00:00
package dev.inmo.kmppscriptbuilder.core.models
2021-03-01 14:17:06 +00:00
import dev.inmo.kmppscriptbuilder.core.utils.serialFormat
import io.ktor.client.HttpClient
import io.ktor.client.request.get
import io.ktor.client.request.url
2022-11-10 17:48:59 +00:00
import io.ktor.client.statement.bodyAsText
import kotlinx.serialization.Serializable
import kotlinx.serialization.builtins.MapSerializer
import kotlinx.serialization.builtins.serializer
@Serializable
data class License(
val id: String,
val title: String,
val url: String? = null
)
private val commonLicensesListDeserializer = MapSerializer(String.serializer(), License.serializer())
private var licenses: Map<String, License>? = null
suspend fun HttpClient.getLicenses(): Map<String, License> {
2022-11-10 17:48:59 +00:00
val answer = get {
url("https://licenses.opendefinition.org/licenses/groups/all.json")
2022-11-10 17:48:59 +00:00
}.bodyAsText()
return serialFormat.decodeFromString(commonLicensesListDeserializer, answer).also { gotLicenses ->
licenses = gotLicenses
}
}
suspend fun HttpClient.searchLicense(name: String): List<License> {
val licenses = licenses ?: getLicenses()
2021-09-04 13:34:24 +00:00
val lowerCase = name.lowercase()
val upperCase = name.uppercase()
return licenses.values.filter {
2021-09-04 13:34:24 +00:00
it.title.lowercase().contains(lowerCase) || it.title.uppercase().contains(upperCase) || it.title.contains(name)
|| it.id.lowercase().contains(lowerCase) || it.id.uppercase().contains(upperCase) || it.id.contains(name)
}
}
fun Map<String, License>.searchLicense(name: String): List<License> {
2021-09-04 13:34:24 +00:00
val lowerCase = name.lowercase()
val upperCase = name.uppercase()
return values.filter {
2021-09-04 13:34:24 +00:00
it.title.lowercase().contains(lowerCase) || it.title.uppercase().contains(upperCase) || it.title.contains(name)
|| it.id.lowercase().contains(lowerCase) || it.id.uppercase().contains(upperCase) || it.id.contains(name)
}
}