Added adding tracks.

This commit is contained in:
yenon 2023-11-10 18:02:49 +01:00
parent 6915315192
commit dbf9d16caa
3 changed files with 45 additions and 4 deletions

2
.gitignore vendored
View File

@ -181,3 +181,5 @@ gradle-app.setting
*.hprof
# End of https://www.toptal.com/developers/gitignore/api/intellij,java,gradle,kotlin
data.json

View File

@ -71,7 +71,12 @@ private suspend fun PipelineContext<Unit,ApplicationCall>.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()
}
}

View File

@ -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<Unit, ApplicationCall>.trackPage(leaderboard: Velocidrone.Leaderboard){
@ -40,3 +57,20 @@ private suspend fun PipelineContext<Unit, ApplicationCall>.trackPage(leaderboard
}
}
}
private suspend fun PipelineContext<Unit, ApplicationCall>.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()
}
}
}