src/main/kotlin/de/uapcore/lightpit/viewmodel/Issues.kt

changeset 312
b7554a6ef430
parent 311
bf67e0ff7131
child 314
8a8b1c5d168b
--- 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<IssueStatus> = evalEnum(http, "s")
+    val status: List<IssueStatus> = evalEnum(http, "s") { issueStatusOf(IssueStatusPhase(it)) }
     val category: List<IssueCategory> = evalEnum(http, "c")
     val assignee: List<Int> = evalInts(http, "u")
 
@@ -258,18 +258,29 @@
         return http.session.getAttribute(name) != null
     }
 
-    private inline fun <reified T : Enum<T>> evalEnum(http: HttpRequest, prefix: String): List<T> {
+    private inline fun <reified T : Enum<T>> evalEnum(
+        http: HttpRequest,
+        prefix: String,
+        categorizer: ((Int) -> List<T>) = { emptyList() }
+    ): List<T> {
         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<T>(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<T>(it))
+                        } catch (_: IllegalArgumentException) {
+                            // simply skip bogus enums
+                            emptyList()
+                        }
                     }
                 }
             if (list.isEmpty()) {

mercurial