Sincronizza overlay video con punteggio dalla regia remota.

L'iPad accetta gli aggiornamenti ActionCable della regia, evita race con risposte API obsolete e ridisegna subito il tabellone sullo stream RTMP.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Emiliano Frascaro
2026-06-20 12:37:46 +02:00
co-authored by Cursor
parent 270bf680a4
commit c92099a41b
4 changed files with 94 additions and 20 deletions
@@ -80,9 +80,9 @@ struct BroadcastScreen: View {
}
.task(id: sessionId) {
while !Task.isCancelled {
try? await Task.sleep(nanoseconds: 4_000_000_000)
try? await Task.sleep(nanoseconds: 2_000_000_000)
if let remote = try? await container.sessionRepository.fetchSession(id: sessionId).score {
container.scoreController.applyRemote(remote)
container.scoreController.applyRemote(remote, source: .polling)
}
}
}
@@ -337,7 +337,9 @@ struct BroadcastScreen: View {
session = loaded
match = loadedMatch
container.scoreController.bind(sessionId: sessionId, initial: loaded.score)
wireCable()
let refreshOverlay = { updateOverlay() }
container.scoreController.onScoreDidChange = refreshOverlay
wireCable(refreshOverlay: refreshOverlay)
await preloadLogos(for: loadedMatch)
updateOverlay()
loading = false
@@ -363,10 +365,14 @@ struct BroadcastScreen: View {
}
}
private func wireCable() {
private func wireCable(refreshOverlay: @escaping () -> Void) {
guard let token = container.tokenStore.session?.accessToken else { return }
container.sessionCable.onScoreUpdate = { [weak container] remote in
container?.scoreController.applyRemote(remote)
Task { @MainActor in
guard let container else { return }
container.scoreController.applyRemote(remote, source: .cable)
refreshOverlay()
}
}
container.sessionCable.onPauseStream = { [weak container] in
Task { @MainActor in
@@ -528,6 +534,7 @@ struct BroadcastScreen: View {
}
private func teardown() async {
container.scoreController.onScoreDidChange = nil
container.sessionCable.onScoreUpdate = nil
container.sessionCable.onPauseStream = nil
container.sessionCable.onResumeStream = nil