provide automatic analysis with import, even for anon
This commit is contained in:
parent
b0db271c54
commit
8536a919ea
|
@ -7,7 +7,7 @@ import play.api.http.ContentTypes
|
|||
import play.api.mvc._
|
||||
import play.api.templates.Html
|
||||
|
||||
import lila.analyse.{ TimeChart, AdvantageChart }
|
||||
import lila.analyse.{ Analysis, TimeChart, AdvantageChart }
|
||||
import lila.api.Context
|
||||
import lila.app._
|
||||
import lila.game.{ Pov, Game => GameModel, GameRepo, PgnDump }
|
||||
|
@ -33,8 +33,13 @@ object Analyse extends LilaController {
|
|||
}
|
||||
|
||||
private def makeAnalysis(id: String, me: lila.user.User)(implicit ctx: Context) =
|
||||
env.analyser.getOrGenerate(id, me.id, isGranted(_.MarkEngine)) andThen {
|
||||
case Failure(e: lila.analyse.ConcurrentAnalysisException) => BadRequest(e.getMessage)
|
||||
addCallbacks(id) {
|
||||
env.analyser.getOrGenerate(id, me.id, concurrent = isGranted(_.MarkEngine), auto = false)
|
||||
}
|
||||
|
||||
private[controllers] def addCallbacks(id: String)(analysis: Fu[Analysis]): Fu[Analysis] =
|
||||
analysis andThen {
|
||||
case Failure(e: lila.analyse.ConcurrentAnalysisException) => Env.hub.socket.round ! Tell(id, AnalysisAvailable)
|
||||
case Failure(err) => logerr("[analysis] " + err.getMessage)
|
||||
case Success(analysis) if analysis.done => Env.hub.socket.round ! Tell(id, AnalysisAvailable)
|
||||
}
|
||||
|
|
|
@ -20,6 +20,9 @@ object Importer extends LilaController with BaseGame {
|
|||
Ok(html.game.importGame(listMenu, failure))
|
||||
},
|
||||
data => env.importer(data, ctx.userId, ctx.req.remoteAddress) map { game =>
|
||||
Analyse.addCallbacks(game.id) {
|
||||
Env.analyse.analyser.getOrGenerate(game.id, ctx.userId | "lichess", concurrent = true, auto = false)
|
||||
}
|
||||
Redirect(routes.Round.watcher(game.id, "white"))
|
||||
} recover {
|
||||
case e => {
|
||||
|
|
|
@ -36,10 +36,14 @@ final class Analyser(
|
|||
def hasMany(ids: Seq[String]): Fu[Set[String]] =
|
||||
$primitive[Analysis, String]($select byIds ids, "_id")(_.asOpt[String]) map (_.toSet)
|
||||
|
||||
def getOrGenerate(id: String, userId: String, admin: Boolean, auto: Boolean = false): Fu[Analysis] = {
|
||||
def getOrGenerate(
|
||||
id: String,
|
||||
userId: String,
|
||||
concurrent: Boolean,
|
||||
auto: Boolean): Fu[Analysis] = {
|
||||
|
||||
def generate: Fu[Analysis] =
|
||||
admin.fold(fuccess(none), AnalysisRepo userInProgress userId) flatMap {
|
||||
concurrent.fold(fuccess(none), AnalysisRepo userInProgress userId) flatMap {
|
||||
_.fold(doGenerate) { progressId =>
|
||||
fufail(ConcurrentAnalysisException(userId, progressId, id))
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ final class Env(
|
|||
system.actorOf(Props(new Actor {
|
||||
def receive = {
|
||||
case lila.hub.actorApi.ai.AutoAnalyse(gameId) =>
|
||||
analyser.getOrGenerate(gameId, "lichess", admin = true, auto = true)
|
||||
analyser.getOrGenerate(gameId, "lichess", concurrent = true, auto = true)
|
||||
}
|
||||
}), name = ActorName)
|
||||
|
||||
|
|
Loading…
Reference in a new issue