diff --git a/.gitignore b/.gitignore index 851ec16..8b2bcc2 100644 --- a/.gitignore +++ b/.gitignore @@ -181,3 +181,5 @@ gradle-app.setting *.hprof # End of https://www.toptal.com/developers/gitignore/api/intellij,java,gradle,kotlin + +data.json \ No newline at end of file diff --git a/src/main/java/SearchPage.kt b/src/main/java/SearchPage.kt index 70efbe1..6c6b885 100644 --- a/src/main/java/SearchPage.kt +++ b/src/main/java/SearchPage.kt @@ -71,7 +71,12 @@ private suspend fun PipelineContext.searchResultPage(track trackResults.user_tracks.forEach { tr { td { - a("/track/"+it.id){ + form("/track/" + it.id + "/add") { + submitInput { + value = "Add to race" + } + } + a("/track/" + it.id + "/show") { +it.id.toString() } } diff --git a/src/main/java/TrackPage.kt b/src/main/java/TrackPage.kt index 0f94e45..9785d0a 100644 --- a/src/main/java/TrackPage.kt +++ b/src/main/java/TrackPage.kt @@ -1,18 +1,35 @@ import io.ktor.server.application.* import io.ktor.server.html.* +import io.ktor.server.request.* import io.ktor.server.routing.* import io.ktor.util.pipeline.* import kotlinx.html.* +import java.net.URLDecoder +import java.net.URLEncoder fun Routing.trackPage() { - get("/track/{id}"){ - call.parameters.get("id")?.toLong()?.let { - val result = Velocidrone.getLeaderboardForId(it) + get("/track/{id}/show") { + call.parameters["id"]?.toLong()?.let { trackId -> + val result = Velocidrone.getLeaderboardForId(trackId) result.getOrNull()?.let { trackPage(it) } } } + get("/track/{id}/add") { + call.parameters["id"]?.toLong()?.let { trackId -> + addTrackPage(trackId) + } + } + post("/track/{id}/add") { + call.parameters["id"]?.toLong()?.let { trackId -> + val param = call.receiveParameters() + param["race"]?.let { raceString -> + val decoded = URLDecoder.decode(raceString, Charsets.UTF_8) + RaceHolder.races.find { it.name == decoded }?.addTrack(trackId) + } + } + } } private suspend fun PipelineContext.trackPage(leaderboard: Velocidrone.Leaderboard){ @@ -39,4 +56,21 @@ private suspend fun PipelineContext.trackPage(leaderboard } } } +} + +private suspend fun PipelineContext.addTrackPage(trackId: Long) { + respondThemedHtml("Add new track") { + form("/track/$trackId/add", encType = FormEncType.applicationXWwwFormUrlEncoded, method = FormMethod.post) { + select { + name = "race" + RaceHolder.races.forEach { race -> + option { + value = URLEncoder.encode(race.name, Charsets.UTF_8) + +race.name + } + } + } + submitInput() + } + } } \ No newline at end of file