Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions modules/gathering/src/main/GatheringJson.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package lila.gathering

import play.api.libs.json.*
import chess.format.Fen
import lila.common.Json.given

object GatheringJson:

def position(fen: Fen.Standard): JsObject =
Thematic.byFen(fen) match
case Some(pos) =>
Json
.obj(
"eco" -> pos.eco,
"name" -> pos.name,
"fen" -> pos.fen,
"url" -> pos.url
)
case None =>
Json
.obj(
"name" -> "Custom position",
"fen" -> fen
)
3 changes: 3 additions & 0 deletions modules/swiss/src/main/SwissJson.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package lila.swiss

import chess.format.Fen
import play.api.i18n.Lang
import play.api.libs.json.*

Expand All @@ -9,6 +10,7 @@ import lila.core.socket.SocketVersion
import lila.db.dsl.{ *, given }
import lila.gathering.Condition.WithVerdicts
import lila.gathering.GreatPlayer
import lila.gathering.GatheringJson.*
import lila.quote.Quote.given

final class SwissJson(
Expand Down Expand Up @@ -179,6 +181,7 @@ object SwissJson:
})
.add("isRecentlyFinished" -> swiss.isRecentlyFinished)
.add("password" -> swiss.settings.password.isDefined)
.add("position" -> swiss.settings.position.map(fullFen => position(fullFen.opening)))

private[swiss] def playerJson(swiss: Swiss, view: SwissPlayer.View): JsObject =
playerJsonBase(view, performance = false) ++ Json
Expand Down
3 changes: 2 additions & 1 deletion modules/tournament/src/main/ApiJsonView.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import lila.common.Json.given
import lila.core.i18n.Translate
import lila.gathering.Condition
import lila.gathering.ConditionHandlers.JSONHandlers.given
import lila.gathering.GatheringJson.*
import lila.rating.PerfType

final class ApiJsonView(lightUserApi: lila.core.user.LightUserApi)(using Executor):
Expand Down Expand Up @@ -63,7 +64,7 @@ final class ApiJsonView(lightUserApi: lila.core.user.LightUserApi)(using Executo
.add("onlyTitled", tour.conditions.titled.isDefined)
.add("teamMember", tour.conditions.teamMember.map(_.teamId))
.add("private", tour.isPrivate)
.add("position", tour.position.map(positionJson))
.add("position", tour.position.map(position))
.add("schedule", tour.schedule.map(scheduleJson))
.add(
"teamBattle",
Expand Down
20 changes: 2 additions & 18 deletions modules/tournament/src/main/JsonView.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import lila.core.i18n.Translate
import lila.core.socket.SocketVersion
import lila.core.user.LightUserApi
import lila.gathering.{ Condition, ConditionHandlers, GreatPlayer }
import lila.gathering.GatheringJson.*
import lila.memo.CacheApi.*
import lila.memo.SettingStore
import lila.rating.PerfType
Expand Down Expand Up @@ -114,7 +115,7 @@ final class JsonView(
.add("spotlight" -> tour.spotlight)
.add("berserkable" -> tour.berserkable)
.add("noStreak" -> tour.noStreak)
.add("position" -> tour.position.ifTrue(full).map(positionJson))
.add("position" -> tour.position.ifTrue(full).map(position))
.add("verdicts" -> verdicts.map(verdictsFor(_, tour.perfType)))
.add("schedule" -> tour.schedule.map(scheduleJson))
.add("private" -> tour.isPrivate)
Expand Down Expand Up @@ -558,23 +559,6 @@ object JsonView:
"increment" -> clock.incrementSeconds
)

private[tournament] def positionJson(fen: Fen.Standard): JsObject =
lila.gathering.Thematic.byFen(fen) match
case Some(pos) =>
Json
.obj(
"eco" -> pos.eco,
"name" -> pos.name,
"fen" -> pos.fen,
"url" -> pos.url
)
case None =>
Json
.obj(
"name" -> "Custom position",
"fen" -> fen
)

private[tournament] given OWrites[Spotlight] = OWrites: s =>
Json
.obj("headline" -> s.headline)
Expand Down