mirror of
https://github.com/praktimarc/kst4contest.git
synced 2026-08-04 01:15:27 +02:00
Changed Autoanswer implementation (cooldown timer, message routing) and its documentation
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
@@ -64,9 +64,18 @@ Die Filter-Leiste (ab v1.21 als Flowpane für kleine Bildschirme):
|
||||
|
||||
## Stationsinfo-Panel (Further Info)
|
||||
|
||||
Rechts unten: Zeigt alle Nachrichten einer ausgewählten Station (CQ-Nachrichten und PMs in einem Panel). Ein Nachrichtenfilter lässt sich über den Standard-Filter in den Preferences vorbelegen.
|
||||
Rechts unten werden die Nachrichten der ausgewählten Station zusammengeführt. Dazu gehören öffentliche Nachrichten, Privatnachrichten an die eigene Station und – soweit im Chat sichtbar – Privatnachrichten an andere Stationen.
|
||||
|
||||
Hier können auch **Sked-Erinnerungen** aktiviert werden.
|
||||
Der im Panel gewählte Filter bestimmt, welche dieser Nachrichten angezeigt werden. Unter **Settings → GUI** lässt sich festlegen, welcher Filter beim Öffnen einer Stationsinformation vorausgewählt ist:
|
||||
|
||||
- alle Nachrichten,
|
||||
- Privatnachrichten an die eigene Station,
|
||||
- Privatnachrichten an andere Stationen oder
|
||||
- öffentliche Nachrichten.
|
||||
|
||||
Die Einstellung verändert nur die Darstellung im Stationsinfo-Panel. Nachrichten werden dadurch weder verworfen noch aus den übrigen Nachrichtentabellen entfernt. Der Filter kann im Panel jederzeit für die aktuell betrachtete Station gewechselt werden.
|
||||
|
||||
Hier können auch **Sked-Erinnerungen / Wecker** für beide Skkedpartner aktiviert werden.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -115,6 +115,22 @@ KST4Contest erkennt solche Nachrichten, die das eigene Rufzeichen enthalten, und
|
||||
|
||||
---
|
||||
|
||||
## Automatische Antworten auf Privatnachrichten (ab v1.25)
|
||||
|
||||
Nicht jede im ON4KST-Chat eingeloggte Station nimmt am gerade laufenden Contest teil. Trotzdem werden Sked-Anfragen während größerer Contests teilweise unkoordiniert und in großer Zahl an erreichbare Rufzeichen verteilt. Ohne automatische Antwort müssten diese Stationen immer wieder von Hand erklären, dass sie nicht mitfunken oder keine Skeds fahren.
|
||||
|
||||
KST4Contest kann darauf mit einem vorher festgelegten Text reagieren. Die eingehende Privatnachricht bleibt dabei sichtbar; sie wird weder blockiert noch verworfen. Davon getrennt lässt sich eine QRG-Antwort aktivieren, die auf typische Fragen wie `qrg?`, `freq?` oder `pse qrg` reagiert.
|
||||
|
||||
Bei zwei gleichzeitig geöffneten Chat-Kategorien bleibt der Zusammenhang erhalten: Die Antwort wird in der Kategorie der eingegangenen Nachricht gesendet. Eine QRG-Anfrage erhält außerdem nur die QRG dieser Kategorie und nicht eine Liste aller konfigurierten Frequenzen.
|
||||
|
||||
Automatische Antworten benötigen Grenzen. KST4Contest versieht sie daher mit `[KST4C Automsg]`, ignoriert entsprechend gekennzeichnete Nachrichten bei der allgemeinen und QRG-bezogenen Antwort und begrenzt weitere Antworten an dieselbe Station in derselben Kategorie auf eine Nachricht innerhalb von zwei Minuten. Der Schutz gilt gemeinsam für beide Antwortarten.
|
||||
|
||||
Im Klartext: Die Funktion verhindert keine Massenanfragen. Sie verhindert aber, dass der Empfänger jede davon einzeln mit derselben Absage beantworten muss. Sie soll keine Unterhaltung simulieren und erst recht keine endlose Diskussion mit einem zweiten automatischen Client beginnen.
|
||||
|
||||
Konfiguration, erkannte QRG-Anfragen und genaue Kategorienzuordnung: [Konfiguration – Messagehandling Settings](de-Konfiguration#messagehandling-settings-ab-v125).
|
||||
|
||||
---
|
||||
|
||||
## Multi-Channel-Login (ab v1.26)
|
||||
|
||||
Gleichzeitiger Login in **zwei Chat-Kategorien** (z. B. 144 MHz und 432 MHz). Beide Chats werden parallel überwacht.
|
||||
|
||||
@@ -226,11 +226,68 @@ Im Klartext: Solange auf einer festen QRG CQ gerufen wird, spart der Beacon Arbe
|
||||
|
||||
## Messagehandling Settings (ab v1.25)
|
||||
|
||||
Neuer Einstellungsbereich mit folgenden Optionen:
|
||||

|
||||
|
||||
- **Auto-Antwort auf alle eingehenden Nachrichten**: Automatische Antwort auf Privatnachrichten konfigurierbar.
|
||||
- **Auto-Antwort mit eigener CQ-QRG**: Wenn jemand nach der eigenen QRG fragt, antwortet KST4Contest automatisch mit dem Inhalt der `MYQRG`-Variable.
|
||||
- **Standard-Filter für das Userinfo-Fenster**: Voreingestellter Nachrichtenfilter für das Stationsinfo-Fenster konfigurierbar *(für Gianluca :-) )*.
|
||||
Die wichtigste Anwendung der allgemeinen automatischen Antwort betrifft Stationen, die zwar im ON4KST-Chat eingeloggt sind, den laufenden Contest aber nicht mitfunken. Gerade während größerer Contests werden Sked-Anfragen teilweise unkoordiniert und in großer Zahl an eingeloggte Stationen verteilt, ohne vorher zu prüfen, ob sie überhaupt teilnehmen. Die Empfänger müssten sonst immer wieder dieselbe Absage schreiben.
|
||||
|
||||
KST4Contest kann darauf mit einem vorher festgelegten Text reagieren. Davon getrennt steht eine gezielte QRG-Auskunft zur Verfügung. Beide Funktionen können unabhängig voneinander aktiviert werden.
|
||||
|
||||
### Allgemeine automatische Antwort
|
||||
|
||||
**Enable automatic reply to all private messages** beantwortet eingehende Privatnachrichten mit dem Text im Feld rechts daneben. Es gibt einen gemeinsamen Text für beide Chat-Kategorien. Die beim Eingeben verwendete Groß- und Kleinschreibung bleibt erhalten.
|
||||
|
||||
Eine zweckmäßige Nachricht ist beispielsweise:
|
||||
|
||||
```text
|
||||
Sri, I am not taking part in this contest. No skeds.
|
||||
```
|
||||
|
||||
Die eingegangene Privatnachricht bleibt sichtbar. Die Funktion blockiert oder verwirft keine Anfrage, sondern erspart lediglich die wiederholte manuelle Antwort.
|
||||
|
||||
Die Antwort wird in derselben Chat-Kategorie gesendet, in der die Privatnachricht eingegangen ist. Das ist bei einem parallelen Login in zwei Kategorien entscheidend: Eine Nachricht aus dem Microwave-Chat darf nicht versehentlich im VHF/UHF-Chat beantwortet werden.
|
||||
|
||||
### Automatische QRG-Antwort
|
||||
|
||||
**Enable automatic QRG replies** reagiert auf typische QRG-Anfragen. Die Erkennung unterscheidet nicht zwischen Groß- und Kleinschreibung und sucht nach folgenden Textbestandteilen:
|
||||
|
||||
```text
|
||||
ur qrg?
|
||||
your qrg?
|
||||
qrg?
|
||||
freq?
|
||||
pse qrg
|
||||
```
|
||||
|
||||
Die Antwort enthält nur die QRG der Kategorie, in der die Anfrage eingegangen ist:
|
||||
|
||||
| Eingegangene Privatnachricht | Verwendete QRG |
|
||||
|---|---|
|
||||
| Hauptkategorie | aktuelle QRG der Hauptkategorie |
|
||||
| zweite Chat-Kategorie | aktuelle QRG der zweiten Kategorie |
|
||||
|
||||
Die Werte stammen aus denselben QRG-Feldern, die auch von `MYQRG` und `SECONDQRG` verwendet werden. Die Haupt-QRG kann manuell eingetragen oder durch die [TRX-Synchronisation](#trx-sync-einstellungen) aktualisiert werden. Für die zweite Kategorie wird der dort konfigurierte beziehungsweise manuell eingetragene Wert verwendet.
|
||||
|
||||
Sind die allgemeine und die QRG-bezogene Antwort gleichzeitig aktiviert, hat die QRG-Antwort Vorrang. Eine erkannte QRG-Anfrage erzeugt daher nicht zusätzlich den allgemeinen Antworttext.
|
||||
|
||||
### Schutz vor wiederholten Antworten
|
||||
|
||||
Jede automatisch erzeugte Nachricht trägt das feste Präfix:
|
||||
|
||||
```text
|
||||
[KST4C Automsg]
|
||||
```
|
||||
|
||||
Die allgemeine und die QRG-bezogene Antwort reagieren nicht auf Nachrichten, die dieses Präfix bereits enthalten. Dadurch beantworten sich zwei entsprechend arbeitende Clients nicht gegenseitig in einer Schleife.
|
||||
|
||||
Zusätzlich gilt eine gemeinsame Sperrzeit von zwei Minuten für beide Antwortarten. Die Sperre wird getrennt je Rufzeichen und Chat-Kategorie geführt. Hat eine Station gerade in der Hauptkategorie eine automatische Antwort erhalten, kann sie deshalb weiterhin eine Antwort in der zweiten Kategorie erhalten. Weitere Nachrichten derselben Station in derselben Kategorie lösen während der folgenden zwei Minuten dagegen keine neue automatische Antwort aus.
|
||||
|
||||
Die Sperrzeit beginnt nur, wenn KST4Contest tatsächlich eine Antwort sendet.
|
||||
|
||||
> **Hinweis**: Der Antworttext sollte den tatsächlichen Status eindeutig benennen. Wer den Contest nur beobachtet und keine Skeds fahren möchte, sollte genau das mitteilen. Eine vage Nachricht erzeugt im Zweifel nur die nächste Rückfrage – und damit exakt die Arbeit, welche die Funktion vermeiden soll.
|
||||
|
||||
Änderungen wirken während der laufenden Verbindung. Damit Aktivierung und Text nach dem nächsten Programmstart erhalten bleiben, anschließend **Save Settings** verwenden.
|
||||
|
||||
Weitere Hintergründe: [Automatische Antworten auf Privatnachrichten](de-Funktionen#automatische-antworten-auf-privatnachrichten-ab-v125).
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ public class ApplicationConstants {
|
||||
|
||||
public static final String DISCONNECT_RDR_POISONPILL = "UNKNOWN: KST4C KILL POISONPILL_KILLTHREAD=: " + sessionRuntimeUniqueId; //whereever a (blocking) udp or tcp reader in an infinite loop gets this message, it will break this loop
|
||||
|
||||
public static final String AUTOANSWER_PREFIX = "[KST4C Automsg] "; // hard-coded marker (user can't remove it)
|
||||
public static final String AUTOANSWER_PREFIX = "[KST4C Automsg]"; // hard-coded marker (user cannot remove it)
|
||||
|
||||
/**
|
||||
* UI message retention limits.
|
||||
|
||||
@@ -47,13 +47,12 @@ public class MessageBusManagementThread extends Thread {
|
||||
private final String PTRN_QRG_CAT3 = "(([0-9]{3,5}[\\.|,| ]?[0-9]{3})([\\.|,][\\d]{1,2})?)|(([a-zA-Z][0-4]{1}[\\d]{2}\\b)([\\.|,][\\d]{1,2}\\b)?)|((\\b[0-4]{1}[\\d]{2}\\b)([\\.|,][\\d]{1,2}\\b)?)";
|
||||
|
||||
|
||||
// ==== Autoanswer Flood/Pingpong Protection ====
|
||||
private static final String AUTOANSWER_PREFIX = ApplicationConstants.AUTOANSWER_PREFIX; // hard-coded marker (user can't remove it)
|
||||
private static final long AUTOANSWER_COOLDOWN_MS = 45_000L; // 45_000L = 45s
|
||||
// ==== Auto-answer flood/ping-pong protection ====
|
||||
private static final String AUTOANSWER_PREFIX = ApplicationConstants.AUTOANSWER_PREFIX;
|
||||
private static final long AUTOANSWER_COOLDOWN_MS = 120_000L; // two minutes
|
||||
|
||||
// Cooldown per opponent station (and ChatCategory) – only setted if this client sends
|
||||
// Cooldown per remote station and chat category; updated only after this client sends.
|
||||
private final Hashtable<String, Long> lastLocalAutoAnswerPerRemoteMs = new Hashtable<>();
|
||||
|
||||
// BufferedWriter bufwrtrDBGMSGOut;
|
||||
|
||||
// private String text;
|
||||
@@ -829,7 +828,11 @@ public class MessageBusManagementThread extends Thread {
|
||||
|
||||
versionInfo.setSender(itsMe);
|
||||
versionInfo.setReceiver(newMessageArrived.getSender());
|
||||
versionInfo.setMessageText("/CQ " + newMessageArrived.getSender().getCallSign() + " " + ApplicationConstants.AUTOANSWER_PREFIX + " " + "KST4Contest " + " v" + ApplicationConstants.APPLICATION_CURRENT_VERSION + " by DO5AMF");
|
||||
versionInfo.setChatCategory(newMessageArrived.getChatCategory());
|
||||
versionInfo.setMessageText("/CQ " + newMessageArrived.getSender().getCallSign()
|
||||
+ " " + AUTOANSWER_PREFIX
|
||||
+ " KST4Contest v" + ApplicationConstants.APPLICATION_CURRENT_VERSION
|
||||
+ " by DO5AMF");
|
||||
|
||||
this.client.getMessageTXBus().add(versionInfo);
|
||||
}
|
||||
@@ -876,11 +879,11 @@ public class MessageBusManagementThread extends Thread {
|
||||
// }
|
||||
// }
|
||||
|
||||
// ==== Unified Autoanswer (Generic + QRG) with Pingpong-Guard + per-Remote Cooldown ====
|
||||
// ==== Unified auto-answer (generic + QRG) with ping-pong guard and per-remote cooldown ====
|
||||
final String incomingText = newMessageArrived.getMessageText();
|
||||
final String incomingLower = (incomingText == null) ? "" : incomingText.toLowerCase(Locale.ROOT);
|
||||
|
||||
// 1) Pingpong-security: never ever react to auto generated messages
|
||||
// Never answer another automatically generated message.
|
||||
if (!isAutoMessage(newMessageArrived)) {
|
||||
|
||||
boolean qrgRequested = false;
|
||||
@@ -896,24 +899,17 @@ public class MessageBusManagementThread extends Thread {
|
||||
|
||||
boolean genericEnabled = this.client.getChatPreferences().isMsgHandling_autoAnswerEnabled();
|
||||
|
||||
// 2) Entscheide, ob überhaupt geantwortet wird (QRG hat Vorrang vor Generic)
|
||||
// A QRG reply takes precedence over the generic reply.
|
||||
String payload = null;
|
||||
|
||||
if (qrgRequested) {
|
||||
|
||||
if (this.client.getChatPreferences().isLoginToSecondChatEnabled()) {
|
||||
payload = "QRGs: " + this.client.getChatPreferences().getMYQRGFirstCat().getValue()
|
||||
+ " / " + this.client.getChatPreferences().getMYQRGSecondCat().getValue();
|
||||
} else {
|
||||
payload = "QRG is: " + this.client.getChatPreferences().getMYQRGFirstCat().getValue();
|
||||
}
|
||||
|
||||
payload = "QRG is: " + getAutoAnswerQrgForCategory(newMessageArrived.getChatCategory());
|
||||
} else if (genericEnabled) {
|
||||
|
||||
payload = this.client.getChatPreferences().getMessageHandling_autoAnswerTextMainCat();
|
||||
}
|
||||
|
||||
// 3) Cooldown pro Gegenstation: nur wenn DIESER Client jetzt wirklich sendet
|
||||
// Apply the cooldown only when this client is about to send a reply.
|
||||
if (payload != null && isAutoAnswerAllowedNow(newMessageArrived)) {
|
||||
|
||||
ChatMessage automaticAnswer = new ChatMessage();
|
||||
@@ -922,15 +918,15 @@ public class MessageBusManagementThread extends Thread {
|
||||
|
||||
automaticAnswer.setSender(itsMe);
|
||||
automaticAnswer.setReceiver(newMessageArrived.getSender());
|
||||
automaticAnswer.setChatCategory(newMessageArrived.getChatCategory());
|
||||
|
||||
// Prefix fest + nicht entfernbar, damit Auto↔Auto nicht pingpongt
|
||||
// The fixed prefix prevents automatic clients from answering each other.
|
||||
automaticAnswer.setMessageText("/CQ " + newMessageArrived.getSender().getCallSign()
|
||||
+ " " + AUTOANSWER_PREFIX + " " + payload);
|
||||
|
||||
this.client.getMessageTXBus().add(automaticAnswer);
|
||||
|
||||
// Cooldown wird NUR hier gesetzt (nicht bei 'message sent by me' Echo),
|
||||
// damit nur lokale Auto-Sends zählen.
|
||||
// Record only locally generated replies, not the later server echo.
|
||||
markLocalAutoAnswerSent(newMessageArrived);
|
||||
}
|
||||
}
|
||||
@@ -1544,9 +1540,7 @@ public class MessageBusManagementThread extends Thread {
|
||||
|
||||
|
||||
/**
|
||||
* check if message had been auto generated
|
||||
* @param msg
|
||||
* @return
|
||||
* Returns whether a message carries the fixed marker used for automatic replies.
|
||||
*/
|
||||
private boolean isAutoMessage(ChatMessage msg) {
|
||||
return msg != null
|
||||
@@ -1554,6 +1548,22 @@ public class MessageBusManagementThread extends Thread {
|
||||
&& msg.getMessageText().contains(AUTOANSWER_PREFIX);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the configured QRG for the category in which the request was received.
|
||||
* If the category cannot be resolved, the main category remains the safe fallback.
|
||||
*/
|
||||
private String getAutoAnswerQrgForCategory(ChatCategory incomingCategory) {
|
||||
ChatCategory secondCategory = this.client.getChatCategorySecondChat();
|
||||
|
||||
if (incomingCategory != null
|
||||
&& secondCategory != null
|
||||
&& incomingCategory.getCategoryNumber() == secondCategory.getCategoryNumber()) {
|
||||
return this.client.getChatPreferences().getMYQRGSecondCat().getValue();
|
||||
}
|
||||
|
||||
return this.client.getChatPreferences().getMYQRGFirstCat().getValue();
|
||||
}
|
||||
|
||||
private String autoAnswerCooldownKey(ChatMessage incoming) {
|
||||
|
||||
String remoteCall = "UNKNOWN";
|
||||
@@ -1561,13 +1571,16 @@ public class MessageBusManagementThread extends Thread {
|
||||
remoteCall = incoming.getSender().getCallSign().toUpperCase();
|
||||
}
|
||||
|
||||
int cat = 0; // fallback
|
||||
if (incoming != null && incoming.getSender() != null && incoming.getSender().getChatCategory() != null) {
|
||||
cat = incoming.getSender().getChatCategory().getCategoryNumber();
|
||||
int categoryNumber = 0;
|
||||
if (incoming != null && incoming.getChatCategory() != null) {
|
||||
categoryNumber = incoming.getChatCategory().getCategoryNumber();
|
||||
} else if (incoming != null
|
||||
&& incoming.getSender() != null
|
||||
&& incoming.getSender().getChatCategory() != null) {
|
||||
categoryNumber = incoming.getSender().getChatCategory().getCategoryNumber();
|
||||
}
|
||||
|
||||
// pro Gegenstation + pro Chat-Kategorie (falls derselbe Call in Cat2/Cat3 PMs macht)
|
||||
return remoteCall + "|" + cat;
|
||||
return remoteCall + "|" + categoryNumber;
|
||||
}
|
||||
|
||||
private boolean isAutoAnswerAllowedNow(ChatMessage incoming) {
|
||||
|
||||
@@ -2692,6 +2692,14 @@ public class ChatPreferences {
|
||||
messageHandling_autoAnswerEnabledSecondCat,
|
||||
"messageHandling_autoAnswerEnabledSecondCat",
|
||||
"autoAnswerEnabledSecondCat");
|
||||
|
||||
/*
|
||||
* The user interface intentionally exposes one shared generic auto-answer
|
||||
* setting for both chat categories. Keep the legacy second-category XML
|
||||
* fields synchronized so existing configuration files remain compatible.
|
||||
*/
|
||||
messageHandling_autoAnswerTextSecondCat = messageHandling_autoAnswerTextMainCat;
|
||||
messageHandling_autoAnswerEnabledSecondCat = messageHandling_autoAnswerEnabled;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -10472,38 +10472,37 @@ public class Kst4ContestApplication extends Application implements StatusUpdateL
|
||||
// CheckBox chkBxEnableTRXMsgbyUCX = new CheckBox();
|
||||
|
||||
grdPnlMessageHandlingBeacon.add(generateLabeledSeparator(100,
|
||||
"Set the unworked penetrator Beacons (intervalled PM to unworked stations)"), 0, 0, 2, 1);
|
||||
|
||||
grdPnlMessageHandlingBeacon.add(generateLabeledSeparator(100,
|
||||
"Automatic answering options)"), 0, 1, 2, 1);
|
||||
"Automatic answering options"), 0, 0, 2, 1);
|
||||
|
||||
// Label lbl_unwkd_autoAnswerDescriptor = new Label("Auto-answer Text:");
|
||||
// grdPnlMessageHandlingBeacon.add(lbl_unwkd_autoAnswerDescriptor,0,3);
|
||||
|
||||
CheckBox chkbx_msgHandlingAutoAnswerEnabled = new CheckBox("Auto-reply (to all queries): ");
|
||||
chkbx_msgHandlingAutoAnswerEnabled.setTooltip(new Tooltip("KST4Contest will answer for you with your pre-definied text to all PMs"));
|
||||
CheckBox chkbx_msgHandlingAutoAnswerEnabled = new CheckBox("Enable automatic reply to all private messages");
|
||||
chkbx_msgHandlingAutoAnswerEnabled.setTooltip(new Tooltip(
|
||||
"KST4Contest replies with the configured text in the chat category from which the private message was received.\n"
|
||||
+ "The same station can receive one automatic reply per chat category every two minutes."));
|
||||
chkbx_msgHandlingAutoAnswerEnabled.setSelected(this.chatcontroller.getChatPreferences().isMsgHandling_autoAnswerEnabled());
|
||||
chkbx_msgHandlingAutoAnswerEnabled.selectedProperty().addListener(new ChangeListener<Boolean>() {
|
||||
@Override
|
||||
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
|
||||
|
||||
chatcontroller.getChatPreferences().setMessageHandling_autoAnswerEnabled(chkbx_msgHandlingAutoAnswerEnabled.isSelected());
|
||||
chatcontroller.getChatPreferences().setMessageHandling_autoAnswerEnabledSecondCat(chkbx_msgHandlingAutoAnswerEnabled.isSelected());
|
||||
System.out.println("[Main.java, Info]: Autoreply turned on: " + newValue);
|
||||
}
|
||||
});
|
||||
|
||||
CheckBox chkbx_messageHandlingAutoQRGInfoEnabled = new CheckBox("Enable auto-reply with my QRG on QRG-request");
|
||||
|
||||
String changeMeToPreferences = "";
|
||||
changeMeToPreferences += ("ur qrg?\n");
|
||||
changeMeToPreferences += ("your qrg?\n");
|
||||
changeMeToPreferences += ("qrg?\n");
|
||||
changeMeToPreferences += ("freq?\n");
|
||||
changeMeToPreferences += ("pse QRG\n");
|
||||
|
||||
chkbx_messageHandlingAutoQRGInfoEnabled.setTooltip(new Tooltip("KST4Contest can answer with your QRG automatically. Following Strings causing reaction: \n " + changeMeToPreferences));
|
||||
CheckBox chkbx_messageHandlingAutoQRGInfoEnabled = new CheckBox("Enable automatic QRG replies");
|
||||
|
||||
String qrgRequestExamples = "ur qrg?\n"
|
||||
+ "your qrg?\n"
|
||||
+ "qrg?\n"
|
||||
+ "freq?\n"
|
||||
+ "pse qrg";
|
||||
|
||||
chkbx_messageHandlingAutoQRGInfoEnabled.setTooltip(new Tooltip(
|
||||
"KST4Contest replies with the QRG configured for the chat category in which the request was received.\n"
|
||||
+ "Recognized text:\n" + qrgRequestExamples));
|
||||
chkbx_messageHandlingAutoQRGInfoEnabled.setSelected(this.chatcontroller.getChatPreferences().isMessageHandling_autoAnswerToQRGRequestEnabled());
|
||||
chkbx_messageHandlingAutoQRGInfoEnabled.selectedProperty().addListener(new ChangeListener<Boolean>() {
|
||||
@Override
|
||||
@@ -10515,22 +10514,22 @@ public class Kst4ContestApplication extends Application implements StatusUpdateL
|
||||
});
|
||||
|
||||
TextField txtFld_messageHandlingAutoAnswer = new TextField();
|
||||
txtFld_messageHandlingAutoAnswer.setPrefWidth(400);
|
||||
txtFld_messageHandlingAutoAnswer.setText(this.chatcontroller.getChatPreferences().getMessageHandling_autoAnswerTextMainCat());
|
||||
txtFld_messageHandlingAutoAnswer.textProperty().addListener(new ChangeListener<String>() {
|
||||
|
||||
@Override
|
||||
public void changed(ObservableValue<? extends String> observed, String oldString, String newString) {
|
||||
System.out.println("[Main.java, Info]: Setted the autoanswer: " + txtFld_messageHandlingAutoAnswer.getText().toUpperCase());
|
||||
chatcontroller.getChatPreferences().setMessageHandling_autoAnswerTextMainCat(txtFld_messageHandlingAutoAnswer.getText().toUpperCase());
|
||||
chatcontroller.getChatPreferences().setMessageHandling_autoAnswerTextSecondCat(txtFld_messageHandlingAutoAnswer.getText().toUpperCase());
|
||||
System.out.println("[Main.java, Info]: Set the auto-answer text: " + newString);
|
||||
chatcontroller.getChatPreferences().setMessageHandling_autoAnswerTextMainCat(newString);
|
||||
chatcontroller.getChatPreferences().setMessageHandling_autoAnswerTextSecondCat(newString);
|
||||
}
|
||||
});
|
||||
|
||||
grdPnlMessageHandlingBeacon.add(chkbx_msgHandlingAutoAnswerEnabled, 0, 1);
|
||||
grdPnlMessageHandlingBeacon.add(txtFld_messageHandlingAutoAnswer, 1, 1);
|
||||
|
||||
grdPnlMessageHandlingBeacon.add(txtFld_messageHandlingAutoAnswer,1,2);
|
||||
grdPnlMessageHandlingBeacon.add(chkbx_msgHandlingAutoAnswerEnabled,0,2);
|
||||
|
||||
grdPnlMessageHandlingBeacon.add(chkbx_messageHandlingAutoQRGInfoEnabled,0,4, 2,1);
|
||||
grdPnlMessageHandlingBeacon.add(chkbx_messageHandlingAutoQRGInfoEnabled, 0, 2, 2, 1);
|
||||
|
||||
VBox vbxMsgHandlBeacon = new VBox();
|
||||
vbxMsgHandlBeacon.setPadding(new Insets(10, 10, 10, 10));
|
||||
|
||||
Reference in New Issue
Block a user