Skip to content

Commit

Permalink
[FEATURE] add concise {pdc-}, {cpdlc-} and {livestream-} place holders
Browse files Browse the repository at this point in the history
These all aim for more compact output.
  • Loading branch information
jonaseberle committed Jun 14, 2023
1 parent 412d1b4 commit bd86d0c
Show file tree
Hide file tree
Showing 9 changed files with 961 additions and 788 deletions.
51 changes: 38 additions & 13 deletions src/Airport.cpp
Expand Up @@ -63,20 +63,22 @@ const QHash<QString, std::function<QString(Airport*)> > Airport::placeholders {
},
{
"{pdc}", [](Airport* o)->QString {
return o->pdcString();
return o->pdcString("PDC/");
}
},
{
"{pdc-}", [](Airport* o)->QString {
return o->pdcString("@", false);
}
},
{
"{livestream}", [](Airport* o)->QString {
QStringList ret;
foreach (const auto c, o->allControllers()) {
const auto str = c->livestreamString();
if (!str.isEmpty()) {
ret << str;
}
}

return ret.join(" ");
return o->livestreamString();
}
},
{
"{livestream-}", [](Airport* o)->QString {
return o->livestreamString(true);
}
},
};
Expand Down Expand Up @@ -415,15 +417,26 @@ const QString Airport::frequencyString() const {
return ret.join("\n");
}

