import { meldungAnlegen, type Meldungsart } from './api'; import { dialog } from './dialog'; import { hinweisZeigen } from './util'; /** Die Worte für jede Art. * * **An einer Stelle, nicht an zweien.** Der Dialog bietet sie an, die * Verwaltung zeigt sie wieder an — stünden die Wörter zweimal da, hiesse die * eine Liste irgendwann „Angaben" und die andere noch „Daten". */ export const ARTWORT: Record = { bild: 'Bild', ton: 'Ton', untertitel: 'Untertitel', daten: 'Angaben', sonstiges: 'Sonstiges', }; /** Meldet ein Problem an einem Titel, einer Staffel oder einer Folge. * * **Warum es das gibt.** Wer einen Server für andere betreibt, erfährt von * Fehlern zuletzt: dass die deutsche Tonspur nach einer halben Stunde * aussetzt, merkt der, der den Film sieht, und nicht der, der ihn eingeräumt * hat. Bisher gab es dafür keinen Weg ausser dem Zuruf im Wohnzimmer. * * **Drei Felder, und zwei davon sind freiwillig.** Die Art macht aus einer * Liste von Sätzen etwas, das man sortieren kann; die Stelle macht aus „ab * irgendwann kein Ton" etwas, das man nachstellen kann. Der Kommentar ist das * eigentliche. Pflicht ist nur er. * * @param id Film, Serie oder Folge — welche von dreien, entscheidet der Server. * @param was Was dasteht, damit man im Dialog sieht, worüber man redet. * @param staffel Nur mit einer Serienkennung: eine einzelne Staffel. */ export function meldedialog(id: string, was: string, staffel?: number): void { dialog({ titel: 'Problem melden', text: `Betrifft „${was}“. Der Administrator sieht die Meldung mit deinem ` + 'Namen und kann sie abhaken; du siehst unter „Mein Konto“, was daraus ' + 'geworden ist.', felder: [ { name: 'art', beschriftung: 'Was stimmt nicht?', auswahl: (Object.keys(ARTWORT) as Meldungsart[]) .map(a => ({ wert: a, text: ARTWORT[a] })), wert: 'bild', }, { name: 'stelle', beschriftung: 'Stelle', platzhalter: '0:34:12', hinweis: 'Leer lassen, wenn es den ganzen Titel betrifft.', }, { name: 'text', beschriftung: 'Was ist passiert?', art: 'mehrzeilig', platzhalter: 'Der deutsche Ton setzt nach einer halben Stunde aus, Englisch läuft weiter.', }, ], bestaetigen: 'Melden', tun: async wert => { const text = wert('text').trim(); // **Hier und nicht erst am Server.** Der Dialog bleibt bei einem Fehler // offen und zeigt den Satz an; einmal hin und zurück über die Leitung // wäre dafür Verschwendung. Der Server prüft es trotzdem. if (text.length === 0) throw new Error('Ohne Beschreibung lässt sich nichts nachsehen.'); await meldungAnlegen( id, (wert('art') || 'sonstiges') as Meldungsart, text, wert('stelle') || undefined, staffel); hinweisZeigen('Gemeldet. Danke.'); }, }); }