Skip to content

Conversation

@lenguyenthanh
Copy link
Member

@lenguyenthanh lenguyenthanh commented Apr 14, 2025

Would be useful for this: https://github.com/lichess-org/lila/blob/62137a34043da1e869c38eecf75916d1dbdf7f22/modules/study/src/main/ExplorerGame.scala#L58

As it can be refactored as follow:

   private def gameTitle(g: Game): String =
-    val pgn = g.pgnImport.flatMap(pgnImport => Parser.full(pgnImport.pgn).toOption)
-    val white =
-      pgn.flatMap(_.tags(_.White)) | namer.playerTextBlocking(g.whitePlayer)(using lightUserApi.sync)
-    val black =
-      pgn.flatMap(_.tags(_.Black)) | namer.playerTextBlocking(g.blackPlayer)(using lightUserApi.sync)
+    val tags = g.pgnImport.flatMap(pgni => Parser.full(pgni.pgn).toOption).map(_.tags).getOrElse(Tags.empty)
+    gameTitle(g, tags)
+
+  private def gameTitle(g: Game, tags: Tags): String =
+    val white  = tags(_.White) | namer.playerTextBlocking(g.whitePlayer)(using lightUserApi.sync)
+    val black  = tags(_.Black) | namer.playerTextBlocking(g.blackPlayer)(using lightUserApi.sync)
     val result = chess.Outcome.showResult(chess.Outcome(g.winnerColor).some)
     val event: Option[String] =
-      (pgn.flatMap(_.tags(_.Event)), pgn.flatMap(_.tags.year).map(_.toString)) match
+      (tags(_.Event), tags.year.map(_.toString)) match
         case (Some(event), Some(year)) if event.contains(year) => event.some
         case (Some(event), Some(year))                         => s"$event, $year".some
         case (eventO, yearO)                                   => eventO.orElse(yearO)

@ornicar ornicar merged commit 51e08cc into lichess-org:master Apr 15, 2025
3 checks passed
@lenguyenthanh lenguyenthanh deleted the pgn-parser/tags branch April 15, 2025 07:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants