From 1556025ce6572bc3875c57dfbeb16c4cfa5b7fa7 Mon Sep 17 00:00:00 2001 From: Resaec Date: Sun, 31 Aug 2025 23:43:02 +0200 Subject: [PATCH] added schedule to update materialized view outfitpoint_mv added concurrently option to query --- .../support/SessionOutfitHandlers.scala | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/scala/net/psforever/actors/session/support/SessionOutfitHandlers.scala b/src/main/scala/net/psforever/actors/session/support/SessionOutfitHandlers.scala index d382da0b..18495cba 100644 --- a/src/main/scala/net/psforever/actors/session/support/SessionOutfitHandlers.scala +++ b/src/main/scala/net/psforever/actors/session/support/SessionOutfitHandlers.scala @@ -14,6 +14,7 @@ import net.psforever.types.ChatMessageType import net.psforever.util.Config import java.time.LocalDateTime +import java.util.concurrent.Executors import scala.util.{Failure, Success} object SessionOutfitHandlers { @@ -561,7 +562,25 @@ object SessionOutfitHandlers { } } + private var outfitPointSheduleStarted = false + def HandleLoginOutfitCheck(player: Player, session: SessionData): Unit = { + + // TODO: implement this the proper way, please + // start the shedule on first run of the function + if (!outfitPointSheduleStarted) { + outfitPointSheduleStarted = true + + Executors.newSingleThreadScheduledExecutor.scheduleAtFixedRate( + () => { + ctx.run(updateOutfitPointMV()) + }, + 0, + 5, + java.util.concurrent.TimeUnit.MINUTES + ) + } + ctx.run(getOutfitOnLogin(player.avatar.id)).flatMap { memberships => memberships.headOption match { case Some(membership) => @@ -847,6 +866,6 @@ object SessionOutfitHandlers { } def updateOutfitPointMV(): Quoted[Action[Unit]] = quote( - infix"REFRESH MATERIALIZED VIEW outfitpoint_mv".as[Action[Unit]] + infix"REFRESH MATERIALIZED VIEW CONCURRENTLY outfitpoint_mv".as[Action[Unit]] ) }