upgrade perf picker

pull/138/head
Thibault Duplessis 2014-11-30 11:39:01 +01:00
parent 928f73ee52
commit 24d9585e29
8 changed files with 32 additions and 21 deletions

View File

@ -21,7 +21,7 @@
}
@ctx.me.map { me =>
<div class="ratings">
@List("bullet", "blitz", "classical", "chess960", "kingOfTheHill", "threeCheck").map { key =>
@List("bullet", "blitz", "classical", "correspondence", "chess960", "kingOfTheHill", "threeCheck").map { key =>
@lila.rating.PerfType(key).map { perfType =>
<div class="@key">
@trans.ratingX(s"""<strong data-icon="${perfType.iconChar}">${me.perfs(key).map(_.intRating).getOrElse("?")}</strong> ${perfType.name}""")

View File

@ -14,7 +14,7 @@ private[evaluation] final class Listener(evaluator: Evaluator) extends Actor {
def receive = {
case lila.game.actorApi.FinishGame(game, white, black) =>
PerfType(PerfPicker.key(game.speed, game.variant)) ifTrue game.rated map { perfType =>
PerfType(PerfPicker key game) ifTrue game.rated map { perfType =>
List(
game.whitePlayer -> white,
game.blackPlayer -> black

View File

@ -8,26 +8,28 @@ object PerfPicker {
val default = (perfs: Perfs) => perfs.standard
def perfType(speed: Speed, variant: Variant): Option[PerfType] =
PerfType(key(speed, variant))
def perfType(speed: Speed, variant: Variant, daysPerTurn: Option[Int]): Option[PerfType] =
PerfType(key(speed, variant, daysPerTurn))
def key(speed: Speed, variant: Variant): String =
def key(speed: Speed, variant: Variant, daysPerTurn: Option[Int]): String =
if (variant.standard) {
if (speed == Speed.Unlimited) Speed.Classical.key
if (daysPerTurn.isDefined) PerfType.Correspondence.key
else if (speed == Speed.Unlimited) PerfType.Classical.key
else speed.key
}
else variant.key
def key(game: Game): String = key(game.speed, game.variant)
def key(game: Game): String = key(game.speed, game.variant, game.daysPerTurn)
def main(speed: Speed, variant: Variant): Option[Perfs => Perf] =
if (variant.standard) Perfs.speedLens(speed).some
def main(speed: Speed, variant: Variant, daysPerTurn: Option[Int]): Option[Perfs => Perf] =
if (daysPerTurn.isDefined) Some((perfs: Perfs) => perfs.correspondence)
else if (variant.standard) Perfs.speedLens(speed).some
else Perfs variantLens variant
def main(game: Game): Option[Perfs => Perf] = main(game.speed, game.variant)
def main(game: Game): Option[Perfs => Perf] = main(game.speed, game.variant, game.daysPerTurn)
def mainOrDefault(game: Game): Perfs => Perf = main(game) | default
def mainOrDefault(speed: Speed, variant: Variant): Perfs => Perf =
main(speed, variant) | default
def mainOrDefault(speed: Speed, variant: Variant, daysPerTurn: Option[Int]): Perfs => Perf =
main(speed, variant, daysPerTurn) | default
}

View File

@ -5,10 +5,10 @@ import org.joda.time.DateTime
import ornicar.scalalib.Random
import play.api.libs.json._
import actorApi.LobbyUser
import lila.game.PerfPicker
import lila.rating.RatingRange
import lila.user.{ User, Perfs }
import actorApi.LobbyUser
case class Hook(
id: String,
@ -18,6 +18,7 @@ case class Hook(
hasClock: Boolean,
time: Option[Int],
increment: Option[Int],
daysPerTurn: Option[Int],
mode: Int,
allowAnon: Boolean,
color: String,
@ -47,7 +48,7 @@ case class Hook(
range => h.rating ?? range.contains
}
private def compatibilityProperties = (variant, time, increment, mode)
private def compatibilityProperties = (variant, time, increment, mode, daysPerTurn)
lazy val realRatingRange: Option[RatingRange] = RatingRange noneIfDefault ratingRange
@ -66,6 +67,7 @@ case class Hook(
"mode" -> realMode.toString,
"clock" -> clockOption.map(_.show),
"time" -> clockOption.map(_.estimateTotalTime),
"days" -> daysPerTurn,
"speed" -> chess.Speed(clockOption).id,
"color" -> chess.Color(color).??(_.name),
"perf" -> Json.obj(
@ -73,7 +75,7 @@ case class Hook(
"name" -> perfType.map(_.name))
)
lazy val perfType = PerfPicker.perfType(speed, realVariant)
lazy val perfType = PerfPicker.perfType(speed, realVariant, daysPerTurn)
private lazy val clockOption = (time ifTrue hasClock) |@| increment apply Clock.apply
@ -90,6 +92,7 @@ object Hook {
uid: String,
variant: Variant,
clock: Option[Clock],
daysPerTurn: Option[Int],
mode: Mode,
allowAnon: Boolean,
color: String,
@ -103,6 +106,7 @@ object Hook {
hasClock = clock.isDefined,
time = clock map (_.limit),
increment = clock map (_.increment),
daysPerTurn = daysPerTurn,
mode = mode.id,
allowAnon = allowAnon || user.isEmpty,
color = color,

View File

@ -64,7 +64,7 @@ object PerfType {
title = "Training puzzles",
iconChar = '-')
val all: List[PerfType] = List(Bullet, Blitz, Classical, Standard, Chess960, KingOfTheHill, ThreeCheck, Puzzle)
val all: List[PerfType] = List(Bullet, Blitz, Classical, Correspondence, Standard, Chess960, KingOfTheHill, ThreeCheck, Puzzle)
val byKey = all map { p => (p.key, p) } toMap
val default = Standard
@ -74,5 +74,5 @@ object PerfType {
def name(key: Perf.Key): Option[String] = apply(key) map (_.name)
val nonPuzzle: List[PerfType] = List(Bullet, Blitz, Classical, Chess960, KingOfTheHill, ThreeCheck)
val nonPuzzle: List[PerfType] = List(Bullet, Blitz, Classical, Correspondence, Chess960, KingOfTheHill, ThreeCheck)
}

View File

@ -24,6 +24,7 @@ case class HookConfig(
uid = uid,
variant = variant,
clock = makeClock,
daysPerTurn = makeDaysPerTurn,
mode = mode,
allowAnon = allowAnon,
color = color.name,

View File

@ -49,7 +49,7 @@ sealed trait Tournament {
def schedule = data.schedule
def scheduled = data.schedule.isDefined
def perfLens = PerfPicker.mainOrDefault(speed, variant)
def perfLens = PerfPicker.mainOrDefault(speed, variant, none)
def userIds = players map (_.id)
def activePlayers = players filter (_.active)

View File

@ -1184,15 +1184,17 @@ var storage = {
$form.find('.color_submits button').toggle(timeOk && ratedOk);
};
var showRating = function() {
var timeMode = $timeModeSelect.val();
var key;
switch ($variantSelect.val()) {
case '1':
if ($timeModeSelect.val() == '1') {
if (timeMode == '1') {
var time = $timeInput.val() * 60 + $incrementInput.val() * 30;
if (time < 180) key = 'bullet';
else if (time < 480) key = 'blitz';
else key = 'classical';
} else key = 'classical';
} else if (timeMode == '2') key = 'correspondence';
else key = 'classical';
break;
case '2':
key = 'chess960';
@ -1732,6 +1734,8 @@ var storage = {
}
if (hook.clock) {
html += '<span class="clock">' + hook.clock + '</span>';
} else if (hook.days) {
html += '<span class="clock">' + hook.days + 'D</span>';
} else {
html += '<span class="clock nope">∞</span>';
}
@ -1747,7 +1751,7 @@ var storage = {
['', '<span class="is is2 color-icon ' + (hook.color || "random") + '"></span>'],
[hook.username, (hook.rating ? '<a href="/@/' + hook.username + '" class="ulink">' + hook.username + '</a>' : 'Anonymous')],
[hook.rating || 0, hook.rating ? hook.rating : ''],
[hook.time || 9999, hook.clock ? hook.clock : '∞'],
[hook.time || 9999, hook.clock ? hook.clock : (hook.days ? hook.days + 'D' : '∞')],
[hook.mode,
'<span class="varicon" data-icon="' + hook.perf.icon + '"></span>' +
$.trans(hook.mode)