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());
auto radarSite = p->activeMap_->GetRadarSite();
std::string currentRadarSite =
(radarSite != nullptr) ? radarSite->id() : std::string {};
std::shared_ptr<request::NexradFileRequest> request =
std::make_shared<request::NexradFileRequest>();
std::make_shared<request::NexradFileRequest>(currentRadarSite);
connect( //
request.get(),

View file

@ -207,16 +207,18 @@ public:
void UpdateRecentRecords(RadarProductRecordList& recentList,
std::shared_ptr<types::RadarProductRecord> record);
void LoadNexradFileAsync(CreateNexradFileFunction load,
std::shared_ptr<request::NexradFileRequest> request,
std::mutex& mutex,
std::chrono::system_clock::time_point time);
void LoadProviderData(std::chrono::system_clock::time_point time,
void LoadNexradFileAsync(
CreateNexradFileFunction load,
const std::shared_ptr<request::NexradFileRequest>& request,
std::mutex& mutex,
std::chrono::system_clock::time_point time);
void
LoadProviderData(std::chrono::system_clock::time_point time,
std::shared_ptr<ProviderManager> providerManager,
RadarProductRecordMap& recordMap,
std::shared_mutex& recordMutex,
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 PopulateLevel3ProductTimes(const std::string& product,
std::chrono::system_clock::time_point time);
@ -228,11 +230,10 @@ public:
std::chrono::system_clock::time_point time);
static void
LoadNexradFile(CreateNexradFileFunction load,
std::shared_ptr<request::NexradFileRequest> request,
std::mutex& mutex,
std::chrono::system_clock::time_point time = {},
const std::string& radarId = {});
LoadNexradFile(CreateNexradFileFunction load,
const std::shared_ptr<request::NexradFileRequest>& request,
std::mutex& mutex,
std::chrono::system_clock::time_point time = {});
const std::string radarId_;
bool initialized_;
@ -395,6 +396,11 @@ float RadarProductManager::gate_size() const
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
{
return p->radarSite_;
@ -778,12 +784,12 @@ RadarProductManager::GetActiveVolumeTimes(
}
void RadarProductManagerImpl::LoadProviderData(
std::chrono::system_clock::time_point time,
std::shared_ptr<ProviderManager> providerManager,
RadarProductRecordMap& recordMap,
std::shared_mutex& recordMutex,
std::mutex& loadDataMutex,
std::shared_ptr<request::NexradFileRequest> request)
std::chrono::system_clock::time_point time,
std::shared_ptr<ProviderManager> providerManager,
RadarProductRecordMap& recordMap,
std::shared_mutex& recordMutex,
std::mutex& loadDataMutex,
const std::shared_ptr<request::NexradFileRequest>& request)
{
logger_->debug("LoadProviderData: {}, {}",
providerManager->name(),
@ -838,8 +844,8 @@ void RadarProductManagerImpl::LoadProviderData(
}
void RadarProductManager::LoadLevel2Data(
std::chrono::system_clock::time_point time,
std::shared_ptr<request::NexradFileRequest> request)
std::chrono::system_clock::time_point time,
const std::shared_ptr<request::NexradFileRequest>& request)
{
logger_->debug("LoadLevel2Data: {}", scwx::util::TimeString(time));
@ -852,9 +858,9 @@ void RadarProductManager::LoadLevel2Data(
}
void RadarProductManager::LoadLevel3Data(
const std::string& product,
std::chrono::system_clock::time_point time,
std::shared_ptr<request::NexradFileRequest> request)
const std::string& product,
std::chrono::system_clock::time_point time,
const std::shared_ptr<request::NexradFileRequest>& request)
{
logger_->debug("LoadLevel3Data: {}", scwx::util::TimeString(time));
@ -884,7 +890,7 @@ void RadarProductManager::LoadLevel3Data(
}
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()");
@ -900,8 +906,8 @@ void RadarProductManager::LoadData(
}
void RadarProductManager::LoadFile(
const std::string& filename,
std::shared_ptr<request::NexradFileRequest> request)
const std::string& filename,
const std::shared_ptr<request::NexradFileRequest>& request)
{
logger_->debug("LoadFile: {}", filename);
@ -951,22 +957,21 @@ void RadarProductManager::LoadFile(
}
void RadarProductManagerImpl::LoadNexradFileAsync(
CreateNexradFileFunction load,
std::shared_ptr<request::NexradFileRequest> request,
std::mutex& mutex,
std::chrono::system_clock::time_point time)
CreateNexradFileFunction load,
const std::shared_ptr<request::NexradFileRequest>& request,
std::mutex& mutex,
std::chrono::system_clock::time_point time)
{
boost::asio::post(threadPool_,
[=, this, &mutex]()
{ LoadNexradFile(load, request, mutex, time, radarId_); });
[=, &mutex]()
{ LoadNexradFile(load, request, mutex, time); });
}
void RadarProductManagerImpl::LoadNexradFile(
CreateNexradFileFunction load,
std::shared_ptr<request::NexradFileRequest> request,
std::mutex& mutex,
std::chrono::system_clock::time_point time,
const std::string& radarId)
CreateNexradFileFunction load,
const std::shared_ptr<request::NexradFileRequest>& request,
std::mutex& mutex,
std::chrono::system_clock::time_point time)
{
std::unique_lock lock {mutex};
@ -992,7 +997,7 @@ void RadarProductManagerImpl::LoadNexradFile(
std::string recordRadarId = (record->radar_id());
if (recordRadarId.empty())
{
recordRadarId = radarId;
recordRadarId = request->current_radar_site();
}
std::shared_ptr<RadarProductManager> manager =
@ -1127,7 +1132,7 @@ RadarProductManagerImpl::GetLevel2ProductRecord(
{
// Product is expired, reload it
std::shared_ptr<request::NexradFileRequest> request =
std::make_shared<request::NexradFileRequest>();
std::make_shared<request::NexradFileRequest>(radarId_);
QObject::connect(
request.get(),
@ -1192,7 +1197,7 @@ RadarProductManagerImpl::GetLevel3ProductRecord(
{
// Product is expired, reload it
std::shared_ptr<request::NexradFileRequest> request =
std::make_shared<request::NexradFileRequest>();
std::make_shared<request::NexradFileRequest>(radarId_);
QObject::connect(
request.get(),

View file

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

View file

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

View file

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

View file

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