Added ability to relay MSG and MSG TO commands

This commit is contained in:
Jordan Sherer 2019-02-01 03:08:47 -05:00
parent ccd10aea89
commit 368f14cc07
2 changed files with 53 additions and 39 deletions

View File

@ -1351,9 +1351,13 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
}
} else {
CallDetail cd = {};
cd.call = callsign;
m_callActivity[callsign] = cd;
if(Varicode::isValidCallsign(callsign, nullptr)){
CallDetail cd = {};
cd.call = callsign;
m_callActivity[callsign] = cd;
} else {
MessageBox::critical_message (this, QString("%1 is not a valid callsign or group").arg(callsign));
}
}
displayActivity(true);
@ -9731,8 +9735,11 @@ void MainWindow::processCommandActivity() {
continue;
}
// and mark the offset as a directed offset so future free text is displayed
// markOffsetDirected(ad.freq, isAllCall);
// HACK: if this is an autoreply cmd and relay path is populated and cmd is not MSG or MSG TO:, then swap out the relay path
if(Varicode::isCommandAutoreply(d.cmd) && !d.relayPath.isEmpty() && !d.cmd.startsWith(" MSG")){
d.from = d.relayPath;
}
// construct a reply, if needed
QString reply;
@ -9852,7 +9859,7 @@ void MainWindow::processCommandActivity() {
reply = QString("%1 ACK").arg(d.relayPath);
// check to see if the relay text contains a command that should be replied to instead of an ack.
auto relayedCmds = d.text.split(" ");
QStringList relayedCmds = d.text.split(" ");
if(!relayedCmds.isEmpty()){
auto first = relayedCmds.first();
@ -9860,6 +9867,21 @@ void MainWindow::processCommandActivity() {
if(!valid){
first = " " + first;
valid = Varicode::isCommandAllowed(first);
if(valid){
relayedCmds.removeFirst();
}
}
// HACK: "MSG TO:" should be supported but contains a space :(
if(!relayedCmds.isEmpty() && first == " MSG"){
auto second = relayedCmds.first();
if(second == "TO:"){
first = " MSG TO:";
relayedCmds.removeFirst();
} else if(second.startsWith("TO:")){
first = " MSG TO:";
relayedCmds.replace(0, second.mid(3));
}
}
if(valid && Varicode::isCommandAutoreply(first)){
@ -9867,8 +9889,9 @@ void MainWindow::processCommandActivity() {
rd.bits = d.bits;
rd.cmd = first;
rd.freq = d.freq;
rd.from = d.relayPath; // is this correct?
rd.text = d.text;
rd.from = d.from;
rd.relayPath = d.relayPath;
rd.text = relayedCmds.join(" "); //d.text;
rd.to = d.to;
rd.utcTimestamp = d.utcTimestamp;
@ -9900,7 +9923,12 @@ void MainWindow::processCommandActivity() {
}
auto to = segs.first();
auto text = d.text.mid(to.length()).trimmed();
segs.removeFirst();
auto text = segs.join(" ").trimmed();
auto calls = parseRelayPathCallsigns(d.from, text);
d.relayPath = calls.join(">");
CommandDetail cd = {};
cd.bits = d.bits;
@ -9920,7 +9948,8 @@ void MainWindow::processCommandActivity() {
addCommandToInboxStorage("STORE", cd);
reply = QString("%1 ACK").arg(d.from);
// we haven't replaced the from with the relay path, so we have to use it for the ack if there is one
reply = QString("%1 ACK").arg(calls.length() > 1 ? d.relayPath : d.from);
}
// PROCESS AGN
@ -9950,27 +9979,11 @@ void MainWindow::processCommandActivity() {
}
// PROCESS MSG
else if (d.cmd == " MSG"){
else if (d.cmd == " MSG" && !isAllCall){
auto segs = d.text.split(" ");
if(segs.isEmpty()){
continue;
}
auto text = d.text;
bool ok = false;
auto mid = segs.first().toInt(&ok);
if(!ok){
continue;
}
segs.removeFirst();
if(segs.isEmpty()){
continue;
}
auto text = segs.join(" ");
qDebug() << "adding message" << mid << "to inbox" << text;
qDebug() << "adding message to inbox" << text;
auto calls = parseRelayPathCallsigns(d.from, text);
@ -9980,12 +9993,12 @@ void MainWindow::processCommandActivity() {
addCommandToMyInbox(d);
// make sure this is explicit
continue;
// we haven't replaced the from with the relay path, so we have to use it for the ack if there is one
reply = QString("%1 ACK").arg(calls.length() > 1 ? d.relayPath : d.from);
}
// PROCESS ACKS
else if (d.cmd == " ACK"){
else if (d.cmd == " ACK" && !isAllCall){
qDebug() << "skipping incoming ack" << d.text;
// make sure this is explicit
@ -9993,7 +10006,7 @@ void MainWindow::processCommandActivity() {
}
// PROCESS BUFFERED CMD
else if (d.cmd == " CMD"){
else if (d.cmd == " CMD" && !isAllCall){
qDebug() << "skipping incoming command" << d.text;
// make sure this is explicit
@ -10001,7 +10014,7 @@ void MainWindow::processCommandActivity() {
}
// PROCESS BUFFERED QUERY
else if (d.cmd == " QUERY"){
else if (d.cmd == " QUERY" && !isAllCall){
auto who = d.from;
QStringList segs = d.text.split(" ");
@ -10031,7 +10044,9 @@ void MainWindow::processCommandActivity() {
}
auto from = params.value("FROM").toString().trimmed();
if(from != who){
auto to = params.value("TO").toString().trimmed();
if(to != who){
continue;
}
@ -10045,9 +10060,8 @@ void MainWindow::processCommandActivity() {
inbox.set(mid, msg);
// and reply
reply = QString("%1 MSG %2 %3 DE %4");
reply = QString("%1 MSG %2 DE %3");
reply = reply.arg(who);
reply = reply.arg(mid);
reply = reply.arg(text);
reply = reply.arg(from);
}
@ -10119,7 +10133,7 @@ void MainWindow::processCommandActivity() {
}
// PROCESS BUFFERED HEARING
else if (d.cmd == " HEARING"){
else if (d.cmd == " HEARING" && !isAllCall){
auto calls = Varicode::parseCallsigns(d.text);
foreach(auto call, calls){
logHeardGraph(d.from, call);

View File

@ -106,7 +106,7 @@ QMap<QString, int> directed_cmds = {
QSet<int> allowed_cmds = {-1, 0, /*1,*/ /*2,*/ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
// commands that result in an autoreply (which can be relayed)
QSet<int> autoreply_cmds = {0, 3, 4, 6, 11, 12, 13, 16, 30};
QSet<int> autoreply_cmds = {0, 3, 4, 6, 9, 10, 11, 12, 13, 16, 30};
// commands that should be buffered
QSet<int> buffered_cmds = {5, 9, 10, 11, 12, 13, 14, 15, 24};