lila/app/controllers/Pref.scala
Thibault Duplessis b1ad392e9f chat wip
2013-12-27 23:12:20 +01:00

51 lines
1.2 KiB
Scala

package controllers
import play.api.data.Form
import play.api.mvc._, Results._
import lila.app._
import lila.common.LilaCookie
import lila.api.Context
import views._
object Pref extends LilaController {
private def api = Env.pref.api
private def forms = Env.pref.forms
def form = Auth { implicit ctx
me
forms prefOf me map { form
Ok(html.account.pref(me, form))
}
}
def formApply = AuthBody { implicit ctx
me
implicit val req = ctx.body
FormFuResult(forms.pref) { err
fuccess(html.account.pref(me, err))
} { data
api getPref me flatMap { pref
api.setPref(data(pref))
} inject Redirect(routes.Pref.form)
}
}
def set(name: String) = OpenBody { implicit ctx
implicit val req = ctx.body
(setters get name) ?? {
case (form, fn) FormResult(form) { v
fn(v, ctx) map { Ok() withCookies _ }
}
}
}
private lazy val setters = Map(
"theme" -> (forms.theme -> save("theme") _),
"bg" -> (forms.bg -> save("bg") _))
private def save(name: String)(value: String, ctx: Context): Fu[Cookie] =
ctx.me ?? { api.setPrefString(_, name, value) } inject LilaCookie.session(name, value)(ctx.req)
}