mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-05 09:15:34 +08:00
refs #720, allow to publish when there are errors, but some models pass validation
* return valid and invalid models * return value "success" when there are any valid models
This commit is contained in:
committed by
Mathew Sutcliffe
parent
d10fe5ad18
commit
da343d81c1
@@ -280,12 +280,12 @@ namespace BlackGui
|
||||
void ps_onCustomContextMenu(const QPoint &point);
|
||||
|
||||
private:
|
||||
QScopedPointer<Ui::CDbMappingComponent> ui;
|
||||
QScopedPointer<CDbAutoStashingComponent> m_autoStashDialog; //!< dialog auto stashing
|
||||
QScopedPointer<CDbModelMappingModifyComponent> m_modelModifyDialog; //!< dialog when modifying models
|
||||
BlackMisc::Simulation::FsCommon::CVPilotRulesReader m_vPilotReader; //!< read vPilot rules
|
||||
QScopedPointer<Ui::CDbMappingComponent> ui;
|
||||
QScopedPointer<CDbAutoStashingComponent> m_autoStashDialog; //!< dialog auto stashing
|
||||
QScopedPointer<CDbModelMappingModifyComponent> m_modelModifyDialog; //!< dialog when modifying models
|
||||
BlackMisc::Simulation::FsCommon::CVPilotRulesReader m_vPilotReader; //!< read vPilot rules
|
||||
BlackMisc::CData<BlackCore::Data::TAuthenticatedDbUser> m_swiftDbUser {this, &CDbMappingComponent::ps_userChanged};
|
||||
BlackMisc::CDigestSignal m_dsStashedModelsChanged { this, &CDbMappingComponent::ps_digestStashedModelsChanged, &CDbMappingComponent::ps_onStashedModelsChangedDigest, 750, 25 };
|
||||
BlackMisc::CDigestSignal m_dsStashedModelsChanged { this, &CDbMappingComponent::ps_digestStashedModelsChanged, &CDbMappingComponent::ps_onStashedModelsChangedDigest, 750, 25 };
|
||||
const bool vPilotSupport = true; //!< vPilot support
|
||||
bool m_vPilot1stInit = true; //!< vPilot extensions initaliazed?
|
||||
bool m_vPilotEnabled = false; //!< use vPilot extensions
|
||||
|
||||
@@ -231,7 +231,9 @@ namespace BlackGui
|
||||
void CDbStashComponent::ps_onValidatePressed()
|
||||
{
|
||||
if (this->ui->tvp_StashAircraftModels->isEmpty()) {return; }
|
||||
this->validateAndDisplay(true);
|
||||
CAircraftModelList validModels;
|
||||
CAircraftModelList invalidModels;
|
||||
this->validateAndDisplay(validModels, invalidModels, true);
|
||||
}
|
||||
|
||||
void CDbStashComponent::ps_onPublishPressed()
|
||||
@@ -239,21 +241,21 @@ namespace BlackGui
|
||||
if (this->ui->tvp_StashAircraftModels->isEmpty()) {return; }
|
||||
|
||||
// get models right here, because later steps might affect selection
|
||||
CAircraftModelList models(getSelectedOrAllModels());
|
||||
const CAircraftModelList models(getSelectedOrAllModels());
|
||||
if (models.isEmpty()) { return; }
|
||||
|
||||
// validate
|
||||
if (!this->validateAndDisplay()) { return; }
|
||||
CAircraftModelList validModels;
|
||||
CAircraftModelList invalidModels;
|
||||
if (!this->validateAndDisplay(validModels, invalidModels)) { return; }
|
||||
CStatusMessageList msgs;
|
||||
if (models.size() > MaxModelPublished)
|
||||
if (validModels.size() > MaxModelPublished)
|
||||
{
|
||||
CAircraftModelList::iterator i = models.begin();
|
||||
std::advance(i, MaxModelPublished);
|
||||
models.erase(i, models.end());
|
||||
validModels.truncate(MaxModelPublished);
|
||||
msgs.push_back(CStatusMessage(validationCategories(), CStatusMessage::SeverityWarning, QString("More than %1 values, values skipped").arg(MaxModelPublished)));
|
||||
}
|
||||
|
||||
msgs.push_back(sApp->getWebDataServices()->asyncPublishModels(models));
|
||||
msgs.push_back(sApp->getWebDataServices()->asyncPublishModels(validModels));
|
||||
if (msgs.hasWarningOrErrorMessages())
|
||||
{
|
||||
this->showMessages(msgs);
|
||||
@@ -293,13 +295,13 @@ namespace BlackGui
|
||||
Q_UNUSED(skippedModels);
|
||||
}
|
||||
|
||||
CStatusMessageList CDbStashComponent::validate(CAircraftModelList &invalidModels) const
|
||||
CStatusMessageList CDbStashComponent::validate(CAircraftModelList &validModels, CAircraftModelList &invalidModels) const
|
||||
{
|
||||
if (this->ui->tvp_StashAircraftModels->isEmpty()) {return CStatusMessageList(); }
|
||||
CAircraftModelList models(getSelectedOrAllModels());
|
||||
const CAircraftModelList models(getSelectedOrAllModels());
|
||||
if (models.isEmpty()) { return CStatusMessageList(); }
|
||||
|
||||
const CStatusMessageList msgs(models.validateForPublishing(invalidModels));
|
||||
const CStatusMessageList msgs(models.validateForPublishing(validModels, invalidModels));
|
||||
|
||||
// OK?
|
||||
if (msgs.isEmpty())
|
||||
@@ -315,27 +317,27 @@ namespace BlackGui
|
||||
}
|
||||
}
|
||||
|
||||
bool CDbStashComponent::validateAndDisplay(bool displayInfo)
|
||||
bool CDbStashComponent::validateAndDisplay(CAircraftModelList &validModels, CAircraftModelList &invalidModels, bool displayInfo)
|
||||
{
|
||||
CAircraftModelList invalidModels;
|
||||
const CStatusMessageList msgs(this->validate(invalidModels));
|
||||
const CStatusMessageList msgs(this->validate(validModels, invalidModels));
|
||||
if (msgs.hasWarningOrErrorMessages())
|
||||
{
|
||||
this->showMessages(msgs);
|
||||
this->ui->tvp_StashAircraftModels->setHighlightModelStrings(invalidModels.getModelStringList(false));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// delete highlighting
|
||||
this->ui->tvp_StashAircraftModels->setHighlightModelStrings(QStringList());
|
||||
if (displayInfo)
|
||||
{
|
||||
QString no = QString::number(this->getStashedModelsCount());
|
||||
CStatusMessage msg(validationCategories(), CStatusMessage::SeverityInfo, "Validation passed for " + no + " models");
|
||||
this->showMessage(msg);
|
||||
}
|
||||
return true; // no error
|
||||
}
|
||||
|
||||
if (displayInfo)
|
||||
{
|
||||
QString no = QString::number(this->getStashedModelsCount());
|
||||
CStatusMessage msg(validationCategories(), CStatusMessage::SeverityInfo, "Validation passed for " + no + " models");
|
||||
this->showMessage(msg);
|
||||
}
|
||||
return !validModels.isEmpty(); // at least some valid objects
|
||||
}
|
||||
|
||||
void CDbStashComponent::enableButtonRow()
|
||||
|
||||
@@ -43,11 +43,9 @@ namespace BlackMisc
|
||||
}
|
||||
}
|
||||
namespace Ui { class CDbStashComponent; }
|
||||
|
||||
namespace BlackGui
|
||||
{
|
||||
namespace Views { class CAircraftModelView; }
|
||||
|
||||
namespace Components
|
||||
{
|
||||
/*!
|
||||
@@ -169,10 +167,10 @@ namespace BlackGui
|
||||
bool showMessage(const BlackMisc::CStatusMessage &msg, int timeoutMs = -1);
|
||||
|
||||
//! Validate
|
||||
BlackMisc::CStatusMessageList validate(BlackMisc::Simulation::CAircraftModelList &invalidModels) const;
|
||||
BlackMisc::CStatusMessageList validate(BlackMisc::Simulation::CAircraftModelList &validModels, BlackMisc::Simulation::CAircraftModelList &invalidModels) const;
|
||||
|
||||
//! Validate and display info messages
|
||||
bool validateAndDisplay(bool displayInfo = false);
|
||||
bool validateAndDisplay(BlackMisc::Simulation::CAircraftModelList &validModels, BlackMisc::Simulation::CAircraftModelList &invalidModels, bool displayInfo = false);
|
||||
|
||||
//! Set the button row
|
||||
void enableButtonRow();
|
||||
|
||||
@@ -525,17 +525,18 @@ namespace BlackMisc
|
||||
CStatusMessageList CAircraftModelList::validateForPublishing() const
|
||||
{
|
||||
CAircraftModelList invalidModels;
|
||||
return validateForPublishing(invalidModels);
|
||||
CAircraftModelList validModels;
|
||||
return validateForPublishing(validModels, invalidModels);
|
||||
}
|
||||
|
||||
CStatusMessageList CAircraftModelList::validateForPublishing(CAircraftModelList &validateModels) const
|
||||
CStatusMessageList CAircraftModelList::validateForPublishing(CAircraftModelList &validModels, CAircraftModelList &invalidModels) const
|
||||
{
|
||||
if (this->isEmpty()) { return CStatusMessageList(); }
|
||||
CStatusMessageList msgs;
|
||||
for (const CAircraftModel &model : *this)
|
||||
{
|
||||
const CStatusMessageList msgsModel(model.validate(false));
|
||||
CStatusMessage msgModel(msgsModel.toSingleMessage());
|
||||
const CStatusMessage msgModel(msgsModel.toSingleMessage());
|
||||
|
||||
QStringList subMsgs;
|
||||
if (!model.getDistributor().hasValidDbKey()) { subMsgs << "No distributor from DB"; }
|
||||
@@ -546,16 +547,20 @@ namespace BlackMisc
|
||||
// for color codes we do not need to check
|
||||
if (!model.getLivery().getAirlineIcaoCode().hasValidDbKey()) { subMsgs << "No airline ICAO from DB"; }
|
||||
}
|
||||
CStatusMessage msgDb(CStatusMessage::SeverityError, subMsgs.join(", "));
|
||||
|
||||
const CStatusMessage msgDb(CStatusMessage::SeverityError, subMsgs.join(", "));
|
||||
CStatusMessage singleMsg(CStatusMessageList({msgModel, msgDb}).toSingleMessage());
|
||||
if (!singleMsg.isWarningOrAbove()) { continue; }
|
||||
if (!singleMsg.isWarningOrAbove())
|
||||
{
|
||||
validModels.push_back(model);
|
||||
continue;
|
||||
}
|
||||
if (model.hasModelString())
|
||||
{
|
||||
singleMsg.prependMessage(model.getModelString() + ": ");
|
||||
}
|
||||
msgs.push_back(singleMsg);
|
||||
validateModels.push_back(model);
|
||||
invalidModels.push_back(model);
|
||||
}
|
||||
return msgs;
|
||||
}
|
||||
|
||||
@@ -202,7 +202,7 @@ namespace BlackMisc
|
||||
CStatusMessageList validateForPublishing() const;
|
||||
|
||||
//! Validate for publishing
|
||||
CStatusMessageList validateForPublishing(CAircraftModelList &validateModels) const;
|
||||
CStatusMessageList validateForPublishing(CAircraftModelList &validModels, CAircraftModelList &invalidModels) const;
|
||||
|
||||
//! To database JSON
|
||||
QJsonArray toDatabaseJson() const;
|
||||
|
||||
Reference in New Issue
Block a user