From 334e5b03a865d6b7810eb6bbddcf7405e247f0ce Mon Sep 17 00:00:00 2001 From: Marc Froehlich Date: Mon, 20 Jul 2026 22:27:53 +0200 Subject: [PATCH] manual refactoring --- .github/workflows/tagged-release.yml | 10 +- github_docs/Home.md | 56 ++------ github_docs/de-Home.md | 123 +++++++++++----- github_docs/en-Home.md | 125 ++++++++++++----- .../kst4contest/controller/BeaconTask.java | 3 +- website/.eleventy.js | 79 ++++++++++- website/src/_layouts/base.njk | 8 +- website/src/features/airscout.md | 4 +- website/src/features/dual-chat.md | 5 +- website/src/features/dx-cluster.md | 5 +- website/src/features/log-sync.md | 4 +- website/src/features/macros.md | 4 +- website/src/features/priority-score.md | 4 +- website/src/features/sked-reminder.md | 4 +- website/src/features/timeline.md | 4 +- website/src/index.njk | 132 ++++++++++++++---- website/src/manual/de/index.njk | 4 +- website/src/manual/en/index.njk | 4 +- 18 files changed, 409 insertions(+), 169 deletions(-) diff --git a/.github/workflows/tagged-release.yml b/.github/workflows/tagged-release.yml index 929d4d2..15c200e 100644 --- a/.github/workflows/tagged-release.yml +++ b/.github/workflows/tagged-release.yml @@ -435,12 +435,14 @@ jobs: FLATPAK_GPG_KEY_ID=$(gpg --list-secret-keys --with-colons | awk -F: '/^fpr/{print $10; exit}') echo "FLATPAK_GPG_KEY_ID=$FLATPAK_GPG_KEY_ID" >> "$GITHUB_ENV" - - name: Determine OSTree branch + - name: Determine OSTree branch and flatpakref filename run: | if [[ "${{ github.ref_name }}" == beta-* ]]; then echo "OSTREE_BRANCH=beta" >> "$GITHUB_ENV" + echo "FLATPAKREF_NAME=de.x08.KST4Contest.beta.flatpakref" >> "$GITHUB_ENV" else echo "OSTREE_BRANCH=stable" >> "$GITHUB_ENV" + echo "FLATPAKREF_NAME=de.x08.KST4Contest.flatpakref" >> "$GITHUB_ENV" fi - name: Build Flatpak repo @@ -454,7 +456,7 @@ jobs: REPO_NAME="${GITHUB_REPOSITORY#*/}" PAGES_URL="https://${GITHUB_REPOSITORY_OWNER}.github.io/${REPO_NAME}/" GPG_KEY_B64=$(gpg --export "$FLATPAK_GPG_KEY_ID" | base64 -w 0) - cat > "dist/de.x08.KST4Contest.${OSTREE_BRANCH}.flatpakref" << EOF + cat > "dist/${FLATPAKREF_NAME}" << EOF [Flatpak Ref] Name=de.x08.KST4Contest Branch=${OSTREE_BRANCH} @@ -469,7 +471,7 @@ jobs: uses: actions/upload-artifact@v4.3.4 with: name: flatpakref - path: dist/de.x08.KST4Contest.*.flatpakref + path: dist/*.flatpakref - name: Upload Flatpak OSTree repo uses: actions/upload-artifact@v4.3.4 @@ -747,7 +749,7 @@ jobs: release-assets/debian/KST4Contest-${{ github.ref_name }}-debian-amd64.deb, release-assets/fedora/KST4Contest-${{ github.ref_name }}-fedora-x86_64.rpm, release-assets/archlinux/KST4Contest-${{ github.ref_name }}-archlinux-*.pkg.tar.zst, - release-assets/flatpakref/de.x08.KST4Contest.flatpakref, + release-assets/flatpakref/*.flatpakref, release-assets/macos/KST4Contest-${{ github.ref_name }}-macos-*.dmg, release-assets/docs/KST4Contest-${{ github.ref_name }}-manual-en.pdf, release-assets/docs/KST4Contest-${{ github.ref_name }}-manual-de.pdf diff --git a/github_docs/Home.md b/github_docs/Home.md index 4352b32..e41f87c 100644 --- a/github_docs/Home.md +++ b/github_docs/Home.md @@ -1,53 +1,25 @@ -# KST4Contest – Wiki +# KST4Contest -**KST4Contest** (auch bekannt als *PraktiKST*) ist ein Java-basierter Chat-Client für den [ON4KST-Chat](http://www.on4kst.info/chat/), speziell entwickelt für den Contest-Betrieb auf den VHF/UHF/SHF-Bändern. +KST4Contest is a desktop client for the [ON4KST Chat](https://www.on4kst.org/chat/login.php), developed for VHF, UHF and SHF contest operation. It combines chat, candidate selection, sked planning, aircraft scatter information and connections to logging and station software. -Entwickelt von **DO5AMF (Marc Fröhlich)**, Operator bei DM5M. +KST4Contest ist ein Desktop-Client für den [ON4KST-Chat](https://www.on4kst.org/chat/login.php), der für den Contest-Betrieb auf den VHF-, UHF- und SHF-Bändern entwickelt wurde. Er verbindet Chat, Stationsauswahl, Sked-Planung, Aircraft-Scatter-Daten sowie die Anbindung an Log- und Stationssoftware. + +Developed by / Entwickelt von **DO5AMF (Marc Fröhlich)**, operator at / Operator bei DM5M. --- -## 🌐 Sprache / Language +## Language / Sprache -| 🇩🇪 Deutsch | 🇬🇧 English | +| Deutsch | English | |---|---| -| [Startseite (Deutsch)](de-Home) | [Home (English)](en-Home) | +| [Deutsches Handbuch](de-Home) | [English manual](en-Home) | --- -## 🇩🇪 Inhalt (Deutsch) +## Project links / Projektlinks -| Seite | Inhalt | -|---|---| -| [Installation](de-Installation) | Download, Java-Voraussetzungen, Update | -| [Konfiguration](de-Konfiguration) | Alle Einstellungen im Detail | -| [Log-Synchronisation](de-Log-Synchronisation) | UCXLog, N1MM+, QARTest, DXLog.net, WinTest | -| [AirScout-Integration](de-AirScout-Integration) | Flugzeug-Scatter-Erkennung | -| [DX-Cluster-Server](de-DX-Cluster-Server) | Integrierter DX-Cluster für das Log-Programm | -| [Funktionen](de-Funktionen) | Alle Features im Überblick | -| [Makros und Variablen](de-Makros-und-Variablen) | Text-Snippets, Shortcuts, Variablen | -| [Benutzeroberfläche](de-Benutzeroberflaeche) | UI-Erklärung und Bedienung | -| [Changelog](de-Changelog) | Versionsgeschichte | - ---- - -## 🇬🇧 Contents (English) - -| Page | Contents | -|---|---| -| [Installation](en-Installation) | Download, Java requirements, updates | -| [Configuration](en-Configuration) | All settings in detail | -| [Log Synchronisation](en-Log-Sync) | UCXLog, N1MM+, QARTest, DXLog.net, WinTest | -| [AirScout Integration](en-AirScout-Integration) | Aircraft scatter detection | -| [DX Cluster Server](en-DX-Cluster-Server) | Built-in DX cluster for your logging software | -| [Features](en-Features) | All features at a glance | -| [Macros and Variables](en-Macros-and-Variables) | Text snippets, shortcuts, variables | -| [User Interface](en-User-Interface) | UI explained and how to operate it | -| [Changelog](en-Changelog) | Version history | - ---- - -## Schnellinfo / Quick Info - -- **Download**: https://github.com/praktimarc/kst4contest/releases -- **GitHub**: https://github.com/praktimarc/kst4contest -- **Kontakt / Contact**: praktimarc+kst4contest@gmail.com +- [Project website / Projektwebseite](https://kst4contest.hamradioonline.de/) +- [Download the current stable release / Aktuelle stabile Version herunterladen](https://github.com/praktimarc/kst4contest/releases/latest) +- [Source code / Quellcode](https://github.com/praktimarc/kst4contest) +- [Bug reports and feature requests / Fehler und Funktionswünsche](https://github.com/praktimarc/kst4contest/issues) +- [Online manual / Online-Handbuch](https://kst4contest.hamradioonline.de/manual/) \ No newline at end of file diff --git a/github_docs/de-Home.md b/github_docs/de-Home.md index d7c6fd0..7edff2f 100644 --- a/github_docs/de-Home.md +++ b/github_docs/de-Home.md @@ -1,10 +1,64 @@ -# KST4Contest – Wiki +# KST4Contest – Handbuch -> 🇬🇧 [English version](en-Home) | 🇩🇪 Du liest gerade die deutsche Version +> [English version](en-Home) | Du liest gerade die deutsche Version -**KST4Contest** (auch bekannt als *PraktiKST*) ist ein Java-basierter Chat-Client für den [ON4KST-Chat](http://www.on4kst.info/chat/), der speziell für den Contest-Betrieb auf den VHF/UHF/SHF-Bändern (144 MHz und aufwärts) entwickelt wurde. +KST4Contest ist ein Desktop-Client für den [ON4KST-Chat](https://www.on4kst.org/chat/login.php), der für den Contest-Betrieb auf den VHF-, UHF- und SHF-Bändern entwickelt wurde. Er verbindet Chat, Stationsauswahl, Sked-Planung, Aircraft-Scatter-Daten und die Anbindung an weitere Programme in einer gemeinsamen Arbeitsoberfläche. -Entwickelt von **DO5AMF (Marc Fröhlich)**, Operator bei DM5M. +Entwickelt wird KST4Contest von **DO5AMF (Marc Fröhlich)**, Operator bei DM5M und (seit Mai 2025) **DN9APW (Philipp Wagner)**. Der Quellcode ist öffentlich auf [GitHub](https://github.com/praktimarc/kst4contest) verfügbar. + +--- + +## Wozu braucht man einen eigenen ON4KST-Client? + +Der ON4KST-Chat liefert während eines Contests eine große Menge an Informationen: aktive Stationen, Locator, Frequenzen, Sked-Anfragen und Hinweise auf aktuelle Aktivität. Das eigentliche Problem besteht nicht darin, diese Daten zu sehen. Man muss daraus rechtzeitig die nächste sinnvolle Verbindung ableiten. + +KST4Contest wertet die verfügbaren Informationen aus, ordnet sie und stellt sie in einem contestgerechten Arbeitsablauf dar. Dabei werden unter anderem Antennenrichtung, Entfernung, bekannte Bänder und Frequenzen, bereits gearbeitete Stationen, Chat-Aktivität und Aircraft-Scatter-Zeiten berücksichtigt. + +Das Programm entscheidet jedoch nicht, welches QSO tatsächlich möglich ist. Der Prioritätsscore, die AP-Timeline und die verschiedenen Hervorhebungen sind Entscheidungshilfen. Die endgültige Beurteilung bleibt beim Operator – schon deshalb, weil auch ein recht überzeugender Computerbildschirm noch keine Funkverbindung herstellt. + +--- + +## Was KST4Contest im Contest unterstützt + +- **Chat beobachten und einordnen:** KST4Contest kann zwei ON4KST-Chat-Kategorien gleichzeitig darstellen. Nachrichten, Frequenzangaben und bekannte Bandaktivitäten werden den jeweiligen Stationen zugeordnet. + +- **Relevante Stationen herausfiltern:** Richtungs-, Entfernungs-, Worked- und NOT-QRV-Filter reduzieren die Benutzerliste auf die Stationen, die für den aktuellen Betriebszustand tatsächlich interessant sind. + +- **Kandidaten priorisieren:** Das Score-System bewertet aktive Chatmember anhand mehrerer bekannter Kriterien. Die derzeit relevantesten Kandidaten erscheinen zusätzlich in einer eigenen Prioritätsliste. + +- **Skeds vorbereiten und im Blick behalten:** Sked-Erinnerungen, automatische Vorwarnungen und die AP-Timeline helfen dabei, vereinbarte Verbindungen nicht zwischen Chat, Log und laufendem CQ-Betrieb zu verlieren. + +- **Aircraft Scatter einbeziehen:** Über die AirScout-Schnittstelle werden geeignete Flugzeuge und erwartete Reflexionszeiten in die Stationsbewertung und Zeitplanung übernommen. + +- **Log und Funkstation anbinden:** KST4Contest synchronisiert gearbeitete Stationen und Frequenzinformationen mit unterstützten Logprogrammen. Zusätzlich stehen Schnittstellen zu Win-Test, PSTRotator und ein integrierter DX-Cluster-Server zur Verfügung. + +- **Stationen und Funkwege darstellen:** Die Stationskarte zeigt aktive Chatmember, Locator-Felder, Antennenrichtungen und den Weg zur ausgewählten Station. Für ausgewählte Verbindungen kann außerdem ein Geländeprofil berechnet werden. + +Die Funktionen greifen ineinander. Eine erkannte Frequenz kann beispielsweise einem aktiven Band zugeordnet werden, der Worked-Status stammt aus dem Log, Aircraft-Scatter-Daten ergänzen die zeitliche Bewertung und der daraus berechnete Score beeinflusst die Prioritätsliste. Fehlende oder veraltete Eingangsdaten können deshalb auch das Ergebnis beeinflussen. + +--- + +## Voraussetzungen + +Für die Anmeldung ist ein registrierter ON4KST-Account erforderlich. Registrierung und Login sind über die [offizielle ON4KST-Anmeldeseite](https://www.on4kst.org/chat/login.php) erreichbar. + +Die offizielle Sprache im ON4KST-Chat ist Englisch. Das gilt auch für Nachrichten an Stationen aus dem eigenen Land. Übliche Amateurfunk-Abkürzungen wie `pse`, `agn`, `qrg`, `dir`, `rrr`, `tnx` oder `73` sind dabei normal und meistens erheblich schneller als ausformulierte Prosa. + +Download, unterstützte Betriebssysteme und Installationswege sind im Kapitel [Installation](de-Installation) beschrieben. + +--- + +## Versionsstand dieses Handbuchs + +Dieses Handbuch beschreibt die stabile Version **v1.41.1**. + +Funktionen oder Änderungen, die nur im aktuellen Entwicklungsstand enthalten sind, werden ausdrücklich als **Nightly / v1.42** gekennzeichnet. Fehlt eine solche Kennzeichnung, bezieht sich die Beschreibung auf die stabile Version. + +- [Aktuelle stabile Version herunterladen](https://github.com/praktimarc/kst4contest/releases/latest) +- [Nightly-Builds und automatisierte Builds](https://github.com/praktimarc/kst4contest/actions) +- [Versionsgeschichte](de-Changelog) + +Für einen Contest ist grundsätzlich die stabile Version zu empfehlen. Nightly-Builds enthalten neuere Korrekturen und Funktionen, können sich aber zwischen zwei Builds verändern. Sie sind sinnvoll, wenn eine bestimmte Änderung getestet werden soll – weniger sinnvoll ist der erste Versuch zehn Minuten vor Contestbeginn. --- @@ -12,51 +66,52 @@ Entwickelt von **DO5AMF (Marc Fröhlich)**, Operator bei DM5M. | Seite | Inhalt | |---|---| -| [Installation](de-Installation) | Download, Java-Voraussetzungen, Update | -| [Konfiguration](de-Konfiguration) | Alle Einstellungen im Detail | -| [Log-Synchronisation](de-Log-Synchronisation) | UCXLog, N1MM+, QARTest, DXLog.net, WinTest | -| [AirScout-Integration](de-AirScout-Integration) | Flugzeug-Scatter-Erkennung | -| [DX-Cluster-Server](de-DX-Cluster-Server) | Integrierter DX-Cluster für das Log-Programm | -| [Funktionen](de-Funktionen) | Alle Features im Überblick | -| [Makros und Variablen](de-Makros-und-Variablen) | Text-Snippets, Shortcuts, Variablen | -| [Benutzeroberfläche](de-Benutzeroberflaeche) | UI-Erklärung und Bedienung | -| [Changelog](de-Changelog) | Versionsgeschichte | +| [Installation](de-Installation) | ON4KST-Account, Download, Installation und Updates | +| [Konfiguration](de-Konfiguration) | Login, Station, Bänder, Benutzeroberfläche und externe Schnittstellen | +| [Log-Synchronisation](de-Log-Synchronisation) | Simplelogfile, UCXLog, N1MM+, QARTest, DXLog.net und Win-Test | +| [AirScout-Integration](de-AirScout-Integration) | Verbindung zu AirScout und Auswertung von Aircraft-Scatter-Zeiten | +| [DX-Cluster-Server](de-DX-Cluster-Server) | Übergabe erkannter Möglichkeiten an das Logprogramm | +| [Funktionen](de-Funktionen) | Arbeitsweise, Herleitung und Grenzen der einzelnen Funktionen | +| [Makros und Variablen](de-Makros-und-Variablen) | Wiederverwendbare Texte, Shortcuts und automatisch ersetzte Werte | +| [Benutzeroberfläche](de-Benutzeroberflaeche) | Aufbau der Oberfläche und Bedienung im Contest | +| [Changelog](de-Changelog) | Releases, Nightly-Änderungen und behobene Fehler | --- -## Was ist KST4Contest? +## Kontakt und Support -Der ON4KST-Chat ist der De-facto-Standard für Skeds auf den 144-MHz-und-höher-Bändern. KST4Contest erweitert die Chat-Nutzung um contest-spezifische Funktionen: +- **Download:** [Aktuelle stabile Version](https://github.com/praktimarc/kst4contest/releases/latest) +- **Quellcode:** [praktimarc/kst4contest](https://github.com/praktimarc/kst4contest) +- **Fehler und Funktionswünsche:** [GitHub Issues](https://github.com/praktimarc/kst4contest/issues) +- **E-Mail:** praktimarc+kst4contest@gmail.com + Bitte nur für Themen verwenden, die KST4Contest betreffen. -- **Worked-Markierung**: Bereits gearbeitete Stationen werden farblich markiert, direkt aus dem Logprogramm via UDP synchronisiert. -- **Sked-Richtungs-Erkennung**: Wenn eine Station eine andere aus deiner Richtung anruft, wird sie grün und fett hervorgehoben. -- **QRG-Erkennung**: KST4Contest liest Frequenzen automatisch aus dem Chat-Verkehr und zeigt sie in der Benutzerliste an. -- **AirScout-Interface**: Anzeige reflektierbarer Flugzeuge direkt in der Benutzerliste. -- **Integrierter DX-Cluster-Server**: Spots werden direkt an das Logprogramm gesendet. -- **Dark Mode** (ab v1.26): Schont die Augen in der Nacht. -- **Multi-Channel-Login** (ab v1.26): Gleichzeitig in zwei Chat-Kategorien einloggen. +### Einen Fehler melden ---- +Ein Fehler lässt sich wesentlich schneller nachvollziehen, wenn die Meldung mindestens folgende Angaben enthält: -## Kontakt & Support +1. verwendete KST4Contest-Version, +2. Betriebssystem und Installationsart, +3. genaue Schritte bis zum Fehler, +4. erwartetes und tatsächlich beobachtetes Verhalten, +5. gegebenenfalls einen Screenshot, +6. die Fehler-Logdatei. -- **E-Mail**: praktimarc+kst4contest@gmail.com *(nur für kst4contest-Themen)* -- **GitHub**: https://github.com/praktimarc/kst4contest -- **Download**: https://github.com/praktimarc/kst4contest/releases/latest +Die Fehler-Logdatei wird hier gespeichert: -### Fehler melden (Issue erstellen) - -Beim Melden eines Fehlers bitte **immer die Logdatei anhängen**. KST4Contest schreibt automatisch eine Fehler-Logdatei (nur Fehlermeldungen, keine persönlichen Daten): - -| Betriebssystem | Pfad zur Logdatei | +| Betriebssystem | Pfad | |---|---| | Linux / macOS | `~/.praktiKST/kst4contest-errors.log` | | Windows | `C:\Users\\.praktiKST\kst4contest-errors.log` | -Beim Erstellen eines Issues auf GitHub steht eine Vorlage bereit, die alle wichtigen Felder abfragt. +Vor dem Hochladen sollte die Datei kurz geprüft werden. Ein Fehlerprotokoll enthält überwiegend technische Informationen, kann abhängig vom Fehler aber beispielsweise lokale Dateipfade oder weitere Kontextdaten enthalten. + +In Datei- und Verzeichnisnamen wird teilweise noch der technische Name `praktiKST` verwendet. Gemeint ist dasselbe Programm. --- ## Danksagungen -Besonderer Dank gilt: Gianluca Costantino (IU3OAR), Alessandro Murador (IZ3VTH), Reczetár István (HA1FV), OM0AAO (Viliam Petrik, DX-Cluster-Idee), DC9DJ (Konrad Neitzel, Projektstruktur), DO5ALF (Andreas, Webmaster funkerportal.de), PE0WGA (Franz van Velzen, Tester) sowie allen weiteren Testern und Ideengebern. +KST4Contest wurde durch Rückmeldungen aus dem praktischen Contest-Betrieb wesentlich verbessert. + +Besonderer Dank gilt Gianluca Costantino (IU3OAR), Alessandro Murador (IZ3VTH), Reczetár István (HA1FV), Viliam Petrik (OM0AAO, Idee zum DX-Cluster), Konrad Neitzel (DC9DJ, Projektstruktur), Andreas (DO5ALF, Webmaster von funkerportal.de), Franz van Velzen (PE0WGA, Tester), DN9APW als neuem Entwickler im Team und Master über die CI/CD pipelines sowie allen weiteren Testern und Ideengebern. \ No newline at end of file diff --git a/github_docs/en-Home.md b/github_docs/en-Home.md index f264797..d363e7b 100644 --- a/github_docs/en-Home.md +++ b/github_docs/en-Home.md @@ -1,62 +1,117 @@ -# KST4Contest – Wiki +# KST4Contest – User Manual -> 🇬🇧 You are reading the English version | 🇩🇪 [Deutsche Version](de-Home) +> You are reading the English version | [Deutsche Version](de-Home) -**KST4Contest** (also known as *PraktiKST*) is a Java-based chat client for the [ON4KST Chat](http://www.on4kst.info/chat/), specifically designed for contest operation on the VHF/UHF/SHF bands (144 MHz and above). +KST4Contest is a desktop client for the [ON4KST Chat](https://www.on4kst.org/chat/login.php), developed for VHF, UHF and SHF contest operation. It brings chat, candidate selection, sked planning, aircraft scatter data and external station software together in a single operating interface. -Developed by **DO5AMF (Marc Fröhlich)**, operator at DM5M. +KST4Contest is developed by **DO5AMF (Marc Fröhlich)**, operator at DM5M and (since May 2025) **DN9APW (Philipp Wagner)**. The source code is publicly available on [GitHub](https://github.com/praktimarc/kst4contest). --- -## Quick Navigation +## Why use a dedicated ON4KST client? + +During a contest, the ON4KST Chat provides a considerable amount of information: active stations, locators, frequencies, sked requests and indications of current activity. The actual problem is not seeing this data. It is turning it into the next useful contact in time. + +KST4Contest evaluates the available information, puts it into context and presents it as part of a contest-oriented workflow. This includes antenna direction, distance, known bands and frequencies, worked status, chat activity and aircraft scatter timing. + +The program does not decide which QSO is actually possible. Priority scores, the AP timeline and visual highlights are decision aids. The final judgement remains with the operator – not least because even a very convincing computer screen cannot complete a radio contact. + +--- + +## How KST4Contest supports contest operation + +- **Observe and organise chat activity:** KST4Contest can display two ON4KST chat categories at the same time. Messages, frequency information and known band activity are assigned to the corresponding stations. + +- **Reduce the station list:** Direction, distance, worked and NOT-QRV filters help limit the user list to stations that are relevant to the current operating situation. + +- **Prioritise candidates:** The score system evaluates active chat members using several known criteria. The currently most relevant candidates are also shown in a separate priority list. + +- **Prepare skeds and keep them visible:** Sked reminders, automatic advance messages and the AP timeline help prevent scheduled contacts from disappearing somewhere between chat, logging and ongoing CQ operation. + +- **Include aircraft scatter information:** The AirScout interface brings suitable aircraft and expected reflection times into candidate evaluation and sked planning. + +- **Connect the logger and station equipment:** KST4Contest synchronises worked stations and frequency information with supported logging software. It also provides interfaces for Win-Test, PSTRotator and a built-in DX Cluster server. + +- **Display stations and radio paths:** The station map shows active chat members, locator squares, antenna directions and the path to the selected station. A terrain profile can also be calculated for selected paths. + +These functions share information. A detected frequency can indicate an active band, worked status comes from the logger, aircraft scatter data adds timing information and the resulting score affects the priority list. Missing or outdated input data can therefore affect the result as well. + +--- + +## Requirements + +A registered ON4KST account is required. Registration and login are available from the [official ON4KST login page](https://www.on4kst.org/chat/login.php). + +English is the official language of the ON4KST Chat. This also applies when communicating with stations from your own country. Common amateur radio abbreviations such as `pse`, `agn`, `qrg`, `dir`, `rrr`, `tnx` and `73` are normal and usually considerably faster than carefully written prose. + +Downloads, supported operating systems and installation methods are described in [Installation](en-Installation). + +--- + +## Manual version + +This manual describes the stable release **v1.41.1**. + +Features or changes that are only available in the current development version are explicitly marked as **Nightly / v1.42**. If no such label is present, the description refers to the stable release. + +- [Download the current stable release](https://github.com/praktimarc/kst4contest/releases/latest) +- [Nightly and automated builds](https://github.com/praktimarc/kst4contest/actions) +- [Version history](en-Changelog) + +For contest operation, the stable release is generally the appropriate choice. Nightly builds contain newer fixes and features, but may change between builds. They are useful when a particular change needs testing. Trying one for the first time ten minutes before a contest is less useful. + +--- + +## Quick navigation | Page | Contents | |---|---| -| [Installation](en-Installation) | Download, Java requirements, update | -| [Configuration](en-Configuration) | All settings in detail | -| [Log Synchronisation](en-Log-Sync) | UCXLog, N1MM+, QARTest, DXLog.net, WinTest | -| [AirScout Integration](en-AirScout-Integration) | Aircraft scatter detection | -| [DX Cluster Server](en-DX-Cluster-Server) | Built-in DX cluster for your logging software | -| [Features](en-Features) | All features at a glance | -| [Macros and Variables](en-Macros-and-Variables) | Text snippets, shortcuts, variables | -| [User Interface](en-User-Interface) | UI explanation and operation | -| [Changelog](en-Changelog) | Version history | +| [Installation](en-Installation) | ON4KST account, downloads, installation and updates | +| [Configuration](en-Configuration) | Login, station, bands, user interface and external connections | +| [Log Synchronisation](en-Log-Sync) | Simplelogfile, UCXLog, N1MM+, QARTest, DXLog.net and Win-Test | +| [AirScout Integration](en-AirScout-Integration) | Connecting AirScout and evaluating aircraft scatter timing | +| [DX Cluster Server](en-DX-Cluster-Server) | Passing detected opportunities to logging software | +| [Features](en-Features) | Operation, reasoning and limitations of individual functions | +| [Macros and Variables](en-Macros-and-Variables) | Reusable messages, shortcuts and automatically substituted values | +| [User Interface](en-User-Interface) | Interface layout and operation during a contest | +| [Changelog](en-Changelog) | Releases, Nightly changes and resolved issues | --- -## What is KST4Contest? +## Contact and support -The ON4KST Chat is the de-facto standard for skeds on the 144 MHz and higher bands. KST4Contest enhances the chat experience with contest-specific features: +- **Download:** [Current stable release](https://github.com/praktimarc/kst4contest/releases/latest) +- **Source code:** [praktimarc/kst4contest](https://github.com/praktimarc/kst4contest) +- **Bug reports and feature requests:** [GitHub Issues](https://github.com/praktimarc/kst4contest/issues) +- **Email:** praktimarc+kst4contest@gmail.com + Please use this address only for KST4Contest-related topics. -- **Worked marking**: Stations already worked are highlighted visually, synchronised directly from your logging software via UDP. -- **Sked direction detection**: When a station calls another one from your direction, it is highlighted green and bold. -- **QRG detection**: KST4Contest automatically reads frequencies from the chat traffic and shows them in the user list. -- **AirScout interface**: Reflectable aircraft are shown directly in the user list. -- **Built-in DX cluster server**: Spots are sent directly to your logging software. -- **Dark mode** (from v1.26): Easy on the eyes during night-time operation. -- **Multi-channel login** (from v1.26): Simultaneously logged into two chat categories. +### Reporting a bug ---- +A problem is considerably easier to reproduce when the report contains at least: -## Contact & Support +1. the KST4Contest version, +2. the operating system and installation method, +3. the exact steps leading to the problem, +4. the expected and observed behaviour, +5. a screenshot where appropriate, +6. the error log file. -- **Email**: praktimarc+kst4contest@gmail.com *(for kst4contest topics only)* -- **GitHub**: https://github.com/praktimarc/kst4contest -- **Download**: https://github.com/praktimarc/kst4contest/releases/latest +The error log is stored at: -### Reporting a bug (creating an issue) - -When reporting a bug, please **always attach the log file**. KST4Contest automatically writes an error log (error messages only, no personal data): - -| Operating system | Log file location | +| Operating system | Path | |---|---| | Linux / macOS | `~/.praktiKST/kst4contest-errors.log` | | Windows | `C:\Users\\.praktiKST\kst4contest-errors.log` | -When opening an issue on GitHub, a template is provided that guides you through all relevant fields. +Please inspect the file briefly before uploading it. An error log mainly contains technical information, but depending on the problem it may also include local file paths or other contextual data. + +Some file and directory names still use the technical name `praktiKST`. They refer to the same program. --- ## Acknowledgements -Special thanks to: Gianluca Costantino (IU3OAR), Alessandro Murador (IZ3VTH), Reczetár István (HA1FV), OM0AAO (Viliam Petrik, DX cluster idea), DC9DJ (Konrad Neitzel, project structure), DO5ALF (Andreas, webmaster funkerportal.de), PE0WGA (Franz van Velzen, tester) and all other testers and contributors. +KST4Contest has benefited considerably from feedback gathered during actual contest operation. + +Special thanks go to Gianluca Costantino (IU3OAR), Alessandro Murador (IZ3VTH), Reczetár István (HA1FV), Viliam Petrik (OM0AAO, DX Cluster idea), Konrad Neitzel (DC9DJ, project structure), Andreas (DO5ALF, webmaster of funkerportal.de), Franz van Velzen (PE0WGA, testing), and all other testers and contributors. \ No newline at end of file diff --git a/src/main/java/kst4contest/controller/BeaconTask.java b/src/main/java/kst4contest/controller/BeaconTask.java index 8086226..5dd0e74 100644 --- a/src/main/java/kst4contest/controller/BeaconTask.java +++ b/src/main/java/kst4contest/controller/BeaconTask.java @@ -48,7 +48,8 @@ public class BeaconTask extends TimerTask { replaceVariables = replaceVariables.replaceAll("MYCALL", this.chatController.getChatPreferences().getStn_loginCallSign()); replaceVariables = replaceVariables.replaceAll("MYLOCATOR", this.chatController.getChatPreferences().getStn_loginLocatorMainCat()); replaceVariables = replaceVariables.replaceAll("MYQTF", this.chatController.getChatPreferences().getActualQTF().getValue() + ""); - replaceVariables = replaceVariables.replaceAll("SECONDQRG", this.chatController.getChatPreferences().getActualQTF().getValue() + ""); + replaceVariables = replaceVariables.replaceAll("SECONDQRG", this.chatController.getChatPreferences().getMYQRGSecondCat().getValue() + ""); + beaconMSG.setMessageText( diff --git a/website/.eleventy.js b/website/.eleventy.js index faa74fb..88839ad 100644 --- a/website/.eleventy.js +++ b/website/.eleventy.js @@ -3,6 +3,74 @@ const path = require("path"); const markdownIt = require("markdown-it"); const markdownItAnchor = require("markdown-it-anchor"); +const MANUAL_PAGE_ORDER = { + de: [ + "home", + "installation", + "konfiguration", + "log-synchronisation", + "airscout-integration", + "dx-cluster-server", + "funktionen", + "makros-und-variablen", + "benutzeroberflaeche", + "changelog" + ], + en: [ + "home", + "installation", + "configuration", + "log-sync", + "airscout-integration", + "dx-cluster-server", + "features", + "macros-and-variables", + "user-interface", + "changelog" + ] +}; + +function markdownToPlainText(value) { + return (value || "") + .replace(/!\[([^\]]*)\]\([^)]+\)/g, "$1") + .replace(/\[([^\]]+)\]\([^)]+\)/g, "$1") + .replace(/<[^>]+>/g, "") + .replace(/[*_~`]/g, "") + .replace(/\s+/g, " ") + .trim(); +} + +function extractManualTitle(raw, fallbackTitle) { + const heading = (raw || "").match(/^#\s+(.+)$/m); + return heading ? markdownToPlainText(heading[1]) : fallbackTitle; +} + +function extractManualSummary(raw) { + const blocks = (raw || "").split(/\r?\n\s*\r?\n/); + + for (const block of blocks) { + const trimmed = block.trim(); + + if (!trimmed + || /^(#|>|\||---|```|!\[)/.test(trimmed) + || /^[-*+]\s/.test(trimmed) + || /^\d+[.)]\s/.test(trimmed)) { + continue; + } + + return markdownToPlainText(trimmed); + } + + return ""; +} + +function getManualPageOrder(lang, slug) { + const configuredOrder = MANUAL_PAGE_ORDER[lang] || []; + const index = configuredOrder.indexOf(slug); + + return index >= 0 ? index : 999; +} + function rewriteManualLinks(content, lang) { return (content || "") // GitHub-Wiki-Links im Stil [[de-Installation]] oder [[en-Installation]] @@ -96,19 +164,28 @@ module.exports = function (eleventyConfig) { .replace(/\.md$/, "") .toLowerCase(); - const title = file + const fallbackTitle = file .replace(/^en-/, "") .replace(/^de-/, "") .replace(/\.md$/, "") .replace(/-/g, " "); + const title = extractManualTitle(raw, fallbackTitle); + return { file, lang, slug, title, + summary: extractManualSummary(raw), + order: getManualPageOrder(lang, slug), content: rewriteManualLinks(raw, lang) }; + }) + .sort((a, b) => { + return a.lang.localeCompare(b.lang) + || a.order - b.order + || a.title.localeCompare(b.title); }); }); diff --git a/website/src/_layouts/base.njk b/website/src/_layouts/base.njk index 57c7e65..998f111 100644 --- a/website/src/_layouts/base.njk +++ b/website/src/_layouts/base.njk @@ -5,12 +5,12 @@ {{ title or "KST4Contest" }} - + - + @@ -20,7 +20,7 @@ - + @@ -53,7 +53,7 @@