Antraege vollstaendig erfassen und zum Forum verlinken
Threads ohne zuordenbaren Spieler wurden bisher verworfen. Von 502 Antraegen im Forum kamen dadurch nur die wenigen an, deren Ersteller schon als Spieler mit Forum-Namen erfasst war - der Rest war schlicht unsichtbar. Sie werden jetzt erfasst und stehen unter "Ohne zugeordneten Spieler", durchsuchbar nach Titel und Ersteller, aber ausserhalb der Arbeitsliste: ohne Spieler laesst sich nichts buchen. Wird spaeter ein Spieler mit passendem Forum-Namen angelegt, der Name nachgetragen oder ein frueheres Konto ergaenzt, wandern seine wartenden Antraege von selbst hinueber. Ein erneuter Abgleich ist dafuer nicht noetig, und eine bereits getroffene Zuordnung bleibt unberuehrt. Der Name eines CCs fuehrt auf der Spielerseite jetzt zum Forumsbeitrag, sofern einer verknuepft ist. Weitere Korrekturen am Abgleich: - Wer sein Forumskonto geloescht hat, stand ohne Profil-Link in der Zeile und hatte damit keinen Autor. Solche Antraege liessen sich niemandem zuordnen. - Bei einer abgewiesenen Anfrage brach das ganze Board ab; die bis dahin gelesenen Seiten gingen mit verloren. Jetzt wird die genannte Wartezeit eingehalten, das Tempo fuer den Rest des Laufs gedrosselt und die Seite erneut versucht. Was gelesen wurde, bleibt in jedem Fall erhalten. - Derselbe Schutz im GExtension-Abgleich, der sonst den Spieler uebersprungen haette. - Der Board-Filter fragte nach einem Feld "board", das es nicht gibt. Ein voller Lauf dauert rund eine halbe Minute und laenger, wenn das Forum bremst. Er laeuft deshalb im Hintergrund weiter und meldet seinen Fortschritt, statt an einer HTTP-Zeitgrenze zu sterben. Gelesen und geschrieben wird gebuendelt statt Thread fuer Thread.
This commit is contained in:
+11
-1
@@ -39,6 +39,11 @@ const TOPIC_LINK =
|
||||
const USER_LINK =
|
||||
/<a\s+href="[^"]*user\/(\d+)-[^"]*"[^>]*class="userLink"[^>]*>(?:<i[^>]*><\/i>)?\s*(?:<span[^>]*>)?\s*([^<]{1,80})/;
|
||||
|
||||
// Wer sein Konto gelöscht hat, steht ohne Profillink in der Zelle. Der Name
|
||||
// ist trotzdem da und bleibt die einzige Spur zum Spieler - ohne diesen
|
||||
// Rückfall fallen solche Threads bei der Zuordnung durchs Raster.
|
||||
const AUTHOR_CELL = /<li class="messageGroupAuthor">([\s\S]{0,400}?)<\/li>/;
|
||||
|
||||
// Ein zurückgelassener Verweis ist kein eigener Thread.
|
||||
const MOVED_MARKER = /wbbTopicLinkMoved|class="[^"]*movedTopic|>\s*Verschoben\s*</i;
|
||||
|
||||
@@ -71,6 +76,11 @@ export function parseBoard(html: string): ForumThread[] {
|
||||
seen.add(threadId);
|
||||
|
||||
const user = USER_LINK.exec(block);
|
||||
let authorName = user ? decode(user[2] ?? '') || null : null;
|
||||
if (authorName === null) {
|
||||
const cell = AUTHOR_CELL.exec(block);
|
||||
if (cell) authorName = decode((cell[1] ?? '').replace(/<[^>]*>/g, ' ')) || null;
|
||||
}
|
||||
|
||||
LABEL.lastIndex = 0;
|
||||
const labels = [...block.matchAll(LABEL)].map((m) => decode(m[1] ?? '')).filter(Boolean);
|
||||
@@ -79,7 +89,7 @@ export function parseBoard(html: string): ForumThread[] {
|
||||
threadId,
|
||||
title: decode(topic[3] ?? ''),
|
||||
url: decode(topic[1] ?? ''),
|
||||
authorName: user ? decode(user[2] ?? '') || null : null,
|
||||
authorName,
|
||||
authorForumId: user ? Number(user[1]) : null,
|
||||
isMovedStub: MOVED_MARKER.test(block),
|
||||
labels,
|
||||
|
||||
Reference in New Issue
Block a user