mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-01 11:06:06 +01:00
Add method for request cache to app.Context.
This commit is contained in:
@@ -95,7 +95,23 @@ abstract class ControllerBase extends ScalatraFilter
|
|||||||
/**
|
/**
|
||||||
* Context object for the current request.
|
* Context object for the current request.
|
||||||
*/
|
*/
|
||||||
case class Context(path: String, loginAccount: Option[Account], currentUrl: String, request: HttpServletRequest)
|
case class Context(path: String, loginAccount: Option[Account], currentUrl: String, request: HttpServletRequest){
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get object from cache.
|
||||||
|
*
|
||||||
|
* If object has not been cached with the specified key then retrieves by given action.
|
||||||
|
* Cached object are available during a request.
|
||||||
|
*/
|
||||||
|
def cache[A](key: String)(action: => A): A = {
|
||||||
|
Option(request.getAttribute("cache." + key).asInstanceOf[A]).getOrElse {
|
||||||
|
val newObject = action
|
||||||
|
request.setAttribute("cache." + key, newObject)
|
||||||
|
newObject
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base trait for controllers which manages account information.
|
* Base trait for controllers which manages account information.
|
||||||
|
|||||||
@@ -81,11 +81,8 @@ object helpers {
|
|||||||
* Looks up Gravatar if avatar icon has not been configured in user settings.
|
* Looks up Gravatar if avatar icon has not been configured in user settings.
|
||||||
*/
|
*/
|
||||||
def avatar(userName: String, size: Int, tooltip: Boolean = false)(implicit context: app.Context): Html = {
|
def avatar(userName: String, size: Int, tooltip: Boolean = false)(implicit context: app.Context): Html = {
|
||||||
val account = Option(context.request.getAttribute("cache.account." + userName).asInstanceOf[model.Account]).orElse {
|
val account = context.cache(s"account.${userName}"){
|
||||||
new AccountService {}.getAccountByUserName(userName).map { account =>
|
new AccountService {}.getAccountByUserName(userName)
|
||||||
context.request.setAttribute("cache.account." + userName, account)
|
|
||||||
account
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
val src = account.collect { case account if(account.image.isEmpty) =>
|
val src = account.collect { case account if(account.image.isEmpty) =>
|
||||||
s"""http://www.gravatar.com/avatar/${StringUtil.md5(account.mailAddress)}?s=${size}"""
|
s"""http://www.gravatar.com/avatar/${StringUtil.md5(account.mailAddress)}?s=${size}"""
|
||||||
|
|||||||
Reference in New Issue
Block a user