From 744174fbfdb95b5d36e8359504f917bfbf152909 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Fri, 26 Dec 2014 22:18:32 +0100 Subject: [PATCH] show last played game in idle user TV - resolves #150 --- app/controllers/User.scala | 4 ++-- modules/api/src/main/UserApi.scala | 2 +- modules/game/src/main/GameRepo.scala | 9 +++++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/controllers/User.scala b/app/controllers/User.scala index 02396671ac..5eb0cb00b6 100644 --- a/app/controllers/User.scala +++ b/app/controllers/User.scala @@ -23,7 +23,7 @@ object User extends LilaController { def tv(username: String) = Open { implicit ctx => OptionFuResult(UserRepo named username) { user => - (GameRepo lastPlayed user) orElse + (GameRepo lastPlayedPlaying user) orElse (GameRepo lastPlayed user) flatMap { _.fold(fuccess(Redirect(routes.User.show(username)))) { pov => Round.watch(pov, userTv = user.some) @@ -38,7 +38,7 @@ object User extends LilaController { def showMini(username: String) = Open { implicit ctx => OptionFuResult(UserRepo named username) { user => - GameRepo lastPlayed user zip + GameRepo lastPlayedPlaying user zip (ctx.userId ?? { relationApi.blocks(user.id, _) }) zip (ctx.isAuth ?? { Env.pref.api.followable(user.id) }) zip (ctx.userId ?? { relationApi.relation(_, user.id) }) map { diff --git a/modules/api/src/main/UserApi.scala b/modules/api/src/main/UserApi.scala index 1e64bbe801..bcf086c835 100644 --- a/modules/api/src/main/UserApi.scala +++ b/modules/api/src/main/UserApi.scala @@ -41,7 +41,7 @@ private[api] final class UserApi( def one(username: String, token: Option[String]): Fu[Option[JsObject]] = UserRepo named username flatMap { case None => fuccess(none) - case Some(u) => GameRepo lastPlayed u zip + case Some(u) => GameRepo lastPlayedPlaying u zip makeUrl(R User username) zip (check(token) ?? (knownEnginesSharingIp(u.id) map (_.some))) flatMap { case ((gameOption, userUrl), knownEngines) => gameOption ?? { g => diff --git a/modules/game/src/main/GameRepo.scala b/modules/game/src/main/GameRepo.scala index 7b6c0297ba..6ef6546a44 100644 --- a/modules/game/src/main/GameRepo.scala +++ b/modules/game/src/main/GameRepo.scala @@ -125,12 +125,17 @@ object GameRepo { // gets most urgent game to play def onePlaying(user: User): Fu[Option[Pov]] = nowPlaying(user) map (_.headOption) - // gets last recently played move game - def lastPlayed(user: User): Fu[Option[Pov]] = + // gets last recently played move game in progress + def lastPlayedPlaying(user: User): Fu[Option[Pov]] = $find.one($query(Query recentlyPlayingWithClock user.id) sort Query.sortUpdatedNoIndex) map { _ flatMap { Pov(_, user) } } + def lastPlayed(user: User): Fu[Option[Pov]] = + $find($query(Query user user.id) sort ($sort desc F.createdAt), 20) map { + _.sortBy(_.updatedAt).lastOption flatMap { Pov(_, user) } + } + def countPlayingRealTime(userId: String): Fu[Int] = $count(Query.nowPlaying(userId) ++ Query.clock(true))