diff -r bf67e0ff7131 -r b7554a6ef430 src/main/kotlin/de/uapcore/lightpit/viewmodel/Issues.kt --- a/src/main/kotlin/de/uapcore/lightpit/viewmodel/Issues.kt Mon Aug 05 18:40:47 2024 +0200 +++ b/src/main/kotlin/de/uapcore/lightpit/viewmodel/Issues.kt Mon Aug 05 19:17:36 2024 +0200 @@ -220,7 +220,7 @@ val includeDone: Boolean = evalFlag(http, flagIncludeDone) val onlyMine: Boolean = evalFlag(http, flagMine) val onlyBlocker: Boolean = evalFlag(http, flagBlocker) - val status: List = evalEnum(http, "s") + val status: List = evalEnum(http, "s") { issueStatusOf(IssueStatusPhase(it)) } val category: List = evalEnum(http, "c") val assignee: List = evalInts(http, "u") @@ -258,18 +258,29 @@ return http.session.getAttribute(name) != null } - private inline fun > evalEnum(http: HttpRequest, prefix: String): List { + private inline fun > evalEnum( + http: HttpRequest, + prefix: String, + categorizer: ((Int) -> List) = { emptyList() } + ): List { val sattr = "f.${prefix}" val param = http.paramArray("filter") if (param.isNotEmpty()) { val list = param.filter { it.startsWith("${prefix}.") } .map { it.substring(prefix.length + 1) } - .map { - try { - // quick and very dirty validation - enumValueOf(it) - } catch (_: IllegalArgumentException) { - // skip + .flatMap { + // try resolving as category + val cat = it.toIntOrNull() + if (cat != null) { + categorizer(cat) + } else { + try { + // quick and very dirty validation + listOf(enumValueOf(it)) + } catch (_: IllegalArgumentException) { + // simply skip bogus enums + emptyList() + } } } if (list.isEmpty()) {