provide chat lines to mobile API
parent
435d227e3c
commit
add4809404
|
@ -70,9 +70,13 @@ object Round extends LilaController with TheftPrevention {
|
|||
},
|
||||
Redirect(routes.Setup.await(fullId)).fuccess
|
||||
),
|
||||
api = apiVersion => Env.round version pov.gameId map { v =>
|
||||
Ok(Env.round.jsonView.playerJson(pov, v, ctx.pref, apiVersion))
|
||||
}
|
||||
api = apiVersion => (Env.round version pov.gameId) zip
|
||||
(pov.game.hasChat optionFu {
|
||||
Env.chat.api.playerChat find pov.gameId map (_ forUser ctx.me)
|
||||
}) map {
|
||||
case (v, chat) =>
|
||||
Ok(Env.round.jsonView.playerJson(pov, v, ctx.pref, chat, apiVersion))
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -178,7 +178,7 @@ object Setup extends LilaController with TheftPrevention with play.api.http.Cont
|
|||
case (pov, call) => negotiate(
|
||||
html = fuccess(redirectPov(pov, call)),
|
||||
api = apiVersion => Env.round version pov.gameId map { v =>
|
||||
Created(Env.round.jsonView.playerJson(pov, v, ctx.pref, apiVersion)) as JSON
|
||||
Created(Env.round.jsonView.playerJson(pov, v, ctx.pref, chat = none, apiVersion)) as JSON
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
@ -13,69 +13,7 @@ http --form POST en.l.org/setup/ai variant=1 clock=false time=60 increment=60 le
|
|||
Response: `201 CREATED`
|
||||
```javascript
|
||||
{
|
||||
"game": {
|
||||
"id": "39b12Ikl",
|
||||
"variant": "chess960", // standard/chess960/fromPosition/kingOfTheHill/threeCheck
|
||||
"speed": "blitz", // bullet|blitz|classical|unlimited
|
||||
"perf": "chess960", // bullet|blitz|classical|chess960|kingOfTheHill|threeCheck
|
||||
"rated": true,
|
||||
"clock": false,
|
||||
"clockRunning": false,
|
||||
"fen": "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
|
||||
"finished": false,
|
||||
"lastMove": null,
|
||||
"moves": "",
|
||||
"player": "white",
|
||||
"started": true,
|
||||
"startedAtTurn": 0,
|
||||
"turns": 0
|
||||
},
|
||||
"clock": {
|
||||
// all durations are expressed in seconds
|
||||
"initial": 300, // initial time of the clock, here 5 minutes
|
||||
"increment": 8, // fisher increment
|
||||
"black": 36.0, // current time left for black
|
||||
"white": 78.0, // current time left for white
|
||||
"emerg": 30 // critical threshold
|
||||
},
|
||||
"player": {
|
||||
"color": "white",
|
||||
"id": "ErMy",
|
||||
"spectator": false,
|
||||
"version": 0
|
||||
},
|
||||
"opponent": {
|
||||
"color": "black",
|
||||
"ai": false,
|
||||
"user_id": "ozzie" // request more info at /api/user/ozzie
|
||||
},
|
||||
"possibleMoves": { // list of moves you can play. Empty if not your turn to play.
|
||||
"a2": "a3a4", // from a2, you can go on a3 or a4.
|
||||
"b1": "a3c3",
|
||||
"b2": "b3b4",
|
||||
"c2": "c3c4",
|
||||
"d2": "d3d4",
|
||||
"e2": "e3e4",
|
||||
"f2": "f3f4",
|
||||
"g1": "f3h3",
|
||||
"g2": "g3g4",
|
||||
"h2": "h3h4"
|
||||
},
|
||||
"pref": {
|
||||
"animationDelay": 240,
|
||||
"autoQueen": 2,
|
||||
"autoThreefold": 2,
|
||||
"clockBar": true,
|
||||
"clockTenths": true,
|
||||
"enablePremove": true
|
||||
},
|
||||
"url": {
|
||||
"pov": "/39b12IklErMy",
|
||||
"end": "/39b12IklErMy/end",
|
||||
"socket": "/39b12IklErMy/socket/v1",
|
||||
"table": "/39b12IklErMy/table"
|
||||
},
|
||||
"tournamentId": null
|
||||
// see document format in the play.md doc file
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -76,6 +76,18 @@ Response: `200 OK`
|
|||
"socket": "/39b12IklErMy/socket/v1",
|
||||
"table": "/39b12IklErMy/table"
|
||||
},
|
||||
"chat": {
|
||||
"lines": [
|
||||
{
|
||||
"u": "legend",
|
||||
"t": "Hi there, I'm logged in, my name is legend"
|
||||
},
|
||||
{
|
||||
"c": "black",
|
||||
"t": "Hello! I'm anonymous, playing with the black pieces"
|
||||
}
|
||||
]
|
||||
},
|
||||
"tournamentId": null
|
||||
}
|
||||
```
|
||||
|
|
|
@ -3,18 +3,18 @@ package lila.round
|
|||
import scala.concurrent.duration._
|
||||
import scala.math.{ min, max, round }
|
||||
|
||||
import play.api.libs.json.Json
|
||||
import play.api.libs.json._
|
||||
|
||||
import lila.common.PimpedJson._
|
||||
import lila.game.{ Pov, Game, PerfPicker }
|
||||
import lila.pref.Pref
|
||||
import lila.common.PimpedJson._
|
||||
|
||||
import chess.format.Forsyth
|
||||
import chess.{ Color, Clock }
|
||||
|
||||
final class JsonView(baseAnimationDelay: Duration) {
|
||||
|
||||
def playerJson(pov: Pov, version: Int, pref: Pref, apiVersion: Int) = {
|
||||
def playerJson(pov: Pov, version: Int, pref: Pref, chat: Option[lila.chat.MixedChat], apiVersion: Int) = {
|
||||
import pov._
|
||||
Json.obj(
|
||||
"game" -> Json.obj(
|
||||
|
@ -65,6 +65,16 @@ final class JsonView(baseAnimationDelay: Duration) {
|
|||
"clockBar" -> pref.clockBar,
|
||||
"enablePremove" -> pref.premove
|
||||
),
|
||||
"chat" -> chat.map { c =>
|
||||
JsArray(c.lines map {
|
||||
case lila.chat.UserLine(username, text, _) => Json.obj(
|
||||
"u" -> username,
|
||||
"t" -> text)
|
||||
case lila.chat.PlayerLine(color, text) => Json.obj(
|
||||
"c" -> color.name,
|
||||
"t" -> text)
|
||||
})
|
||||
},
|
||||
"possibleMoves" -> possibleMoves(pov),
|
||||
"tournamentId" -> game.tournamentId,
|
||||
"poolId" -> game.poolId
|
||||
|
|
|
@ -13,7 +13,7 @@ trait RoundHelper {
|
|||
def moretimeSeconds = roundEnv.moretimeSeconds
|
||||
|
||||
def roundPlayerJsData(pov: Pov, version: Int, pref: Pref, apiVersion: Int) =
|
||||
roundEnv.jsonView.playerJson(pov, version, pref, apiVersion)
|
||||
roundEnv.jsonView.playerJson(pov, version, pref, chat = none, apiVersion = apiVersion)
|
||||
|
||||
def roundWatcherJsData(pov: Pov, version: Int, tv: Boolean, pref: Pref) =
|
||||
roundEnv.jsonView.watcherJson(pov, version, tv, pref)
|
||||
|
|
Loading…
Reference in New Issue