lila/app/controllers/Dasher.scala

108 lines
3.4 KiB
Scala
Raw Normal View History

2017-05-03 08:22:50 -06:00
package controllers
2017-05-05 04:04:25 -06:00
import play.api.libs.json._
2017-05-03 08:22:50 -06:00
import lila.api.Context
import lila.app._
2017-05-05 04:04:25 -06:00
import lila.common.LightUser.lightUserWrites
2020-03-28 02:28:34 -06:00
import lila.i18n.{ enLang, I18nKeys => trans, I18nLangPicker, LangList }
2017-05-03 08:22:50 -06:00
2019-12-04 16:39:16 -07:00
final class Dasher(env: Env) extends LilaController(env) {
2017-05-03 08:22:50 -06:00
2018-12-17 00:09:52 -07:00
private val translationsBase = List(
2020-02-09 21:40:00 -07:00
trans.networkLagBetweenYouAndLichess,
trans.timeToProcessAMoveOnLichessServer,
trans.sound,
trans.background,
trans.light,
trans.dark,
trans.transparent,
trans.backgroundImageUrl,
trans.boardGeometry,
trans.boardTheme,
trans.boardSize,
trans.pieceSet,
trans.preferences.zenMode
).map(_.key)
2018-12-17 00:09:52 -07:00
private val translationsAnon = List(
2020-02-09 21:40:00 -07:00
trans.signIn,
trans.signUp
).map(_.key) ::: translationsBase
2018-12-17 00:09:52 -07:00
private val translationsAuth = List(
2020-02-09 21:40:00 -07:00
trans.profile,
trans.inbox,
trans.preferences.preferences,
trans.coachManager,
trans.streamerManager,
2020-02-09 21:40:00 -07:00
trans.logOut
).map(_.key) ::: translationsBase
2018-12-17 00:09:52 -07:00
2019-12-13 07:30:20 -07:00
private def translations(implicit ctx: Context) =
lila.i18n.JsDump.keysToObject(
if (ctx.isAnon) translationsAnon else translationsAuth,
ctx.lang
) ++ lila.i18n.JsDump.keysToObject(
// the language settings should never be in a totally foreign language
List(trans.language.key),
if (I18nLangPicker.allFromRequestHeaders(ctx.req).has(ctx.lang)) ctx.lang
else I18nLangPicker.bestFromRequestHeaders(ctx.req) | enLang
)
2017-05-03 08:22:50 -06:00
2020-05-05 22:11:15 -06:00
def get =
Open { implicit ctx =>
negotiate(
html = notFound,
api = _ =>
ctx.me.??(env.streamer.api.isPotentialStreamer) map { isStreamer =>
2020-05-05 22:11:15 -06:00
Ok {
Json.obj(
"user" -> ctx.me.map(_.light),
"lang" -> Json.obj(
"current" -> ctx.lang.code,
"accepted" -> I18nLangPicker.allFromRequestHeaders(ctx.req).map(_.code),
2021-04-14 00:40:52 -06:00
"list" -> LangList.allChoices
2019-12-13 07:30:20 -07:00
),
2020-05-05 22:11:15 -06:00
"sound" -> Json.obj(
"list" -> lila.pref.SoundSet.list.map { set =>
s"${set.key} ${set.name}"
}
2019-12-13 07:30:20 -07:00
),
2020-05-05 22:11:15 -06:00
"background" -> Json.obj(
2020-10-15 07:46:42 -06:00
"current" -> lila.pref.Pref.Bg.asString.get(ctx.pref.bg),
2020-05-05 22:11:15 -06:00
"image" -> ctx.pref.bgImgOrDefault
),
"board" -> Json.obj(
"is3d" -> ctx.pref.is3d
),
"theme" -> Json.obj(
"d2" -> Json.obj(
"current" -> ctx.currentTheme.name,
"list" -> lila.pref.Theme.all.map(_.name)
),
"d3" -> Json.obj(
"current" -> ctx.currentTheme3d.name,
"list" -> lila.pref.Theme3d.all.map(_.name)
)
),
"piece" -> Json.obj(
"d2" -> Json.obj(
"current" -> ctx.currentPieceSet.name,
"list" -> lila.pref.PieceSet.all.map(_.name)
),
"d3" -> Json.obj(
"current" -> ctx.currentPieceSet3d.name,
"list" -> lila.pref.PieceSet3d.all.map(_.name)
)
),
"coach" -> isGranted(_.Coach),
"streamer" -> isStreamer,
"i18n" -> translations
)
}
2019-12-13 07:30:20 -07:00
}
2020-05-05 22:11:15 -06:00
)
}
2017-05-03 08:22:50 -06:00
}