Ref T761, relay original sender AND recipient

* display sent messages of partner callsing as send by myself
* allow PMs from partner as normal PMs
This commit is contained in:
Klaus Basan
2019-11-21 21:52:26 +01:00
committed by Mat Sutcliffe
parent a54f804cf1
commit 64b17b787c
4 changed files with 77 additions and 11 deletions

View File

@@ -82,11 +82,12 @@ namespace BlackMisc
void CTextMessage::makeRelayedMessage(const CCallsign &partnerCallsign)
{
if (this->getMessage().startsWith(CTextMessage::swiftRelayMessage())) { return; }
const QString sender = this->getSenderCallsign().asString();
const QString recipient = this->getRecipientCallsign().asString();
this->markAsRelayedMessage();
this->setRecipientCallsign(partnerCallsign);
m_recipientCallsign.setTypeHint(CCallsign::Aircraft);
const QString sender = this->getSenderCallsign().asString();
const QString newMessage = CTextMessage::swiftRelayMessage() % sender % u";" % this->getMessage();
const QString newMessage = CTextMessage::swiftRelayMessage() % sender % u" " % recipient % u";" % this->getMessage();
m_message = newMessage;
}
@@ -96,8 +97,13 @@ namespace BlackMisc
const int index = m_message.indexOf(';');
if (index < CTextMessage::swiftRelayMessage().length()) { return false; }
if (m_message.length() <= index + 1) { return false; } // no next line
const QString originalSender = m_message.left(index).remove(CTextMessage::swiftRelayMessage()).trimmed();
this->setSenderCallsign(CCallsign(originalSender)); // sender can be aircraft or ATC
const QString senderRecipient = m_message.left(index).remove(CTextMessage::swiftRelayMessage()).trimmed();
const QStringList sr = senderRecipient.split(' ');
if (sr.size() != 2) { return false; }
const QString originalSender = sr.first();
const QString originalRecipient = sr.last();
this->setSenderCallsign(CCallsign(originalSender)); // sender can be aircraft or ATC
this->setRecipientCallsign(CCallsign(originalRecipient)); // recipient can be aircraft or ATC
m_message = m_message.mid(index + 1);
return true;
}

View File

@@ -97,6 +97,31 @@ namespace BlackMisc
return this->findBy(&CTextMessage::getFrequency, frequency);
}
CTextMessageList CTextMessageList::findBySender(const CCallsign &sender) const
{
return this->findBy(&CTextMessage::getSenderCallsign, sender);
}
CTextMessageList CTextMessageList::findByRecipient(const CCallsign &recipient) const
{
return this->findBy(&CTextMessage::getRecipientCallsign, recipient);
}
CTextMessageList CTextMessageList::findByNotForRecipient(const CCallsign &recipient) const
{
CTextMessageList result;
if (recipient.isEmpty()) { return result; }
for (const CTextMessage &m : *this)
{
if (m.getRecipientCallsign().isEmpty()) { continue; }
if (m.getRecipientCallsign() != recipient)
{
result.push_back(m);
}
}
return result;
}
void CTextMessageList::toggleSenderRecipients()
{
if (this->isEmpty()) { return; }

View File

@@ -82,6 +82,15 @@ namespace BlackMisc
//! Find by frequency
CTextMessageList findByFrequency(const PhysicalQuantities::CFrequency &frequency) const;
//! Find by sender
CTextMessageList findBySender(const BlackMisc::Aviation::CCallsign &sender) const;
//! Find by recipient
CTextMessageList findByRecipient(const BlackMisc::Aviation::CCallsign &recipient) const;
//! Find by recipient is NOT addressed
CTextMessageList findByNotForRecipient(const BlackMisc::Aviation::CCallsign &recipient) const;
//! Toggle all sender <-> recipients
void toggleSenderRecipients();