2013-12-27 15:12:20 -07:00
|
|
|
package lila.api
|
|
|
|
|
2017-01-15 05:26:08 -07:00
|
|
|
import play.api.mvc.RequestHeader
|
2013-12-27 15:12:20 -07:00
|
|
|
|
2017-01-25 08:11:18 -07:00
|
|
|
import lila.common.{ HTTPRequest, AssetVersion }
|
2013-12-27 15:12:20 -07:00
|
|
|
import lila.pref.Pref
|
2017-05-05 04:39:04 -06:00
|
|
|
import lila.relation.actorApi.OnlineFriends
|
2013-12-27 15:12:20 -07:00
|
|
|
import lila.user.{ UserContext, HeaderUserContext, BodyUserContext }
|
|
|
|
|
2014-01-02 10:46:51 -07:00
|
|
|
case class PageData(
|
2016-07-24 10:25:11 -06:00
|
|
|
onlineFriends: OnlineFriends,
|
2014-04-18 03:51:19 -06:00
|
|
|
teamNbRequests: Int,
|
2016-01-31 22:40:31 -07:00
|
|
|
nbChallenges: Int,
|
2016-05-30 06:51:36 -06:00
|
|
|
nbNotifications: Int,
|
2014-06-04 17:44:42 -06:00
|
|
|
pref: Pref,
|
2015-08-12 04:27:45 -06:00
|
|
|
blindMode: Boolean,
|
2017-01-25 08:11:18 -07:00
|
|
|
hasFingerprint: Boolean,
|
2017-05-09 14:59:18 -06:00
|
|
|
assetVersion: AssetVersion,
|
2017-05-09 17:23:10 -06:00
|
|
|
inquiry: Option[lila.mod.Inquiry]
|
2017-02-14 08:34:07 -07:00
|
|
|
)
|
2014-01-02 10:46:51 -07:00
|
|
|
|
|
|
|
object PageData {
|
2014-06-06 06:33:04 -06:00
|
|
|
|
2017-05-05 04:39:04 -06:00
|
|
|
def empty(v: AssetVersion) =
|
2017-05-09 14:59:18 -06:00
|
|
|
PageData(OnlineFriends.empty, 0, 0, 0, Pref.default, false, false, v, none)
|
2014-06-06 06:33:04 -06:00
|
|
|
|
2017-05-05 04:39:04 -06:00
|
|
|
def anon(req: RequestHeader, v: AssetVersion, blindMode: Boolean = false) = PageData(
|
|
|
|
OnlineFriends.empty,
|
|
|
|
teamNbRequests = 0,
|
|
|
|
nbChallenges = 0,
|
|
|
|
nbNotifications = 0,
|
|
|
|
Pref fromRequest req,
|
|
|
|
blindMode = blindMode,
|
|
|
|
hasFingerprint = false,
|
2017-05-09 14:59:18 -06:00
|
|
|
assetVersion = v,
|
|
|
|
none
|
2017-05-05 04:39:04 -06:00
|
|
|
)
|
2014-01-02 10:46:51 -07:00
|
|
|
}
|
|
|
|
|
2013-12-27 15:12:20 -07:00
|
|
|
sealed trait Context extends lila.user.UserContextWrapper {
|
|
|
|
|
|
|
|
val userContext: UserContext
|
2014-01-02 10:46:51 -07:00
|
|
|
val pageData: PageData
|
2013-12-29 14:22:29 -07:00
|
|
|
|
2016-07-24 10:25:11 -06:00
|
|
|
def onlineFriends = pageData.onlineFriends
|
2016-07-03 16:14:10 -06:00
|
|
|
|
2014-04-18 03:51:19 -06:00
|
|
|
def teamNbRequests = pageData.teamNbRequests
|
2016-01-31 22:40:31 -07:00
|
|
|
def nbChallenges = pageData.nbChallenges
|
2016-05-30 06:51:36 -06:00
|
|
|
def nbNotifications = pageData.nbNotifications
|
2014-01-02 10:46:51 -07:00
|
|
|
def pref = pageData.pref
|
2014-06-04 17:44:42 -06:00
|
|
|
def blindMode = pageData.blindMode
|
2013-12-27 15:12:20 -07:00
|
|
|
|
2017-05-05 04:39:04 -06:00
|
|
|
def currentTheme = lila.pref.Theme(pref.theme)
|
2014-10-09 13:46:42 -06:00
|
|
|
|
2017-05-05 04:39:04 -06:00
|
|
|
def currentTheme3d = lila.pref.Theme3d(pref.theme3d)
|
2014-10-08 17:12:55 -06:00
|
|
|
|
2017-05-05 04:39:04 -06:00
|
|
|
def currentPieceSet = lila.pref.PieceSet(pref.pieceSet)
|
2014-10-09 13:46:42 -06:00
|
|
|
|
2017-05-05 04:39:04 -06:00
|
|
|
def currentPieceSet3d = lila.pref.PieceSet3d(pref.pieceSet3d)
|
2014-05-09 05:51:55 -06:00
|
|
|
|
2017-05-05 04:39:04 -06:00
|
|
|
def currentSoundSet = lila.pref.SoundSet(pref.soundSet)
|
2015-06-26 15:34:22 -06:00
|
|
|
|
2017-05-05 04:39:04 -06:00
|
|
|
lazy val currentBg = if (pref.transp) "transp" else if (pref.dark) "dark" else "light"
|
2013-12-27 15:12:20 -07:00
|
|
|
|
2017-05-06 01:25:17 -06:00
|
|
|
def transpBgImg = currentBg == "transp" option pref.bgImgOrDefault
|
2015-07-17 08:43:14 -06:00
|
|
|
|
2016-09-01 10:39:43 -06:00
|
|
|
lazy val mobileApiVersion = Mobile.Api requestVersion req
|
|
|
|
|
2016-09-05 05:13:41 -06:00
|
|
|
def isMobileApi = mobileApiVersion.isDefined
|
|
|
|
|
|
|
|
lazy val isMobileBrowser = HTTPRequest isMobile req
|
2015-02-05 15:15:07 -07:00
|
|
|
|
2015-08-12 04:27:45 -06:00
|
|
|
def requiresFingerprint = isAuth && !pageData.hasFingerprint
|
|
|
|
|
2017-03-09 14:15:11 -07:00
|
|
|
def zoom: Option[Int] = req.session get "zoom" flatMap parseIntOption filter (100<)
|
2013-12-27 15:12:20 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
sealed abstract class BaseContext(
|
|
|
|
val userContext: lila.user.UserContext,
|
2017-02-14 08:34:07 -07:00
|
|
|
val pageData: PageData
|
|
|
|
) extends Context
|
2013-12-27 15:12:20 -07:00
|
|
|
|
2015-09-16 09:32:02 -06:00
|
|
|
final class BodyContext[A](
|
|
|
|
val bodyContext: BodyUserContext[A],
|
2017-02-14 08:34:07 -07:00
|
|
|
data: PageData
|
|
|
|
) extends BaseContext(bodyContext, data) {
|
2013-12-29 02:51:40 -07:00
|
|
|
|
2013-12-27 15:12:20 -07:00
|
|
|
def body = bodyContext.body
|
|
|
|
}
|
|
|
|
|
2013-12-29 14:22:29 -07:00
|
|
|
final class HeaderContext(
|
2014-01-02 10:46:51 -07:00
|
|
|
headerContext: HeaderUserContext,
|
2017-02-14 08:34:07 -07:00
|
|
|
data: PageData
|
|
|
|
) extends BaseContext(headerContext, data)
|
2013-12-27 15:12:20 -07:00
|
|
|
|
2017-05-26 06:12:04 -06:00
|
|
|
final class ContextMaker(reqLang: RequestHeader => Lang) {
|
2013-12-27 15:12:20 -07:00
|
|
|
|
2017-01-25 08:11:18 -07:00
|
|
|
def apply(req: RequestHeader, v: AssetVersion): HeaderContext =
|
2017-05-26 06:12:04 -06:00
|
|
|
new HeaderContext(UserContext(req, none), PageData.anon(req, v), i18nPool lang req)
|
2013-12-27 15:12:20 -07:00
|
|
|
|
2014-01-02 10:46:51 -07:00
|
|
|
def apply(userContext: HeaderUserContext, pageData: PageData): HeaderContext =
|
2017-05-26 06:12:04 -06:00
|
|
|
new HeaderContext(userContext, pageData, i18nPool lang req)
|
2013-12-27 15:12:20 -07:00
|
|
|
|
2015-09-16 09:32:02 -06:00
|
|
|
def apply[A](userContext: BodyUserContext[A], pageData: PageData): BodyContext[A] =
|
2017-05-26 06:12:04 -06:00
|
|
|
new BodyContext(userContext, pageData, i18nPool lang req)
|
2013-12-27 15:12:20 -07:00
|
|
|
}
|