provide chat lines to mobile API

pull/119/head
Thibault Duplessis 2014-08-16 17:02:50 +02:00
parent 435d227e3c
commit add4809404
6 changed files with 35 additions and 71 deletions

View File

@ -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))
}
)
}
}

View File

@ -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
}
)
}

View File

@ -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
}
```

View 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
}
```

View File

@ -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

View File

@ -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)