Add current radar site to NexradFileRequest in the event there is no radar site in the Archive II file

This commit is contained in:
Dan Paulat 2024-01-27 22:30:02 -06:00
parent 1259cba811
commit 9071c4751e
6 changed files with 85 additions and 65 deletions

View file

@ -430,8 +430,12 @@ void MainWindow::on_actionOpenNexrad_triggered()
{ {
logger_->info("Selected: {}", file.toStdString()); logger_->info("Selected: {}", file.toStdString());
auto radarSite = p->activeMap_->GetRadarSite();
std::string currentRadarSite =
(radarSite != nullptr) ? radarSite->id() : std::string {};
std::shared_ptr<request::NexradFileRequest> request = std::shared_ptr<request::NexradFileRequest> request =
std::make_shared<request::NexradFileRequest>(); std::make_shared<request::NexradFileRequest>(currentRadarSite);
connect( // connect( //
request.get(), request.get(),

View file

@ -207,16 +207,18 @@ public:
void UpdateRecentRecords(RadarProductRecordList& recentList, void UpdateRecentRecords(RadarProductRecordList& recentList,
std::shared_ptr<types::RadarProductRecord> record); std::shared_ptr<types::RadarProductRecord> record);
void LoadNexradFileAsync(CreateNexradFileFunction load, void LoadNexradFileAsync(
std::shared_ptr<request::NexradFileRequest> request, CreateNexradFileFunction load,
const std::shared_ptr<request::NexradFileRequest>& request,
std::mutex& mutex, std::mutex& mutex,
std::chrono::system_clock::time_point time); std::chrono::system_clock::time_point time);
void LoadProviderData(std::chrono::system_clock::time_point time, void
LoadProviderData(std::chrono::system_clock::time_point time,
std::shared_ptr<ProviderManager> providerManager, std::shared_ptr<ProviderManager> providerManager,
RadarProductRecordMap& recordMap, RadarProductRecordMap& recordMap,
std::shared_mutex& recordMutex, std::shared_mutex& recordMutex,
std::mutex& loadDataMutex, std::mutex& loadDataMutex,
std::shared_ptr<request::NexradFileRequest> request); const std::shared_ptr<request::NexradFileRequest>& request);
void PopulateLevel2ProductTimes(std::chrono::system_clock::time_point time); void PopulateLevel2ProductTimes(std::chrono::system_clock::time_point time);
void PopulateLevel3ProductTimes(const std::string& product, void PopulateLevel3ProductTimes(const std::string& product,
std::chrono::system_clock::time_point time); std::chrono::system_clock::time_point time);
@ -229,10 +231,9 @@ public:
static void static void
LoadNexradFile(CreateNexradFileFunction load, LoadNexradFile(CreateNexradFileFunction load,
std::shared_ptr<request::NexradFileRequest> request, const std::shared_ptr<request::NexradFileRequest>& request,
std::mutex& mutex, std::mutex& mutex,
std::chrono::system_clock::time_point time = {}, std::chrono::system_clock::time_point time = {});
const std::string& radarId = {});
const std::string radarId_; const std::string radarId_;
bool initialized_; bool initialized_;
@ -395,6 +396,11 @@ float RadarProductManager::gate_size() const
return (p->radarSite_->type() == "tdwr") ? 150.0f : 250.0f; return (p->radarSite_->type() == "tdwr") ? 150.0f : 250.0f;
} }
std::string RadarProductManager::radar_id() const
{
return p->radarId_;
}
std::shared_ptr<config::RadarSite> RadarProductManager::radar_site() const std::shared_ptr<config::RadarSite> RadarProductManager::radar_site() const
{ {
return p->radarSite_; return p->radarSite_;
@ -783,7 +789,7 @@ void RadarProductManagerImpl::LoadProviderData(
RadarProductRecordMap& recordMap, RadarProductRecordMap& recordMap,
std::shared_mutex& recordMutex, std::shared_mutex& recordMutex,
std::mutex& loadDataMutex, std::mutex& loadDataMutex,
std::shared_ptr<request::NexradFileRequest> request) const std::shared_ptr<request::NexradFileRequest>& request)
{ {
logger_->debug("LoadProviderData: {}, {}", logger_->debug("LoadProviderData: {}, {}",
providerManager->name(), providerManager->name(),
@ -839,7 +845,7 @@ void RadarProductManagerImpl::LoadProviderData(
void RadarProductManager::LoadLevel2Data( void RadarProductManager::LoadLevel2Data(
std::chrono::system_clock::time_point time, std::chrono::system_clock::time_point time,
std::shared_ptr<request::NexradFileRequest> request) const std::shared_ptr<request::NexradFileRequest>& request)
{ {
logger_->debug("LoadLevel2Data: {}", scwx::util::TimeString(time)); logger_->debug("LoadLevel2Data: {}", scwx::util::TimeString(time));
@ -854,7 +860,7 @@ void RadarProductManager::LoadLevel2Data(
void RadarProductManager::LoadLevel3Data( void RadarProductManager::LoadLevel3Data(
const std::string& product, const std::string& product,
std::chrono::system_clock::time_point time, std::chrono::system_clock::time_point time,
std::shared_ptr<request::NexradFileRequest> request) const std::shared_ptr<request::NexradFileRequest>& request)
{ {
logger_->debug("LoadLevel3Data: {}", scwx::util::TimeString(time)); logger_->debug("LoadLevel3Data: {}", scwx::util::TimeString(time));
@ -884,7 +890,7 @@ void RadarProductManager::LoadLevel3Data(
} }
void RadarProductManager::LoadData( void RadarProductManager::LoadData(
std::istream& is, std::shared_ptr<request::NexradFileRequest> request) std::istream& is, const std::shared_ptr<request::NexradFileRequest>& request)
{ {
logger_->debug("LoadData()"); logger_->debug("LoadData()");
@ -901,7 +907,7 @@ void RadarProductManager::LoadData(
void RadarProductManager::LoadFile( void RadarProductManager::LoadFile(
const std::string& filename, const std::string& filename,
std::shared_ptr<request::NexradFileRequest> request) const std::shared_ptr<request::NexradFileRequest>& request)
{ {
logger_->debug("LoadFile: {}", filename); logger_->debug("LoadFile: {}", filename);
@ -952,21 +958,20 @@ void RadarProductManager::LoadFile(
void RadarProductManagerImpl::LoadNexradFileAsync( void RadarProductManagerImpl::LoadNexradFileAsync(
CreateNexradFileFunction load, CreateNexradFileFunction load,
std::shared_ptr<request::NexradFileRequest> request, const std::shared_ptr<request::NexradFileRequest>& request,
std::mutex& mutex, std::mutex& mutex,
std::chrono::system_clock::time_point time) std::chrono::system_clock::time_point time)
{ {
boost::asio::post(threadPool_, boost::asio::post(threadPool_,
[=, this, &mutex]() [=, &mutex]()
{ LoadNexradFile(load, request, mutex, time, radarId_); }); { LoadNexradFile(load, request, mutex, time); });
} }
void RadarProductManagerImpl::LoadNexradFile( void RadarProductManagerImpl::LoadNexradFile(
CreateNexradFileFunction load, CreateNexradFileFunction load,
std::shared_ptr<request::NexradFileRequest> request, const std::shared_ptr<request::NexradFileRequest>& request,
std::mutex& mutex, std::mutex& mutex,
std::chrono::system_clock::time_point time, std::chrono::system_clock::time_point time)
const std::string& radarId)
{ {
std::unique_lock lock {mutex}; std::unique_lock lock {mutex};
@ -992,7 +997,7 @@ void RadarProductManagerImpl::LoadNexradFile(
std::string recordRadarId = (record->radar_id()); std::string recordRadarId = (record->radar_id());
if (recordRadarId.empty()) if (recordRadarId.empty())
{ {
recordRadarId = radarId; recordRadarId = request->current_radar_site();
} }
std::shared_ptr<RadarProductManager> manager = std::shared_ptr<RadarProductManager> manager =
@ -1127,7 +1132,7 @@ RadarProductManagerImpl::GetLevel2ProductRecord(
{ {
// Product is expired, reload it // Product is expired, reload it
std::shared_ptr<request::NexradFileRequest> request = std::shared_ptr<request::NexradFileRequest> request =
std::make_shared<request::NexradFileRequest>(); std::make_shared<request::NexradFileRequest>(radarId_);
QObject::connect( QObject::connect(
request.get(), request.get(),
@ -1192,7 +1197,7 @@ RadarProductManagerImpl::GetLevel3ProductRecord(
{ {
// Product is expired, reload it // Product is expired, reload it
std::shared_ptr<request::NexradFileRequest> request = std::shared_ptr<request::NexradFileRequest> request =
std::make_shared<request::NexradFileRequest>(); std::make_shared<request::NexradFileRequest>(radarId_);
QObject::connect( QObject::connect(
request.get(), request.get(),

View file

@ -42,6 +42,7 @@ public:
const std::vector<float>& coordinates(common::RadialSize radialSize) const; const std::vector<float>& coordinates(common::RadialSize radialSize) const;
float gate_size() const; float gate_size() const;
std::string radar_id() const;
std::shared_ptr<config::RadarSite> radar_site() const; std::shared_ptr<config::RadarSite> radar_site() const;
void Initialize(); void Initialize();
@ -111,18 +112,18 @@ public:
void LoadLevel2Data( void LoadLevel2Data(
std::chrono::system_clock::time_point time, std::chrono::system_clock::time_point time,
std::shared_ptr<request::NexradFileRequest> request = nullptr); const std::shared_ptr<request::NexradFileRequest>& request = nullptr);
void LoadLevel3Data( void LoadLevel3Data(
const std::string& product, const std::string& product,
std::chrono::system_clock::time_point time, std::chrono::system_clock::time_point time,
std::shared_ptr<request::NexradFileRequest> request = nullptr); const std::shared_ptr<request::NexradFileRequest>& request = nullptr);
static void static void LoadData(
LoadData(std::istream& is, std::istream& is,
std::shared_ptr<request::NexradFileRequest> request = nullptr); const std::shared_ptr<request::NexradFileRequest>& request = nullptr);
static void static void LoadFile(
LoadFile(const std::string& filename, const std::string& filename,
std::shared_ptr<request::NexradFileRequest> request = nullptr); const std::shared_ptr<request::NexradFileRequest>& request = nullptr);
common::Level3ProductCategoryMap GetAvailableLevel3Categories(); common::Level3ProductCategoryMap GetAvailableLevel3Categories();
std::vector<std::string> GetLevel3Products(); std::vector<std::string> GetLevel3Products();

View file

@ -1332,7 +1332,8 @@ void MapWidgetImpl::RadarProductManagerConnect()
{ {
// Create file request // Create file request
std::shared_ptr<request::NexradFileRequest> request = std::shared_ptr<request::NexradFileRequest> request =
std::make_shared<request::NexradFileRequest>(); std::make_shared<request::NexradFileRequest>(
radarProductManager_->radar_id());
// File request callback // File request callback
if (autoUpdateEnabled_) if (autoUpdateEnabled_)

View file

@ -9,22 +9,31 @@ namespace request
static const std::string logPrefix_ = "scwx::qt::request::nexrad_file_request"; static const std::string logPrefix_ = "scwx::qt::request::nexrad_file_request";
class NexradFileRequestImpl class NexradFileRequest::Impl
{ {
public: public:
explicit NexradFileRequestImpl() : radarProductRecord_ {nullptr} {} explicit Impl(const std::string& currentRadarSite) :
currentRadarSite_ {currentRadarSite}
{
}
~Impl() = default;
~NexradFileRequestImpl() {} const std::string currentRadarSite_;
std::shared_ptr<types::RadarProductRecord> radarProductRecord_; std::shared_ptr<types::RadarProductRecord> radarProductRecord_ {nullptr};
}; };
NexradFileRequest::NexradFileRequest() : NexradFileRequest::NexradFileRequest(const std::string& currentRadarSite) :
p(std::make_unique<NexradFileRequestImpl>()) p(std::make_unique<Impl>(currentRadarSite))
{ {
} }
NexradFileRequest::~NexradFileRequest() = default; NexradFileRequest::~NexradFileRequest() = default;
std::string NexradFileRequest::current_radar_site() const
{
return p->currentRadarSite_;
}
std::shared_ptr<types::RadarProductRecord> std::shared_ptr<types::RadarProductRecord>
NexradFileRequest::radar_product_record() const NexradFileRequest::radar_product_record() const
{ {
@ -32,7 +41,7 @@ NexradFileRequest::radar_product_record() const
} }
void NexradFileRequest::set_radar_product_record( void NexradFileRequest::set_radar_product_record(
std::shared_ptr<types::RadarProductRecord> record) const std::shared_ptr<types::RadarProductRecord>& record)
{ {
p->radarProductRecord_ = record; p->radarProductRecord_ = record;
} }

View file

@ -13,23 +13,23 @@ namespace qt
namespace request namespace request
{ {
class NexradFileRequestImpl;
class NexradFileRequest : public QObject class NexradFileRequest : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit NexradFileRequest(); explicit NexradFileRequest(const std::string& currentRadarSite = {});
~NexradFileRequest(); ~NexradFileRequest();
std::string current_radar_site() const;
std::shared_ptr<types::RadarProductRecord> radar_product_record() const; std::shared_ptr<types::RadarProductRecord> radar_product_record() const;
void void set_radar_product_record(
set_radar_product_record(std::shared_ptr<types::RadarProductRecord> record); const std::shared_ptr<types::RadarProductRecord>& record);
private: private:
std::unique_ptr<NexradFileRequestImpl> p; class Impl;
std::unique_ptr<Impl> p;
signals: signals:
void RequestComplete(std::shared_ptr<NexradFileRequest> request); void RequestComplete(std::shared_ptr<NexradFileRequest> request);