Aggiunge overlay server-side burn-in e stabilizza diretta live.

Tabellone, badge e brand sono ricodificati nel flusso _air via OverlayRelay;
sync punteggio HTTP, volume condiviso rails/sidekiq, qualità 720p migliorata
e badge CONNECTING in ripresa da pausa.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-03 23:55:17 +02:00
parent fd225fbadd
commit ab9cb02083
58 changed files with 2423 additions and 242 deletions

View File

@@ -6,6 +6,7 @@ import 'package:x_action_cable_v2/x_action_cable.dart';
import '../core/config.dart';
import '../providers/auth_provider.dart';
import '../providers/score_provider.dart';
import '../providers/score_sync_provider.dart';
import '../providers/session_provider.dart';
import 'models/device_state.dart';
import 'models/score_state.dart';
@@ -88,7 +89,10 @@ class WebsocketService {
switch (type) {
case 'score_update':
_ref.read(scoreProvider.notifier).applyRemote(ScoreState.fromJson(data));
final remote = ScoreState.fromJson(data);
if (_ref.read(scoreSyncProvider).acceptCableScore(remote)) {
_ref.read(scoreProvider.notifier).applyRemote(remote);
}
break;
case 'device_state':
_ref
@@ -109,6 +113,14 @@ class WebsocketService {
_ref.read(sessionProvider.notifier).applyCommand(action);
}
break;
case 'stream_event':
final event = data['event'] as String?;
if (event == 'paused') {
_ref.read(sessionProvider.notifier).applyCommand('pause_stream');
} else if (event == 'resumed') {
_ref.read(sessionProvider.notifier).applyCommand('resume_stream');
}
break;
default:
break;
}