Files
wgenerator/docs/pages/presentation-monitor.md
T
2026-05-15 11:03:02 +02:00

4.5 KiB

Seite: Präsentationsmonitor

Route

/presentation/monitor

Die Route öffnet die Vollbildausgabe für Beamer oder Display. Sie wird typischerweise über den Button Präsentation starten auf /presentation/remote geöffnet.

Zweck

Der Monitor rendert den aktuellen Präsentationszustand der aktiven Show. Er zeigt Titelfolie, leere Fläche, freien Text oder Liedabschnitte und ergänzt bei Liedern die rechtlichen Angaben.

Datenfluss

Die MonitorComponent liest global/static.currentShow über GlobalSettingsService.get$. Aus dieser ID lädt sie die Show über ShowService.read$(showId) und übernimmt daraus die Live-Felder für Anzeigezustand, Datum, Veranstaltungstyp, Zoom, Hintergrund und freien Text.

Für Song-Inhalte beobachtet der Monitor presentationSongId. Bei title, dynamicText oder fehlender Song-ID wird kein Song gesetzt. Bei anderen Werten lädt er den passenden Show-Song über ShowSongService.read$(showId, presentationSongId).

Konfigurationsdaten für rechtliche Hinweise kommen aus ConfigService.get$(). Die Komponente app-legal nutzt diese Daten unter anderem für die CCLI-Lizenznummer.

UI-Anzeige

Beim Initialisieren ruft der Monitor openFullscreen() auf. Die Anzeige liegt als fixierte Vollbildfläche über der Anwendung und blendet den Mauszeiger aus.

Der Monitor kennt folgende Zustände:

  • title: zeigt den übersetzten Veranstaltungstyp und das Datum.
  • empty: zeigt die leere Präsentationsfläche mit Logo beziehungsweise Hintergrund.
  • dynamicText: zeigt presentationDynamicCaption und presentationDynamicText.
  • Show-Song-ID: rendert app-song-text mit Songtitel, Liedtext und aktivem Abschnitt.

Bei Songs werden Akkorde ausgeblendet (chordMode="hide"), Kommentare nicht angezeigt und die interne Abschnittsnavigation des Song-Text-Widgets deaktiviert. Der aktive Abschnitt kommt aus presentationSection.

Zusammenspiel von Remote und Monitor

Der Monitor ist ein reiner Live-Reader. Alle Bedienhandlungen erfolgen in der Remote-Steuerung; der Monitor reagiert auf die Felder, die dort auf der aktiven Show gespeichert werden.

Wenn die Remote presentationSongId, presentationSection, presentationZoom, presentationBackground, presentationDynamicCaption oder presentationDynamicText ändert, aktualisiert der Monitor seine Darstellung über die abonnierten Datenströme. Beim Wechsel der aktiven Show über /presentation/select liest der Monitor die neue currentShow aus den globalen Settings und richtet die Ausgabe darauf aus.

Live-Felder auf der Show

Der Monitor wertet folgende Felder aus:

  • presentationSongId: entscheidet über Titelfolie, Leerseite, freien Text oder Songanzeige.
  • presentationSection: bestimmt den aktiven Abschnitt im Songtext.
  • presentationDynamicCaption: Überschrift für den freien Text.
  • presentationDynamicText: Inhalt für den freien Text; Zeilenumbrüche bleiben durch die Monitor-Styles erhalten.
  • presentationZoom: wird als Pixelwert auf die Vollbildfläche gesetzt.
  • presentationBackground: schaltet die Hintergrundgrafik.

Zusätzlich nutzt er showType und date für die Titelfolie.

Hintergründe

presentationBackground unterstützt diese Werte:

  • none: schwarzer Hintergrund ohne Bild.
  • blue: assets/bg-dark-blue.jpg
  • green: assets/bg-dark-green.jpg
  • leder: assets/bg-leder.jpg
  • praise: assets/bg-praise.jpg
  • bible: assets/bg-bible.jpg

Die Bildhintergründe werden vollflächig gerendert, weich eingeblendet und je nach Motiv mit Blur und reduzierter Deckkraft versehen. Bei aktivem Bildhintergrund wird das Logo in Songzuständen vollständig ausgeblendet.

Rechtliche Angaben

Bei Songanzeige rendert app-legal die verfügbaren Metadaten des Songs:

  • Künstler
  • Label
  • Nutzungsbedingungen
  • Herkunft
  • Liednummer beziehungsweise CCLI-Liednummer

Wenn song.legalOwner den Wert CCLI hat und Konfiguration geladen ist, wird zusätzlich die CCLI-Lizenznummer aus ConfigService angezeigt.

Technische Besonderheiten

Songwechsel werden um 600 ms verzögert. Vor dem Umschalten setzt die Komponente intern songId auf empty, damit die songSwitch-Animation sauber zwischen den Zuständen wechseln kann. Ein laufender Timeout wird beim nächsten Wechsel oder beim Zerstören der Komponente abgebrochen.

Die Show-Daten werden mit shareReplay(1) geteilt, damit die separaten Streams für allgemeine Präsentationsdaten und Song-Ladevorgänge dieselbe Show-Quelle verwenden. Subscriptions werden über destroy$ beendet.