mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 04:40:06 +00:00 
			
		
		
		
	Add current radar site to NexradFileRequest in the event there is no radar site in the Archive II file
This commit is contained in:
		
							parent
							
								
									1259cba811
								
							
						
					
					
						commit
						9071c4751e
					
				
					 6 changed files with 85 additions and 65 deletions
				
			
		|  | @ -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(), | ||||
|  |  | |||
|  | @ -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(), | ||||
|  |  | |||
|  | @ -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(); | ||||
|  |  | |||
|  | @ -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_) | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat