diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp index 41f6fdbe..8b95768b 100644 --- a/scwx-qt/source/scwx/qt/main/main_window.cpp +++ b/scwx-qt/source/scwx/qt/main/main_window.cpp @@ -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 = - std::make_shared(); + std::make_shared(currentRadarSite); connect( // request.get(), diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp index c0d9370d..75c471d0 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -207,16 +207,18 @@ public: void UpdateRecentRecords(RadarProductRecordList& recentList, std::shared_ptr record); - void LoadNexradFileAsync(CreateNexradFileFunction load, - std::shared_ptr 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, + std::mutex& mutex, + std::chrono::system_clock::time_point time); + void + LoadProviderData(std::chrono::system_clock::time_point time, std::shared_ptr providerManager, RadarProductRecordMap& recordMap, std::shared_mutex& recordMutex, std::mutex& loadDataMutex, - std::shared_ptr request); + const std::shared_ptr& 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, - std::mutex& mutex, - std::chrono::system_clock::time_point time = {}, - const std::string& radarId = {}); + LoadNexradFile(CreateNexradFileFunction load, + const std::shared_ptr& 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 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, - RadarProductRecordMap& recordMap, - std::shared_mutex& recordMutex, - std::mutex& loadDataMutex, - std::shared_ptr request) + std::chrono::system_clock::time_point time, + std::shared_ptr providerManager, + RadarProductRecordMap& recordMap, + std::shared_mutex& recordMutex, + std::mutex& loadDataMutex, + const std::shared_ptr& 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) + std::chrono::system_clock::time_point time, + const std::shared_ptr& 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) + const std::string& product, + std::chrono::system_clock::time_point time, + const std::shared_ptr& 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) + std::istream& is, const std::shared_ptr& request) { logger_->debug("LoadData()"); @@ -900,8 +906,8 @@ void RadarProductManager::LoadData( } void RadarProductManager::LoadFile( - const std::string& filename, - std::shared_ptr request) + const std::string& filename, + const std::shared_ptr& request) { logger_->debug("LoadFile: {}", filename); @@ -951,22 +957,21 @@ void RadarProductManager::LoadFile( } void RadarProductManagerImpl::LoadNexradFileAsync( - CreateNexradFileFunction load, - std::shared_ptr request, - std::mutex& mutex, - std::chrono::system_clock::time_point time) + CreateNexradFileFunction load, + const std::shared_ptr& 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, - std::mutex& mutex, - std::chrono::system_clock::time_point time, - const std::string& radarId) + CreateNexradFileFunction load, + const std::shared_ptr& 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 manager = @@ -1127,7 +1132,7 @@ RadarProductManagerImpl::GetLevel2ProductRecord( { // Product is expired, reload it std::shared_ptr request = - std::make_shared(); + std::make_shared(radarId_); QObject::connect( request.get(), @@ -1192,7 +1197,7 @@ RadarProductManagerImpl::GetLevel3ProductRecord( { // Product is expired, reload it std::shared_ptr request = - std::make_shared(); + std::make_shared(radarId_); QObject::connect( request.get(), diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp index ed8ba97b..aaf28996 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp @@ -42,6 +42,7 @@ public: const std::vector& coordinates(common::RadialSize radialSize) const; float gate_size() const; + std::string radar_id() const; std::shared_ptr 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 = nullptr); + std::chrono::system_clock::time_point time, + const std::shared_ptr& request = nullptr); void LoadLevel3Data( - const std::string& product, - std::chrono::system_clock::time_point time, - std::shared_ptr request = nullptr); + const std::string& product, + std::chrono::system_clock::time_point time, + const std::shared_ptr& request = nullptr); - static void - LoadData(std::istream& is, - std::shared_ptr request = nullptr); - static void - LoadFile(const std::string& filename, - std::shared_ptr request = nullptr); + static void LoadData( + std::istream& is, + const std::shared_ptr& request = nullptr); + static void LoadFile( + const std::string& filename, + const std::shared_ptr& request = nullptr); common::Level3ProductCategoryMap GetAvailableLevel3Categories(); std::vector GetLevel3Products(); diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index 5f16ebf3..a5100e4a 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -1332,7 +1332,8 @@ void MapWidgetImpl::RadarProductManagerConnect() { // Create file request std::shared_ptr request = - std::make_shared(); + std::make_shared( + radarProductManager_->radar_id()); // File request callback if (autoUpdateEnabled_) diff --git a/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp b/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp index 5324027f..42f0ab33 100644 --- a/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp +++ b/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp @@ -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 radarProductRecord_; + std::shared_ptr radarProductRecord_ {nullptr}; }; -NexradFileRequest::NexradFileRequest() : - p(std::make_unique()) +NexradFileRequest::NexradFileRequest(const std::string& currentRadarSite) : + p(std::make_unique(currentRadarSite)) { } NexradFileRequest::~NexradFileRequest() = default; +std::string NexradFileRequest::current_radar_site() const +{ + return p->currentRadarSite_; +} + std::shared_ptr NexradFileRequest::radar_product_record() const { @@ -32,7 +41,7 @@ NexradFileRequest::radar_product_record() const } void NexradFileRequest::set_radar_product_record( - std::shared_ptr record) + const std::shared_ptr& record) { p->radarProductRecord_ = record; } diff --git a/scwx-qt/source/scwx/qt/request/nexrad_file_request.hpp b/scwx-qt/source/scwx/qt/request/nexrad_file_request.hpp index 787f513b..090d7169 100644 --- a/scwx-qt/source/scwx/qt/request/nexrad_file_request.hpp +++ b/scwx-qt/source/scwx/qt/request/nexrad_file_request.hpp @@ -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 radar_product_record() const; - void - set_radar_product_record(std::shared_ptr record); + void set_radar_product_record( + const std::shared_ptr& record); private: - std::unique_ptr p; + class Impl; + std::unique_ptr p; signals: void RequestComplete(std::shared_ptr request);