diff --git a/docs/PROTOCOL.md b/docs/PROTOCOL.md index 9b0e23e..dd5faeb 100644 --- a/docs/PROTOCOL.md +++ b/docs/PROTOCOL.md @@ -255,7 +255,8 @@ Fejlkoder ud over Fup og Fakta: `word_invalid`, `guess_invalid`, `drawing_invali "reveal": { "id": 1, "started_at": 1790000000000, // ms epoch; null = serveren laver stadig lyd - "plan": [ // tidslinjen: pr. kæde en intro (entry -1), hvert bidrag, og slutningen (entry N) + "plan": [ // tidslinjen: pr. kæde en intro (entry -1), hvert bidrag, og slutningen (entry N); + // audio (speakerens replik) kun til storskærmen, da slutningen nævner sidste gæt {"chain": 0, "entry": -1, "ms": 2500, "audio": null}, {"chain": 0, "entry": 0, "ms": 3000, "audio": null}, {"chain": 0, "entry": 5, "ms": 4500, "audio": {"url": "…", "ms": 3200, "text": "Fra kat til sofa."}} diff --git a/tegnoggaet/engine.py b/tegnoggaet/engine.py index 504abd0..21e5b08 100644 --- a/tegnoggaet/engine.py +++ b/tegnoggaet/engine.py @@ -733,7 +733,9 @@ class Game: state["reveal"] = { "id": self.reveal_id, "started_at": int(self.reveal_started_at * 1000) if self.reveal_started_at else None, - "plan": [{"chain": b["chain"], "entry": b["entry"], "ms": b["ms"], "audio": b["audio"]} for b in self.plan], + # speakerens replik (audio) kun til storskærmen: kædens slutning nævner sidste gæt + "plan": [{"chain": b["chain"], "entry": b["entry"], "ms": b["ms"], **({"audio": b["audio"]} if host else {})} + for b in self.plan], # Tegningerne følger ikke med her (de er store); storskærmen får dem i beskeden "drawings". "chains": self._reveal_chains(now, everything=host), } diff --git a/tegnoggaet/tests/test_engine.py b/tegnoggaet/tests/test_engine.py index 3581094..7fce1ec 100644 --- a/tegnoggaet/tests/test_engine.py +++ b/tegnoggaet/tests/test_engine.py @@ -268,6 +268,10 @@ class RevealTests(TegnTestCase): ch = chains(t) self.assertEqual((len(ch[0]["entries"]), ch[0]["survived"], len(ch[1]["entries"])), (3, True, 0)) self.assertNotIn("kat", str(ch[1:])) + self.g.plan[5]["audio"] = {"url": "/tts/x.mp3", "ms": 900, "text": "Den startede som kat og endte som kat."} + phone_plan = self.g.snapshot(self.now, viewer=a)["reveal"]["plan"] + self.assertTrue(all("audio" not in b for b in phone_plan)) # speakerens tekst ville røbe sidste gæt + self.assertEqual(self.g.snapshot(self.now, host=True)["reveal"]["plan"][5]["audio"]["ms"], 900) host = self.g.snapshot(self.now, host=True)["reveal"]["chains"] self.assertEqual([len(x["entries"]) for x in host], [3, 3, 3]) # storskærmen får alt starts = self.g.beat_starts()