Updated compound call parsing and aliasing

This commit is contained in:
Jordan Sherer 2018-07-24 17:31:06 -04:00
parent 999a239e67
commit 246d53201c
2 changed files with 45 additions and 15 deletions

View File

@ -3507,6 +3507,10 @@ void MainWindow::readFromStdout() //readFromStdout
} }
QString MainWindow::lookupCallInCompoundCache(QString const &call){ QString MainWindow::lookupCallInCompoundCache(QString const &call){
QString myBaseCall = Radio::base_callsign(m_config.my_callsign());
if(call == myBaseCall){
return m_config.my_callsign();
}
return m_compoundCallCache.value(call, call); return m_compoundCallCache.value(call, call);
} }
@ -5394,17 +5398,26 @@ void MainWindow::clearActivity(){
ui->textEditRX->clear(); ui->textEditRX->clear();
ui->freeTextMsg->clear(); ui->freeTextMsg->clear();
ui->extFreeTextMsg->clear(); ui->extFreeTextMsg->clear();
// make sure to clear the read only and transmitting flags so there's always a "way out"
ui->extFreeTextMsgEdit->clear(); ui->extFreeTextMsgEdit->clear();
ui->extFreeTextMsgEdit->setReadOnly(false);
update_dynamic_property(ui->extFreeTextMsgEdit, "transmitting", false);
} }
int MainWindow::logRxTxMessageText(QDateTime date, QString text, int freq, bool tx, int block){ int MainWindow::logRxTxMessageText(QDateTime date, QString text, int freq, bool tx, int block){
auto c = ui->textEditRX->textCursor(); auto c = ui->textEditRX->textCursor();
// fixup compound callsigns cache / aliases... // fixup compound callsigns cache / aliases...
// ensure our callsign is cached...
QString myCall = m_config.my_callsign();
QString baseCall = Radio::base_callsign(myCall);
if(myCall != baseCall && !m_compoundCallCache.contains(baseCall)){
m_compoundCallCache[baseCall] = myCall;
}
// then, replace the cached calls that we see...
foreach(auto call, m_compoundCallCache.keys()){ foreach(auto call, m_compoundCallCache.keys()){
//QRegExp re(QString("").arg(call)); QRegularExpression re(QString(R"((?<![\/])\b%1\b(?![\/]))").arg(QRegularExpression::escape(call)));
//text = text.replace(call, m_compoundCallCache[call]);
QRegularExpression re(QString(R"((?<![\/])%1(?![\/]))").arg(QRegularExpression::escape(call)));
text = text.replace(re, m_compoundCallCache[call]); text = text.replace(re, m_compoundCallCache[call]);
} }
@ -7096,9 +7109,8 @@ void MainWindow::buildQueryMenu(QMenu * menu){
menu->addSeparator(); menu->addSeparator();
auto snrAction = menu->addAction("? - What is my signal report?"); auto ackAction = menu->addAction("? - Are you hearing me?");
connect(ackAction, &QAction::triggered, this, [this](){
connect(snrAction, &QAction::triggered, this, [this](){
QString selectedCall = callsignSelected(); QString selectedCall = callsignSelected();
if(selectedCall.isEmpty()){ if(selectedCall.isEmpty()){
@ -7109,6 +7121,19 @@ void MainWindow::buildQueryMenu(QMenu * menu){
toggleTx(true); toggleTx(true);
}); });
auto snrAction = menu->addAction("^ - What is my signal report?");
snrAction->setDisabled(isAllCall);
connect(snrAction, &QAction::triggered, this, [this](){
QString selectedCall = callsignSelected();
if(selectedCall.isEmpty()){
return;
}
addMessageText(QString("%1^").arg(selectedCall), true);
toggleTx(true);
});
auto qthAction = menu->addAction("@ - What is your QTH message?"); auto qthAction = menu->addAction("@ - What is your QTH message?");
qthAction->setDisabled(isAllCall); qthAction->setDisabled(isAllCall);
connect(qthAction, &QAction::triggered, this, [this](){ connect(qthAction, &QAction::triggered, this, [this](){
@ -8558,8 +8583,12 @@ void MainWindow::displayActivity(bool force){
// construct reply // construct reply
QString reply; QString reply;
// QUERIED SNR // QUERIED ACK
if(d.cmd == "?"){ if(d.cmd == "?"){
reply = QString("%1 ACK").arg(Radio::base_callsign(d.from));
}
// QUERIED SNR
else if(d.cmd == "^" && !isAllCall){
reply = QString("%1 SNR %2").arg(Radio::base_callsign(d.from)).arg(Varicode::formatSNR(d.snr)); reply = QString("%1 SNR %2").arg(Radio::base_callsign(d.from)).arg(Varicode::formatSNR(d.snr));
} }
// QUERIED QTH // QUERIED QTH

View File

@ -38,18 +38,19 @@ QMap<QString, int> directed_cmds = {
// any changes here need to be made also in the directed regular xpression for parsing // any changes here need to be made also in the directed regular xpression for parsing
// directed queries // directed queries
{"?", 0 }, // query snr {"?", 0 }, // query ack
{"@", 1 }, // query qth {"@", 1 }, // query qth
{"&", 2 }, // query station message {"&", 2 }, // query station message
{"$", 3 }, // query station(s) heard {"$", 3 }, // query station(s) heard
{"|", 4 }, // relay message {"^", 4 }, // query snr
{"!", 5 }, // alert message
// special responses {"|", 5 }, // relay message?
// {"/", 10 }, // compound callsign {"!", 6 }, // alert message?
// {"/", 7 }, // unused? (can we even use stroke?)
// directed responses // directed responses
{" ACK", 23 }, // acknowledge {" ACK", 23 }, // acknowledged
{" PWR", 24 }, // power level {" PWR", 24 }, // power level
{" SNR", 25 }, // seen a station at the provided snr {" SNR", 25 }, // seen a station at the provided snr
{" NO", 26 }, // negative confirm {" NO", 26 }, // negative confirm
@ -60,11 +61,11 @@ QMap<QString, int> directed_cmds = {
{" ", 31 }, // send freetext {" ", 31 }, // send freetext
}; };
QSet<int> allowed_cmds = {0, 1, 2, 3, /*4,*/ /*5,*/ 10, 23, 24, 25, 26, 27, 28, 29, 30, 31}; QSet<int> allowed_cmds = {0, 1, 2, 3, 4, /*5,*/ 10, 23, 24, 25, 26, 27, 28, 29, 30, 31};
QRegularExpression directed_re("^" QRegularExpression directed_re("^"
"(?<to>[A-Z0-9/]+)" "(?<to>[A-Z0-9/]+)"
"(?<cmd>\\s?(?:AGN[?]|RR|73|YES|NO|SNR|PWR|ACK|[?$@&|! ]))" "(?<cmd>\\s?(?:AGN[?]|RR|73|YES|NO|SNR|PWR|ACK|[?@&$^|! ]))"
"(?<pwr>\\s?\\d+\\s?[KM]?W)?" "(?<pwr>\\s?\\d+\\s?[KM]?W)?"
"(?<num>\\s?[-+]?(?:3[01]|[0-2]?[0-9]))?" "(?<num>\\s?[-+]?(?:3[01]|[0-2]?[0-9]))?"
); );