diff --git a/light9/ascoltami/Light9AscoltamiUi.ts b/light9/ascoltami/Light9AscoltamiUi.ts --- a/light9/ascoltami/Light9AscoltamiUi.ts +++ b/light9/ascoltami/Light9AscoltamiUi.ts @@ -7,6 +7,7 @@ import { SyncedGraph } from "../web/Sync export { RdfdbSyncedGraph } from "../web/RdfdbSyncedGraph"; export { Light9TimelineAudio } from "../web/light9-timeline-audio"; import { classMap } from "lit/directives/class-map.js"; +import { TimingUpdate } from "./main"; debug.enable("*"); const log = debug("asco"); @@ -25,9 +26,11 @@ async function postJson(url: string, jsB export class Light9AscoltamiUi extends LitElement { graph!: SyncedGraph; times!: { intro: number; post: number }; - currentDuration: number = 0; @property() nextText: string = ""; @property() isPlaying: boolean = false; + @property() song: NamedNode | null = null; + @property() t: number = 0; + @property() currentDuration: number = 0; render() { return html` @@ -123,17 +126,11 @@ export class Light9AscoltamiUi extends L } byId("updateReq").innerText = "" + updateFreq; - (window as any).finishOldStyleSetup( - this.times, - updateFreq, - this.currentDurationChanged.bind(this), - (t: string) => { - this.nextText = t; - }, - (is: boolean) => { - this.isPlaying = is; - } - ); + (window as any).finishOldStyleSetup(this.times, updateFreq, (data: TimingUpdate) => { + this.nextText = data.next; + this.isPlaying = data.playing; + this.currentDuration = data.duration; + }); } constructor() { diff --git a/light9/ascoltami/main.ts b/light9/ascoltami/main.ts --- a/light9/ascoltami/main.ts +++ b/light9/ascoltami/main.ts @@ -2,18 +2,23 @@ function byId(id: string): HTMLElement { return document.getElementById(id)!; } -(window as any).finishOldStyleSetup = async ( - times: { intro: number; post: number }, - updateFreq: number, - currentDurationChanged: (d: number) => void, - setNextText: (t: string) => void, - setIsPlaying: (is: boolean) => void -) => { +export interface TimingUpdate { + // GET /ascoltami/time response + duration: number; + next: string; // e.g. 'play' + playing: boolean; + song: string; + started: number; // unix sec + t: number; // seconds into song + state: { current: { name: string }; pending: { name: string } }; +} + +(window as any).finishOldStyleSetup = async (times: { intro: number; post: number }, updateFreq: number, timingUpdate: (data: TimingUpdate) => void) => { let currentHighlightedSong = ""; // let lastPlaying = false; async function updateCurrent() { - const data = await (await fetch("api/time")).json(); + const data: TimingUpdate = await (await fetch("api/time")).json(); byId("currentSong").innerText = data.song; if (data.song != currentHighlightedSong) { showCurrentSong(data.song); @@ -22,10 +27,8 @@ function byId(id: string): HTMLElement { byId("leftTime").innerText = (data.duration - data.t).toFixed(1); byId("leftAutoStopTime").innerText = Math.max(0, data.duration - times.post - data.t).toFixed(1); byId("states").innerText = JSON.stringify(data.state); - currentDurationChanged(data.duration); // document.querySelector("#timeSlider").slider({ value: data.t, max: data.duration }); - setIsPlaying(data.playing); - setNextText(data.next); + timingUpdate(data); } function showCurrentSong(uri: string) {