mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-13 07:35:41 +08:00
Ref T415, fixes as reported by RP
* also the CVariant format needs to be parsed * fixed typo in toFlightPlanRemarks * see https://swift-project.slack.com/archives/G96QTUBEG/p1542054827021700
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
#include "blackmisc/iconlist.h"
|
||||
#include "blackmisc/fileutils.h"
|
||||
#include "blackmisc/stringutils.h"
|
||||
#include "blackmisc/json.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QDateTime>
|
||||
@@ -449,7 +450,52 @@ namespace BlackMisc
|
||||
|
||||
if (fileName.endsWith(".sfp", Qt::CaseInsensitive)) { return CFlightPlan::fromSB4Format(data); }
|
||||
if (fileName.endsWith(".vfp", Qt::CaseInsensitive)) { return CFlightPlan::fromVPilotFormat(data); }
|
||||
if (fileName.endsWith(".json", Qt::CaseInsensitive)) { return CFlightPlan::fromJson(data); }
|
||||
if (fileName.endsWith(".json", Qt::CaseInsensitive))
|
||||
{
|
||||
do
|
||||
{
|
||||
CStatusMessage m;
|
||||
if (!Json::looksLikeSwiftJson(data))
|
||||
{
|
||||
m = CStatusMessage(CFlightPlan::getLogCategories(), CStatusMessage::SeverityWarning, "Reading '%1' yields no data", true) << fileName;
|
||||
if (msgs) { msgs->push_back(m); }
|
||||
break;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
const QJsonObject jsonObject = Json::jsonObjectFromString(data);
|
||||
if (Json::looksLikeSwiftTypeValuePairJson(jsonObject))
|
||||
{
|
||||
// CVariant format
|
||||
CVariant variant;
|
||||
variant.convertFromJson(jsonObject);
|
||||
if (variant.canConvert<CFlightPlan>())
|
||||
{
|
||||
const CFlightPlan fp = variant.value<CFlightPlan>();
|
||||
return fp;
|
||||
}
|
||||
else
|
||||
{
|
||||
m = CStatusMessage(CFlightPlan::getLogCategories(), CStatusMessage::SeverityWarning, "Wrong format for flight plan in '%1'") << fileName;
|
||||
if (msgs) { msgs->push_back(m); }
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const CFlightPlan fp = CFlightPlan::fromJson(jsonObject);
|
||||
return fp;
|
||||
}
|
||||
}
|
||||
catch (const CJsonException &ex)
|
||||
{
|
||||
m = ex.toStatusMessage(CFlightPlan::getLogCategories(), "Parse error in " + fileName);
|
||||
if (msgs) { msgs->push_back(m); }
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (false);
|
||||
}
|
||||
|
||||
return CFlightPlan::fromMultipleFormats(data);
|
||||
}
|
||||
|
||||
@@ -29,17 +29,17 @@ namespace BlackMisc
|
||||
|
||||
const QString &CVoiceCapabilities::toFlightPlanRemarks() const
|
||||
{
|
||||
static const QString v("/R/");
|
||||
static const QString v("/V/");
|
||||
static const QString t("/T/");
|
||||
static const QString r("/R/");
|
||||
static const QString u("");
|
||||
|
||||
switch (m_voiceCapabilities)
|
||||
{
|
||||
case Voice: return v;
|
||||
case Voice: return v;
|
||||
case TextOnly: return t;
|
||||
case Unknown: return u;
|
||||
case VoiceReceivingOnly: return r;
|
||||
case Unknown: return u;
|
||||
default: break;
|
||||
}
|
||||
Q_ASSERT_X(false, Q_FUNC_INFO, "Illegal mode");
|
||||
@@ -77,7 +77,7 @@ namespace BlackMisc
|
||||
if (r.contains("/T/")) { this->setCapabilities(TextOnly); return; }
|
||||
if (r.contains("/R/")) { this->setCapabilities(VoiceReceivingOnly); return; }
|
||||
if (r.contains("/VOICE/")) { this->setCapabilities(Voice); return; }
|
||||
if (r.contains("/TEXT/")) { this->setCapabilities(TextOnly); return; }
|
||||
if (r.contains("/TEXT/")) { this->setCapabilities(TextOnly); return; }
|
||||
this->setCapabilities(Unknown);
|
||||
}
|
||||
|
||||
@@ -121,11 +121,15 @@ namespace BlackMisc
|
||||
|
||||
CVoiceCapabilities CVoiceCapabilities::fromText(const QString &text)
|
||||
{
|
||||
if (text.startsWith("/")) { return CVoiceCapabilities::fromText(text); }
|
||||
if (text.contains("TEXT", Qt::CaseInsensitive)) { return CVoiceCapabilities(TextOnly); }
|
||||
if (text.contains("ONLY", Qt::CaseInsensitive)) { return CVoiceCapabilities(TextOnly); }
|
||||
if (text.startsWith("/"))
|
||||
{
|
||||
const CVoiceCapabilities vc(text);
|
||||
return vc;
|
||||
}
|
||||
if (text.contains("TEXT", Qt::CaseInsensitive)) { return CVoiceCapabilities(TextOnly); }
|
||||
if (text.contains("ONLY", Qt::CaseInsensitive)) { return CVoiceCapabilities(TextOnly); }
|
||||
if (text.contains("RECEIVE", Qt::CaseInsensitive)) { return CVoiceCapabilities(VoiceReceivingOnly); }
|
||||
if (text.contains("VOICE", Qt::CaseInsensitive)) { return CVoiceCapabilities(Voice); }
|
||||
if (text.contains("VOICE", Qt::CaseInsensitive)) { return CVoiceCapabilities(Voice); }
|
||||
return CVoiceCapabilities(Unknown);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user