const QString Airport::pdcString() const {
const QString Airport::pdcString(const QString &prepend, bool alwaysWithIdentifier) const {
QStringList matches;

foreach (const auto* c, allControllers()) {
auto match = pdcRegExp.match(c->atisMessage);
if (match.hasMatch()) {
return "PDC/" + match.capturedRef(1);
auto logon = match.captured(1);
if (id == logon) {
// found perfect match
if (!alwaysWithIdentifier) {
return prepend;
}
}
if (!matches.contains(logon)) {
matches << logon;
}
}
}

return "";
return matches.isEmpty()? "": prepend + matches.join(",");
}

const GLuint& Airport::gndDisplayList() {
Expand Down Expand Up @@ -609,6 +622,18 @@ QStringList Airport::mapLabelSecondaryLinesHovered() const {
return Helpers::linesFilteredTrimmed(str);
}

QString Airport::livestreamString(bool shortened) const {
QStringList ret;
foreach (const auto c, allControllers()) {
const auto str = c->livestreamString(shortened);
if (!str.isEmpty()) {
ret << str;
}
}

return ret.join(" ");
}

const QString Airport::shortLabel() const {
auto _trafficString = trafficString();
return QString("%1%2").arg(
Expand Down
4 changes: 3 additions & 1 deletion src/Airport.h
Expand Up @@ -45,6 +45,8 @@ class Airport

void showDetailsDialog();

QString livestreamString(bool shortened = false) const;

const QString shortLabel() const;
const QString longLabel() const;
const QString prettyName() const;
Expand All @@ -54,7 +56,7 @@ class Airport
const QString controllersString() const;
const QString atisCodeString() const;
const QString frequencyString() const;
const QString pdcString() const;
const QString pdcString(const QString& prepend = "", bool alwaysWithIdentifier = true) const;

void resetWhazzupStatus();

Expand Down
7 changes: 5 additions & 2 deletions src/Client.cpp
Expand Up @@ -15,14 +15,17 @@ const QRegularExpression Client::livestreamRegExp = QRegularExpression(
QRegularExpression::MultilineOption | QRegularExpression::CaseInsensitiveOption
);

QString Client::livestreamString(const QString& str) {
QString Client::livestreamString(const QString& str, bool shortened) {
auto matchIterator = livestreamRegExp.globalMatch(str);

// take last match. Helps with "live on twitch now: twitch/user"
while (matchIterator.hasNext()) {
auto match = matchIterator.next();
if (!matchIterator.hasNext()) {
QString network(match.captured(2) + match.captured(4) + match.captured(6));
if (shortened) {
return "~";
}
return network.toLower() + "/" + match.capturedRef(8);
}
}
Expand Down Expand Up @@ -113,7 +116,7 @@ QString Client::rank() const {
return "";
}

QString Client::livestreamString() const {
QString Client::livestreamString(bool) const {
return "";
}

Expand Down
4 changes: 2 additions & 2 deletions src/Client.h
Expand Up @@ -8,13 +8,13 @@
class Client {
public:
static const QRegularExpression livestreamRegExp;
static QString livestreamString(const QString& str);
static QString livestreamString(const QString& str, bool shortened = false);

Client(const QJsonObject& json, const WhazzupData* whazzup);

virtual bool matches(const QRegExp& regex) const;
virtual QString rank() const;
virtual QString livestreamString() const;
virtual QString livestreamString(bool shortened = false) const;
virtual bool isFriend() const;
virtual const QString realName() const;
virtual const QString nameOrCid() const;
Expand Down
26 changes: 21 additions & 5 deletions src/Controller.cpp
Expand Up @@ -55,14 +55,24 @@ const QHash<QString, std::function<QString(Controller*)> > Controller::placehold
},
{
"{cpdlc}", [](Controller* o)->QString {
return o->cpdlcString();
return o->cpdlcString("CPDLC/");
}
},
{
"{cpdlc-}", [](Controller* o)->QString {
return o->cpdlcString("@", false);
}
},
{
"{livestream}", [](Controller* o)->QString {
return o->livestreamString();
}
},
{
"{livestream-}", [](Controller* o)->QString {
return o->livestreamString(true);
}
},
};

Controller::Controller(const QJsonObject& json, const WhazzupData* whazzup)
Expand Down Expand Up @@ -198,8 +208,8 @@ QString Controller::controllerSectorName() const {
return QString();
}

QString Controller::livestreamString() const {
return Client::livestreamString(atisMessage);
QString Controller::livestreamString(bool shortened) const {
return Client::livestreamString(atisMessage, shortened);
}

bool Controller::isCtrFss() const {
Expand Down Expand Up @@ -284,10 +294,16 @@ QList <Airport*> Controller::airportsSorted() const {
return _airports;
}

const QString Controller::cpdlcString() const {
const QString Controller::cpdlcString(const QString& prepend, bool alwaysWithIdentifier) const {
auto match = cpdlcRegExp.match(atisMessage);
if (match.hasMatch()) {
return "CPDLC/" + match.capturedRef(1);
if (match.hasMatch()) {
auto logon = match.capturedRef(1);
if (!alwaysWithIdentifier && callsign.startsWith(logon)) {
return prepend;
}
return prepend + logon;
}
}

return "";
Expand Down
4 changes: 2 additions & 2 deletions src/Controller.h
Expand Up @@ -27,7 +27,7 @@ class Controller
virtual QString mapLabelHovered() const override;
virtual QStringList mapLabelSecondaryLines() const override;
virtual QStringList mapLabelSecondaryLinesHovered() const override;
virtual QString livestreamString() const override;
virtual QString livestreamString(bool shortened = false) const override;
virtual bool matches(const QRegExp& regex) const override;
virtual bool hasPrimaryAction() const override;
virtual void primaryAction() override;
Expand Down Expand Up @@ -55,7 +55,7 @@ class Controller
QSet<Airport*> airports(bool withAdditionalMatches = true) const;
QList<Airport*> airportsSorted() const;

const QString cpdlcString() const;
const QString cpdlcString(const QString& prepend = "", bool alwaysWithIdentifier = true) const;

QString frequency, atisMessage, atisCode;
int facilityType, visualRange;
Expand Down
9 changes: 7 additions & 2 deletions src/Pilot.cpp
Expand Up @@ -85,6 +85,11 @@ const QHash<QString, std::function<QString(Pilot*)> > Pilot::placeholders {
return o->livestreamString();
}
},
{
"{livestream-}", [](Pilot* o)->QString {
return o->livestreamString(true);
}
},
};

int Pilot::altToFl(int alt_ft, int qnh_mb) {
Expand Down Expand Up @@ -689,8 +694,8 @@ bool Pilot::showDestLine() const {
return false;
}

QString Pilot::livestreamString() const {
return Client::livestreamString(planRemarks);
QString Pilot::livestreamString(bool shortened) const {
return Client::livestreamString(planRemarks, shortened);
}

bool Pilot::hasPrimaryAction() const {
Expand Down
2 changes: 1 addition & 1 deletion src/Pilot.h
Expand Up @@ -32,7 +32,7 @@ class Pilot
virtual QString mapLabelHovered() const override;
virtual QStringList mapLabelSecondaryLines() const override;
virtual QStringList mapLabelSecondaryLinesHovered() const override;
virtual QString livestreamString() const override;
virtual QString livestreamString(bool shortened = false) const override;
virtual bool hasPrimaryAction() const override;
virtual void primaryAction() override;

Expand Down

0 comments on commit bd86d0c

Please sign in to comment.