Allow product code to be retrieved from file instead of always being caller-supplied

This commit is contained in:
Dan Paulat 2022-06-05 08:46:19 -05:00
parent e911882bb7
commit 0a890f5df8
5 changed files with 47 additions and 33 deletions

View file

@ -148,12 +148,12 @@ MainWindow::MainWindow(QWidget* parent) :
if (p->maps_.size() > 2 && p->maps_.at(2) != nullptr)
{
p->SelectRadarProduct(
p->maps_.at(2), common::RadarProductGroup::Level3, "N0B", 153);
p->maps_.at(2), common::RadarProductGroup::Level3, "N0B", 0);
}
if (p->maps_.size() > 3 && p->maps_.at(3) != nullptr)
{
p->SelectRadarProduct(
p->maps_.at(3), common::RadarProductGroup::Level3, "N0G", 154);
p->maps_.at(3), common::RadarProductGroup::Level3, "N0G", 0);
}
connect(qApp,

View file

@ -15,7 +15,12 @@ struct MapContext
{
explicit MapContext(
std::shared_ptr<view::RadarProductView> radarProductView = nullptr) :
gl_ {}, settings_ {}, radarProductView_ {radarProductView}
gl_ {},
settings_ {},
radarProductView_ {radarProductView},
radarProductGroup_ {common::RadarProductGroup::Unknown},
radarProduct_ {"???"},
radarProductCode_ {0}
{
}
~MapContext() = default;
@ -29,6 +34,9 @@ struct MapContext
gl::OpenGLFunctions gl_;
MapSettings settings_;
std::shared_ptr<view::RadarProductView> radarProductView_;
common::RadarProductGroup radarProductGroup_;
std::string radarProduct_;
int16_t radarProductCode_;
};
} // namespace map

View file

@ -267,11 +267,13 @@ void MapWidget::SelectRadarProduct(common::RadarProductGroup group,
common::Level2Product level2Product =
p->GetLevel2ProductOrDefault(productName);
productName = common::GetLevel2Name(level2Product);
p->selectedLevel2Product_ = level2Product;
}
if (radarProductView == nullptr ||
radarProductView->GetRadarProductGroup() != group ||
radarProductView->GetRadarProductName() != productName)
radarProductView->GetRadarProductName() != productName ||
p->context_->radarProductCode_ != productCode)
{
p->RadarProductViewDisconnect();
@ -282,12 +284,14 @@ void MapWidget::SelectRadarProduct(common::RadarProductGroup group,
radarProductViewCreated = true;
}
radarProductView->SelectTime(p->selectedTime_);
if (group == common::RadarProductGroup::Level2)
p->context_->radarProductGroup_ = group;
p->context_->radarProduct_ = productName;
p->context_->radarProductCode_ = productCode;
if (radarProductView != nullptr)
{
p->selectedLevel2Product_ = common::GetLevel2Product(productName);
}
radarProductView->SelectTime(p->selectedTime_);
if (radarProductViewCreated)
{
@ -301,6 +305,7 @@ void MapWidget::SelectRadarProduct(common::RadarProductGroup group,
{
radarProductView->Update();
}
}
if (p->autoRefreshEnabled_)
{
@ -315,14 +320,7 @@ void MapWidget::SelectRadarProduct(
common::RadarProductGroup group = record->radar_product_group();
const std::string product = record->radar_product();
std::chrono::system_clock::time_point time = record->time();
int16_t productCode = 0;
std::shared_ptr<wsr88d::Level3File> level3File = record->level3_file();
if (level3File != nullptr && level3File->message() != nullptr)
{
productCode = level3File->message()->header().message_code();
}
int16_t productCode = record->product_code();
logger_->debug("SelectRadarProduct: {}, {}, {}, {}",
radarId,
@ -598,10 +596,9 @@ void MapWidgetImpl::AutoRefreshConnect()
const std::string& product,
std::chrono::system_clock::time_point latestTime)
{
if (autoRefreshEnabled_ && context_->radarProductView_ != nullptr &&
context_->radarProductView_->GetRadarProductGroup() == group &&
if (autoRefreshEnabled_ && context_->radarProductGroup_ == group &&
(group == common::RadarProductGroup::Level2 ||
context_->radarProductView_->GetRadarProductName() == product))
context_->radarProduct_ == product))
{
// Create file request
std::shared_ptr<request::NexradFileRequest> request =

View file

@ -29,6 +29,7 @@ public:
~RadarProductRecordImpl() {}
std::shared_ptr<wsr88d::NexradFile> nexradFile_;
int16_t productCode_;
std::string radarId_;
std::string radarProduct_;
common::RadarProductGroup radarProductGroup_;
@ -51,6 +52,7 @@ RadarProductRecord::RadarProductRecord(
p->radarProductGroup_ = common::RadarProductGroup::Level2;
p->radarId_ = level2File->icao();
p->siteId_ = common::GetSiteId(p->radarId_);
p->productCode_ = 0;
julianDate = level2File->julian_date();
milliseconds = level2File->milliseconds();
}
@ -60,6 +62,7 @@ RadarProductRecord::RadarProductRecord(
p->radarProduct_ = level3File->wmo_header()->product_category();
p->siteId_ = level3File->wmo_header()->product_designator();
p->radarId_ = config::GetRadarIdFromSiteId(p->siteId_);
p->productCode_ = level3File->message()->header().message_code();
auto descriptionBlock = level3File->message()->description_block();
@ -100,6 +103,11 @@ std::shared_ptr<wsr88d::NexradFile> RadarProductRecord::nexrad_file() const
return p->nexradFile_;
}
int16_t RadarProductRecord::product_code() const
{
return p->productCode_;
}
std::string RadarProductRecord::radar_id() const
{
return p->radarId_;

View file

@ -31,6 +31,7 @@ public:
std::shared_ptr<wsr88d::Ar2vFile> level2_file() const;
std::shared_ptr<wsr88d::Level3File> level3_file() const;
std::shared_ptr<wsr88d::NexradFile> nexrad_file() const;
int16_t product_code() const;
std::string radar_id() const;
std::string radar_product() const;
common::RadarProductGroup radar_product_group() const;