Add feedback when .wallop message is sent

This does the following:
- Opens a message-tab called "SUP" when a .wallop message is sent.
- Throws a validation error if another message is directly send into this "SUP" channel as another .wallop should be used.
This commit is contained in:
Lars Toenning
2020-07-26 11:57:59 +02:00
parent c4202d73f5
commit f987b81e6d
6 changed files with 33 additions and 0 deletions

View File

@@ -546,6 +546,14 @@ namespace BlackCore
else { return; }
const TextMessage textMessage(getOwnCallsignAsString(), receiver, message);
sendQueudedMessage(textMessage);
if(receiver == QStringLiteral("*S"))
{
const CCallsign sender(getOwnCallsignAsString());
const CCallsign recipient(receiver);
CTextMessage t(message, sender, recipient);
t.markAsSent();
emit textMessageSent(t);
}
increaseStatisticsValue(QStringLiteral("sendTextMessages"));
}

View File

@@ -550,6 +550,9 @@ namespace BlackGui
const bool isBroadcast = textMessage.isBroadcastMessage();
if (isBroadcast) { cs.markAsBroadcastCallsign(); }
const bool isWallopMessage = textMessage.isWallopMessage();
if(isWallopMessage) { cs.markAsWallopCallsign(); }
const QWidget *tab = this->findTextMessageTabByCallsign(cs);
if (!tab) { tab = this->addNewTextMessageTab(cs); }
Q_ASSERT_X(tab, Q_FUNC_INFO, "Missing tab");
@@ -725,6 +728,10 @@ namespace BlackGui
{
CLogMessage(this).validationError(u"Incorrect message channel");
return {};
} else if (ui->tw_TextMessages->tabText(index) == "SUP")
{
CLogMessage(this).validationError(u"Message cannot be send to SUP channel. To send another wallop message use .wallop instead");
return{};
}
else
{

View File

@@ -145,6 +145,12 @@ namespace BlackMisc
m_callsign = "BROADCAST";
}
void CCallsign::markAsWallopCallsign()
{
m_callsignAsSet = "SUP";
m_callsign = "SUP";
}
bool CCallsign::isMaybeCopilotCallsign(const CCallsign &pilotCallsign) const
{
return m_callsign.startsWith(pilotCallsign.asString()) &&

View File

@@ -86,6 +86,9 @@ namespace BlackMisc
//! \remark hack, workaround for VATSIM using "*" as callsign for text messages
void markAsBroadcastCallsign();
//! Set a human readable name as "wallop-channel" callsign
void markAsWallopCallsign();
//! Returns true if this is a co-pilot callsign of pilot. The logic is that the callsign is the same as the pilot one
//! but with a single character as suffix.
//! e.g Pilot logged in as DLH123, observer logged in as DLH123A

View File

@@ -208,6 +208,12 @@ namespace BlackMisc
return cs.isBroadcastCallsign();
}
bool CTextMessage::isWallopMessage() const
{
const CCallsign cs = this->getRecipientCallsign();
return cs.getStringAsSet() == "*S";
}
QString CTextMessage::asString(bool withSender, bool withRecipient, const QString &separator) const
{
QString s(this->getFormattedUtcTimestampHms());

View File

@@ -117,6 +117,9 @@ namespace BlackMisc
//! Is this a broadcast message
bool isBroadcastMessage() const;
//! Is this a message send via .wallop
bool isWallopMessage() const;
//! Whole message as formatted string. Used to display message in a console window.
//! \param withSender include sender information in string?
//! \param withRecipient include recipient information in string?