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 2cb623b6..cdc5ecf4 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -1,7 +1,9 @@ #include #include +#include #include #include +#include #include #include @@ -239,14 +241,56 @@ static void LoadNexradFile(CreateNexradFileFunction load, std::unique_lock lock(fileLoadMutex_); std::shared_ptr nexradFile = load(); - // TODO: Store and index - // - Should this impact arguments sent back in onComplete? + std::shared_ptr level2File = + std::dynamic_pointer_cast(nexradFile); + std::shared_ptr level3File = + std::dynamic_pointer_cast(nexradFile); + + bool fileValid = false; + std::string radarId = "????"; + std::string siteId = "???"; + uint16_t julianDate = 0; + uint32_t milliseconds = 0; + + std::chrono::system_clock::time_point time; + + if (level2File != nullptr) + { + fileValid = true; + radarId = level2File->icao(); + siteId = common::GetSiteId(radarId); + julianDate = level2File->julian_date(); + milliseconds = level2File->milliseconds(); + } + else if (level3File != nullptr) + { + fileValid = true; + siteId = level3File->wmo_header()->product_designator(); + radarId = config::GetRadarIdFromSiteId(siteId); + julianDate = level3File->message()->header().date_of_message(); + milliseconds = + level3File->message()->header().time_of_message() * 1000u; + } + + if (fileValid) + { + time = util::TimePoint(julianDate, milliseconds); + + std::shared_ptr manager = + RadarProductManager::Instance(radarId); + + // TODO: Store and index + // TODO: When to initialize? + } lock.unlock(); if (request != nullptr) { request->set_nexrad_file(nexradFile); + request->set_radar_id(radarId); + request->set_site_id(siteId); + request->set_time(time); emit request->RequestComplete(request); } }); 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 a01124df..586b5be1 100644 --- a/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp +++ b/scwx-qt/source/scwx/qt/request/nexrad_file_request.cpp @@ -15,11 +15,17 @@ static const std::string logPrefix_ = class NexradFileRequestImpl { public: - explicit NexradFileRequestImpl() : nexradFile_ {nullptr} {} + explicit NexradFileRequestImpl() : + nexradFile_ {nullptr}, radarId_ {}, siteId_ {}, time_ {} + { + } ~NexradFileRequestImpl() {} - std::shared_ptr nexradFile_; + std::shared_ptr nexradFile_; + std::string radarId_; + std::string siteId_; + std::chrono::system_clock::time_point time_; }; NexradFileRequest::NexradFileRequest() : @@ -33,12 +39,42 @@ std::shared_ptr NexradFileRequest::nexrad_file() const return p->nexradFile_; } +std::string NexradFileRequest::radar_id() const +{ + return p->radarId_; +} + +std::string NexradFileRequest::site_id() const +{ + return p->siteId_; +} + +std::chrono::system_clock::time_point NexradFileRequest::time() const +{ + return p->time_; +} + void NexradFileRequest::set_nexrad_file( std::shared_ptr nexradFile) { p->nexradFile_ = nexradFile; } +void NexradFileRequest::set_radar_id(const std::string& radarId) +{ + p->radarId_ = radarId; +} + +void NexradFileRequest::set_site_id(const std::string& siteId) +{ + p->siteId_ = siteId; +} + +void NexradFileRequest::set_time(std::chrono::system_clock::time_point time) +{ + p->time_ = time; +} + } // namespace request } // namespace qt } // namespace scwx 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 2681676e..37fa77cd 100644 --- a/scwx-qt/source/scwx/qt/request/nexrad_file_request.hpp +++ b/scwx-qt/source/scwx/qt/request/nexrad_file_request.hpp @@ -2,6 +2,7 @@ #include +#include #include #include @@ -23,9 +24,15 @@ public: explicit NexradFileRequest(); ~NexradFileRequest(); - std::shared_ptr nexrad_file() const; + std::shared_ptr nexrad_file() const; + std::string radar_id() const; + std::string site_id() const; + std::chrono::system_clock::time_point time() const; void set_nexrad_file(std::shared_ptr nexradFile); + void set_radar_id(const std::string& radarId); + void set_site_id(const std::string& siteId); + void set_time(std::chrono::system_clock::time_point time); private: std::unique_ptr p; diff --git a/wxdata/source/scwx/wsr88d/level3_file.cpp b/wxdata/source/scwx/wsr88d/level3_file.cpp index 27d62b3c..46508b7c 100644 --- a/wxdata/source/scwx/wsr88d/level3_file.cpp +++ b/wxdata/source/scwx/wsr88d/level3_file.cpp @@ -87,6 +87,8 @@ bool Level3File::LoadData(std::istream& is) << logPrefix_ << "Date/Time: " << p->wmoHeader_->date_time(); BOOST_LOG_TRIVIAL(debug) << logPrefix_ << "Category: " << p->wmoHeader_->product_category(); + BOOST_LOG_TRIVIAL(debug) + << logPrefix_ << "Site ID: " << p->wmoHeader_->product_designator(); // If the header is compressed if (is.peek() == 0x78)