„Wartet" für immer, obwohl der Server längst fertig war
Der Eintrag ging nach einer 202 zurück auf „wartet" und rief danach `resume`. Das nimmt aber nur auf, was **angehalten oder gescheitert** ist — ein wartender lief in die Schutzklausel und kam nie wieder heraus. Im Protokoll packte ffmpeg um, in der App stand „wartet", und dazwischen lag nichts. Jetzt wird die Warteschlange abgearbeitet statt ein einzelner Eintrag aufgenommen; „wartet" steht darin. Dazu zwei Dinge, um die du gebeten hast: **Das Protokoll liest sich wie eine Kommandozeile.** Älteste Zeile oben, neueste unten, die Ansicht steht am Ende. Mitgeschoben wird nur, wenn man unten steht — wer hochgescrollt hat, liest etwas, und ihn bei jeder neuen Zeile ans Ende zu reissen wäre, als nähme man ihm die Seite aus der Hand. **Ein Tipp auf eine Kachel führt auf die Detailseite**, am Telefon wie am iPad wie am Mac. Nur in „Weiterschauen" spielt er ab: dort steht der Titel, *weil* man ihn angefangen hat. Vorher war es umgekehrt, mit dem Argument „wer eine Kachel antippt, weiss schon, was er sehen will". Im Gebrauch stimmte das nicht — wer nachsehen wollte, wie viele Staffeln eine Serie hat, bekam den Film. Ein Umweg von einem Schritt ist ärgerlich; eine Wiedergabe, die man nicht wollte, ist schlimmer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
ce5dc66047
commit
0a394b9b3b
@@ -10,9 +10,14 @@ import { abschnitt } from './teile';
|
||||
* was gerade schiefgeht, brauchte drei Handgriffe für eine Antwort, die auf
|
||||
* der ersten Seite hätte stehen können.
|
||||
*
|
||||
* **Jetzt steht es sofort da und läuft mit.** Neueste Zeile oben, damit man
|
||||
* zum Mitlesen nicht scrollen muss; die älteren Tage stehen darunter als
|
||||
* Kacheln zum Herunterladen.
|
||||
* **Jetzt steht es sofort da und läuft mit.** Wie eine Kommandozeile:
|
||||
* älteste Zeile oben, neueste unten, und die Ansicht steht am Ende. Das ist
|
||||
* die Richtung, in der ein Logbuch gelesen wird — man sieht, was zuletzt
|
||||
* geschah, und scrollt nach oben, um zu sehen, was davor war.
|
||||
*
|
||||
* **Nur mitgeschoben, wenn man unten steht.** Wer hochgescrollt hat, liest
|
||||
* etwas; ihn bei jeder neuen Zeile ans Ende zu reissen wäre, als würde man
|
||||
* ihm die Seite aus der Hand nehmen.
|
||||
*/
|
||||
|
||||
/** Wie viele Zeilen anfangs geholt werden. */
|
||||
@@ -30,10 +35,13 @@ export function protokollbereich(): HTMLElement {
|
||||
liste.innerHTML = '<div class="spinner"></div>';
|
||||
bereich.appendChild(liste);
|
||||
|
||||
// **Über der Liste, nicht darunter.** „Weiter zurück" holt ältere Zeilen,
|
||||
// und die erscheinen oben — ein Knopf dafür am unteren Ende zeigte in die
|
||||
// falsche Richtung.
|
||||
const mehr = document.createElement('button');
|
||||
mehr.className = 'btn hidden';
|
||||
mehr.textContent = 'Weiter zurück';
|
||||
bereich.appendChild(mehr);
|
||||
bereich.insertBefore(mehr, liste);
|
||||
|
||||
const archiv = document.createElement('div');
|
||||
archiv.className = 'protokolltage';
|
||||
@@ -90,7 +98,11 @@ export function protokollbereich(): HTMLElement {
|
||||
}
|
||||
|
||||
function zeichnen(roh: string): void {
|
||||
const zeilenListe = roh.split('\n').filter(z => z.trim().length > 0).reverse();
|
||||
const zeilenListe = roh.split('\n').filter(z => z.trim().length > 0);
|
||||
|
||||
// **Vor dem Neuzeichnen merken, ob man unten stand.** Danach ist die
|
||||
// Höhe eine andere, und die Frage liesse sich nicht mehr beantworten.
|
||||
const amEnde = liste.scrollHeight - liste.scrollTop - liste.clientHeight < 40;
|
||||
|
||||
liste.innerHTML = '';
|
||||
if (zeilenListe.length === 0) {
|
||||
@@ -99,6 +111,7 @@ export function protokollbereich(): HTMLElement {
|
||||
}
|
||||
|
||||
zeilenListe.forEach(z => liste.appendChild(protokollzeile(z)));
|
||||
if (amEnde) liste.scrollTop = liste.scrollHeight;
|
||||
}
|
||||
|
||||
async function tageLaden(): Promise<void> {
|
||||
|
||||
Reference in New Issue
Block a user