rewrite subtitle rendering engine

This commit is contained in:
2025-05-06 22:47:41 +02:00
parent 0d752a9038
commit 35bdb0d366
5 changed files with 315 additions and 134 deletions

View File

@@ -3,7 +3,7 @@ import {
} from "./pythagoras_client";
import { ScrollingTextBox } from "./scrolling_textbox";
import { dict, IDLE_LOGOS, QUESTION_LINK, QUESTION_QR } from "./settings";
import { el, sleep, wait_for_dom_refresh } from "./tools";
import { AsyncRunner, el, sleep, wait_for_dom_refresh } from "./tools";
interface PresentationScreen {
prepare(): Promise<void>;
@@ -67,23 +67,25 @@ export class PresentationManager {
class MainScreen implements PresentationScreen {
private dom_root: HTMLDivElement;
private subs_english: ScrollingTextBox;
private subs_czech: ScrollingTextBox;
private subs_english: AsyncRunner<ScrollingTextBox>;
private subs_czech: AsyncRunner<ScrollingTextBox>;
private dom_question: HTMLDivElement;
private dom_question_link: HTMLDivElement;
private question_insert: HTMLParagraphElement;
public constructor() {
this.subs_english = new ScrollingTextBox();
this.subs_czech = new ScrollingTextBox();
const subs_en = new ScrollingTextBox();
const subs_cz = new ScrollingTextBox();
this.subs_english = new AsyncRunner(subs_en);
this.subs_czech = new AsyncRunner(subs_cz);
this.question_insert = el.p("");
this.dom_question_link = el.div([el.h1(QUESTION_LINK)], ["link"]);
this.dom_question = el.div([this.dom_question_link, this.question_insert], ["question"]);
this.dom_root = el.div([
this.dom_question,
el.div([
el.div([this.subs_english.dom], ["lang"]),
el.div([this.subs_czech.dom], ["lang"]),
el.div([subs_en.dom], ["lang"]),
el.div([subs_cz.dom], ["lang"]),
], ["subtitles"]),
], ["main"]);
}
@@ -117,13 +119,19 @@ class MainScreen implements PresentationScreen {
public async serve(trigger: PythagorasIncomingMessage): Promise<void> {
switch (trigger.type) {
case PythagorasIncomingMessageType.SubEnUpdateCur:
await this.subs_english.update_current(trigger.text);
this.subs_english.run((target: ScrollingTextBox) => {
return target.update_current(trigger.text)
});
break;
case PythagorasIncomingMessageType.SubEnSubmit:
await this.subs_english.finish_line(trigger.text);
this.subs_english.run((target: ScrollingTextBox) => {
return target.finish_current(trigger.text);
});
break;
case PythagorasIncomingMessageType.SubCzSubmit:
await this.subs_czech.add_line(trigger.text);
this.subs_czech.run((target: ScrollingTextBox) => {
return target.add_line(trigger.text);
});
break;
case PythagorasIncomingMessageType.SelectedMessage:
if (trigger.message === null) { this.hide_question(); }