Release von Muckturnier 3.3 (01.01.2020)
Änderung: Die Readme wird jetzt mit rst2html5.py (wie der Name schon sagt: als HTML5) gebaut. Außerdem werden jetzt Touch-Geräte berücksichtigt: Der Header hat jetzt einen „Viewport“-Meta-Tag und die Links im Inhaltsverzeichnis werden für Touch-Geräte mit mehr Platz dazwischen angezeigt.
Workaround: Qt-Bug #44056 sorgt bei der Verwendung des Fusion-Styles dafür, dass QGroupBoxen ohne Titel zu viel Platz oben haben. Der gepostete Bugfix verschiebt bloß den Platz nach innen, löst also das Problem nicht. Jetzt gibt es einen Workaround, der das Problem einstweilen damit umschifft, dass Boxen mit und ohne Titel unterschieden werden, und der Rahmen nicht vom Style, sondern via CSS gemalt wird.
Neu/Verbesserung: Wenn bei SQL-Querys (aus welchen Gründen auch immer) Fehler auftreten, dann werden diese jetzt abgefangen und vearbeitet: Zunächst wird versucht, den letzten konsistenten Zustand der Datenbank per Rollback wiederherzustellen, sofern eine Transaktion offen ist. Dann wird die momentan laufende Funktion abgebrochen, die Netzwerkverbindung (sofern vorhanden) bzw. ein etwa laufender Server und die Datenbank geschlossen; schließlich wird eine Fehlermeldung mit dem ausgeführten Query und der Fehlermeldung der Datenbank angezeigt. Ein SQL-Fehler sollte jetzt das Programm nicht mehr zum Absturz bringen können.
Bugfix: Wenn das Anlegen einer neuen Datenbank fehlschlägt, dann wird die zuletzt geöffnete jetzt wieder geöffnet, so dass es beim Bearbeiten danach keinen Crash mehr gibt.
Bugfix: Das Update von älteren Datenbanken, die Revision 5 oder früher benutzt haben, funktioniert jetzt wieder korrekt. Bei Einzelspielerturnieren wurde seit Version 0.7.7 fälschlicherweise die Option „Automatische Paar- bzw. Tischauswahl“ aktiviert, und beim Öffnen der Datenbank nicht mehr deaktiviert. Das führte zu falschen Warnungen bei der Spielerauswahl bzw. zur Unbenutzbarkeit der Spielstandeingabe, da die Tischnummer automatisch falsch gesetzt wurde. Beim Update auf dbv8 von dbv5 wird der Wert jetzt direkt korrekt gesetzt, beim Update von dbv6 oder dbv7 wird auf einen potenziell falsch gesetzten Wert geprüft und dieser ggf. korrigiert.
Bugfix: Wenn eine Datenbank geöffnet ist, und eine andere geöffnet werden soll, das aber fehlschlägt, dann gibt es jetzt beim Weiterbearbeiten der zuletzt geöffneten Datenbank keinen Crash mehr.
Neu: Beim Anlegen einer Datenbank werden jetzt die application_id- und user_version-Header-Felder von SQLite benutzt. application_id wird auf 1299538795 gesetzt (hexadezimal 0x4d75636b, was die Repräsentation der Zeichenkette "Muck" ist), und user_version auf die aktuelle Datenbankrevision. Damit kann eine Muckturnier-Turnierdatenbank z. B. per file(1) identifiziert werden, und man kann die Datenbankrevision unabhängig vom Muckturnier-Programm bzw. dem SQLite-CLI sehen.
Änderung: Ab jetzt werden die Turniereinstellungen nicht mehr als Schlüssel-Wert-Paare in die "config"-Tabelle geschrieben, sondern als JSON-Objekt unter dem Schlüssel "SETTINGS". Um das Verwalten der Einstellungen kümmert sich jetzt die neue Klasse TournamentSettings. Damit ist jetzt folgendes gegeben:
Das Handhaben der Einstellungen ist jetzt logisch von der Handhabung der Datenbank getrennt.
Es wird jetzt nicht mehr zwischen Einstellungen unterschieden, die zum Anlegen der Datenbank festgelegt werden müssen, und solchen, die erst beim Schließen gespeichert werden.
Das Serialisieren und Parsen der Einstellungen ist jetzt einfacher (außerdem kam ja mittlerweile sowieso schon JSON hierfür zum Einsatz, z. B. für das Management allein gekommener Spieler).
Das Hinzufügen eines neuen Konfigurationswertes erfordert jetzt nicht mehr zwingend ein Update der Datenbankrevision (wie z. B. bei Revision 6 geschehen).
Neu: Es kann jetzt eine Markierung für „abwesend“ definiert werden. So markierte Anmeldungen werden ignoriert. Das ist z. B. nützlich, wenn es Voranmeldungen gibt: Es werden dann die Paare bzw. Spieler, die noch nicht gekommen sind, nicht mitgezählt.
Neu/Verbesserung: Die Tischnummer kann jetzt bei der Ergebniseingabe auch direkt per Tastatur eingegeben werden.
Bugfix: Wenn die Serverseite geschlossen wird, während der Server läuft, dann wird der Server jetzt korrekt geschlossen. Damit gibt es jetzt keinen Crash mehr, wenn man hinterher etwas an der geöffneten Datenbank verändert.
Bugfix: Beim Verbinden mit einem Server gibt es jetzt auch dann einen Timeout samt Fehlermeldung, wenn keine Socketverbindung hergestellt werden konnte (also noch gar kein Handshake initialisiert werden konnte). Bisher wurde (unendlich) auf das „connected“-Signal gewartet.
Neu: Wenn ein Discover-Server eine IPv6-Link-Local-Adresse ausliefert, dann wird jetzt die (wahrscheinlich) korrekte Scope-ID für den lokalen Rechner automatisch gesetzt.
Neu: Beim Starten des Servers werden jetzt alle verfügbaren IP-Adressen (incl. aller IPv6-Adressen), die nicht die „Localhost“-Adressen 127.0.0.1 bzw. ::1 sind, zur Auswahl aufgelistet. Die erste benutzbare wird voreingestellt. Ob eine IPv4- oder eine IPv6-Adresse als Voreinstellung ausgewählt werden soll, kann auf der „Netzwerk“-Seite in den Einstellungen ausgewählt werden.
Änderung: Der Muckturnier-Server benutzt jetzt standardmäßig Port 8810 TCP und der Discover-Server Port 8811 UDP. Die beiden sind Stand jetzt nicht bei der IANA registriert, und es wurde auch noch keine "Illegal Activity" darauf verzeichnet. Somit sollten diese beiden Ports tatsächlich „frei“ sein.
Neu: Die bisher hart kodierten Einstellungen für das Netzwerk (Timeouts, Port des Discover-Servers etc.) können ab jetzt unter „Netzwerk“ im Einstellungen-Dialog verändert werden.
Neu: Das Muckturnier-Programm gibt es jetzt auch (offiziell) for macOS. War erstaunlich einfach! Nach ein paar Code-Ergänzungen und ein bisschen Einlesen in die Materie gibt es ab jetzt ein App-Paket, das man „einfach so“ in die Programme ziehen kann. Also zumindest soweit ich das als Archetyp des Nicht-Apple-Users überblicken kann :-P Unterstützt werden dürfte jede Version von macOS ab „Sierra“ (Version 10.12).
Schönheitskorrektur: Es wird jetzt wieder NULL (also kein Wert) für den Namen der „unmarkiert“- Markierung anstatt einem leeren String in der Datenbank gespeichert, so wie das vor Einführung der Vorlage für Markierungen der Fall war. Somit sind wir wieder konsistent (der leere String sollte aber egal wie keine Probleme verursachen, sofern er in einer Datenbank benutzt wird).
Neu/Verbesserung: Die gewählten Einstellungen für „Allein gekommene Spieler berücksichtigen“ und die automatische Standardmarkierung für neue Anmeldungen sind jetzt Bestandteil der Vorlage für Markierungen. Damit werden die dort gesetzten Einstellungen automatisch für neue Datenbanken voreingestellt.
Neu: Die gesetzte Standardmarkierung und die Einstellungen für allein gekommene Spieler werden jetzt in der Datenbank gespeichert und beim Öffnen wiederhergestellt.
Bugfix: Wenn eine nicht beschreibbare Datenbank geöffnet ist, dann wird jetzt nicht mehr der „Markieren“-Popup-Dialog auf der Anmeldeseite angezeigt (der beim Benutzen dann einen SQL-Fehler produziert, weil die Datenbank ja nicht beschreibbar ist).
Bugfix: Wenn eine nicht beschreibbare Datenbank geöffnet wird, und die Server- oder Client-Seite ist offen (und wird automatisch geschlossen), dann stürzt das Programm jetzt nicht mehr ab, wenn man es hinterher schließt.
Bugfix: Wenn ein Paar-/Spielername editiert wird, dann werden offene Suchergebnisse auf der Ergebnisse- bzw. Ranglistenseite jetzt auch (wieder?) lokal korrekt aktualisiert, und nicht nur bei anderen Netzwerkteilnehmern.
Optimierung/Deduplication: Unnötigerweise gesondert implementierte Funktionen zusammengefasst: - setMarker() und removeMarker() - listSetMarker() und listRemoveAllMarkers() - moveMarkerUp() und moveMarkerDown()
Neu: Es kann jetzt bereits vor dem Beginn des Turniers eine Auslosung eingegeben werden. Sofern die Auslosung schon vor der 1. Runde feststeht, kann somit gleich von Anfang an die automatische Tisch- bzw. Paarauswahl genutzt werden. Passend dazu gibt es jetzt eine neue Seite, die optional per „Extras“ → „Übersicht Auslosung“ angezeigt werden kann und die nach Tischen sortierte Auslosung samt fehlender Tische und Paare enthält.
Neu: Wenn „Allein gekommene Spieler berücksichtigen“ ausgewählt ist, dann können Spieler mit der entsprechenden Markierung jetzt per Kontextmenü mit einem Klick automatisch zu einem Paar zusammengeführt und ummarkiert werden.
Neu: Die „Automatischen Markierungen“ wurden erweitert: Das automatische Setzen einer Markierung war dafür gedacht, allein gekommene Spieler bei einem Feste-Paare-Turnier zu identifizieren. Mit der neuen Option „Allein gekommene Spieler berücksichtigen“ zeigt die Anmeldeseite jetzt auch an, wie der viele Anmeldungen allein gekommene Spieler sind, und ob die Anmeldungen okay für den Turnierstart sind (fehlen noch einzelne Spieler und/oder ein Paar, damit es aufgeht). Die gewählten Einstellungen werden in der Datenbank gespeichert und gehen somit beim Schießen und wieder Öffnen nicht verloren.
Bugfix: Beim Anzeigen der Server- bzw. Client-Seite ändert sich jetzt die Größe des Hauptfensters nicht mehr.
Verbesserung/Bugfix: Wenn beim Anlegen einer neuen Datenbank eine Datei überschrieben werden soll, dann wird jetzt geprüft, ob es eine Datenbank ist, die momentan von einer anderen Instanz von Muckturnier geöffnet ist. In diesem Fall wird das Überschreiben dann abgelehnt.
Neu: Neben der Anzahl der angemeldeten Paare/Spieler wird (sofern eine korrekt teilbare Anzahl an Anmeldungen vorliegt) jetzt auch auch Anzahl der besetzten Tische angezeigt. Anstatt nur anzuzeigen, dass die Anzahl der Paare/Spieler nicht teilbar ist, wird jetzt angezeigt, was noch fehlt.
Optimierung: Die Anzahl der SQL-Querys wurde durch Cachen minimiert und die Querys an sich wo möglich optimiert. Damit werden jetzt auch endlich ein paar PHP-Altlasten über Bord geworfen:
Die Anzahl der angemeldeten Paare/Spieler wird jetzt, wenn sich etwas ändert, als Variable gespeichert, anstatt sie immer wieder per Query zu ermitteln (und das geschah erstaunlich oft!).
Es werden jetzt, wenn Markierungen und Namen gebraucht werden, nur die Markierungsliste per SQL geholt und die Namen aus dieser Liste generiert (die Liste enthält sowieso alle Paar-/ Spielernamen). Außerdem ist das Query jetzt einfacher und sollte somit auch schneller sein.
Der Rundenstatus (abgeschlossen oder nicht) wird jetzt gecachet, wenn ein Spielstand eingegeben oder gelöscht wird. Bisher fragten immer sowohl die Ergebnisse- als auch die Ranglistenseite zwei mal hintereinander exakt die selben Daten per SQL-Query an.
Die fehlenden Tische werden jetzt mit einem effektiveren Query ermittelt.
Unterm Strich resultiert das z. B. bei der Eingabe des Feste-Paare-Testdatensatzes in einer Reduktion der ausgeführten Querys um 36 % (353 Anfragen bisher, 225 jetzt).
Optimierung: Wo möglich bzw. sinnvoll kommen jetzt besser passende Qt-Container für Daten zum Einsatz (z. B. QVector anstatt QList oder QHash anstatt QMap). Das sollte den Speicherbedarf verringern und die Geschwindigkeit steigern (ob mess- bzw. fühlbar sei dahingestellt ;-).