@@ -3,6 +3,7 @@ package com.chattriggers.website.api
33import com.fasterxml.jackson.core.Version
44import io.javalin.apibuilder.ApiBuilder.get
55import io.javalin.http.Context
6+ import kotlinx.serialization.json.Json
67import java.io.File
78
89fun versionRoutes () {
@@ -17,11 +18,21 @@ var lastVersionsCheckTime = System.currentTimeMillis()
1718fun getVersions (ctx : Context ) {
1819 if (System .currentTimeMillis() - lastVersionsCheckTime > VERSIONS_CHECK_TIMEOUT ) {
1920 allowedVersions = loadVersions()
20-
2121 lastVersionsCheckTime = System .currentTimeMillis()
2222 }
2323
24- val versions = allowedVersions.groupBy({
24+ // Only consider mod versions which are available for the requested version. The
25+ // frontend uses the value "all" to signify it wants every version
26+ val requestModVersion = ctx.queryParam(" modVersion" ) ? : " 1.8.9"
27+ val versionsToConsider = if (requestModVersion == " all" ) {
28+ allowedVersions.keys
29+ } else {
30+ allowedVersions.filter {(_, values) ->
31+ values.any { it == requestModVersion }
32+ }.keys
33+ }
34+
35+ val versions = versionsToConsider.groupBy({
2536 " ${it.majorVersion} .${it.minorVersion} "
2637 }, { version ->
2738 val snapshot = if (version.isSnapshot) {
@@ -33,8 +44,7 @@ fun getVersions(ctx: Context) {
3344 ctx.status(200 ).json(versions)
3445}
3546
36- private fun loadVersions () = File (VERSIONS_FILE )
37- .readText()
38- .split(" \n " )
39- .filter { it.isNotBlank() }
40- .map { it.trim().toVersion() }
47+ private fun loadVersions (): Map <Version , List <String >> {
48+ return Json .decodeFromString<Map <String , List <String >>>(File (VERSIONS_FILE ).readText())
49+ .mapKeys { it.key.toVersion() }
50+ }
0 commit comments