From a306fb4363cc7fe6241c4f2398e5b29589b4f5a1 Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 30 Aug 2025 18:24:50 -0500 Subject: [PATCH] Add NoUpdateReason of NotAvailable, driven by ProductNotAvailable --- .../source/scwx/qt/manager/timeline_manager.cpp | 3 ++- scwx-qt/source/scwx/qt/types/map_types.hpp | 1 + .../source/scwx/qt/types/radar_product_types.hpp | 1 + .../source/scwx/qt/view/level2_product_view.cpp | 15 +++++++++------ .../source/scwx/qt/view/level3_radial_view.cpp | 10 ++++++++-- .../source/scwx/qt/view/level3_raster_view.cpp | 10 ++++++++-- .../source/scwx/qt/view/radar_product_view.cpp | 12 ++++++++++++ .../source/scwx/qt/view/radar_product_view.hpp | 13 ++++++++----- 8 files changed, 49 insertions(+), 16 deletions(-) diff --git a/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp b/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp index 70c4b2ed..6a8765ae 100644 --- a/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/timeline_manager.cpp @@ -317,7 +317,8 @@ void TimelineManager::ReceiveRadarSweepNotUpdated(std::size_t mapIndex, types::NoUpdateReason reason) { if (!p->radarSweepMonitorActive_ || - reason == types::NoUpdateReason::NotLoaded) + (reason == types::NoUpdateReason::NotLoaded || + reason == types::NoUpdateReason::NotAvailable)) { return; } diff --git a/scwx-qt/source/scwx/qt/types/map_types.hpp b/scwx-qt/source/scwx/qt/types/map_types.hpp index 5853a188..e8c2a24f 100644 --- a/scwx-qt/source/scwx/qt/types/map_types.hpp +++ b/scwx-qt/source/scwx/qt/types/map_types.hpp @@ -25,6 +25,7 @@ enum class NoUpdateReason { NoChange, NotLoaded, + NotAvailable, InvalidProduct, InvalidData }; diff --git a/scwx-qt/source/scwx/qt/types/radar_product_types.hpp b/scwx-qt/source/scwx/qt/types/radar_product_types.hpp index 2a1f568e..7e9fd70c 100644 --- a/scwx-qt/source/scwx/qt/types/radar_product_types.hpp +++ b/scwx-qt/source/scwx/qt/types/radar_product_types.hpp @@ -7,6 +7,7 @@ namespace scwx::qt::types enum class RadarProductLoadStatus : std::uint8_t { + ProductNotLoaded, ProductLoaded, ListingProducts, LoadingProduct, diff --git a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp index eadf3615..a9ea3b00 100644 --- a/scwx-qt/source/scwx/qt/view/level2_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level2_product_view.cpp @@ -548,17 +548,20 @@ void Level2ProductView::ComputeSweep() std::shared_ptr radarData; std::chrono::system_clock::time_point requestedTime {selected_time()}; - std::tie(radarData, - p->elevationCut_, - p->elevationCuts_, - std::ignore, - std::ignore) = + types::RadarProductLoadStatus loadStatus {}; + std::tie( + radarData, p->elevationCut_, p->elevationCuts_, std::ignore, loadStatus) = radarProductManager->GetLevel2Data( p->dataBlockType_, p->selectedElevation_, requestedTime); + set_load_status(loadStatus); + if (radarData == nullptr) { - Q_EMIT SweepNotComputed(types::NoUpdateReason::NotLoaded); + Q_EMIT SweepNotComputed( + loadStatus == types::RadarProductLoadStatus::ProductNotAvailable ? + types::NoUpdateReason::NotAvailable : + types::NoUpdateReason::NotLoaded); return; } if ((radarData == p->elevationScan_) && diff --git a/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp b/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp index 60eb780e..b8fe539b 100644 --- a/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level3_radial_view.cpp @@ -136,9 +136,12 @@ void Level3RadialView::ComputeSweep() std::shared_ptr message; std::chrono::system_clock::time_point requestedTime {selected_time()}; std::chrono::system_clock::time_point foundTime; - std::tie(message, foundTime, std::ignore) = + types::RadarProductLoadStatus loadStatus {}; + std::tie(message, foundTime, loadStatus) = radarProductManager->GetLevel3Data(GetRadarProductName(), requestedTime); + set_load_status(loadStatus); + // If a different time was found than what was requested, update it if (requestedTime != foundTime) { @@ -148,7 +151,10 @@ void Level3RadialView::ComputeSweep() if (message == nullptr) { logger_->debug("Level 3 data not found"); - Q_EMIT SweepNotComputed(types::NoUpdateReason::NotLoaded); + Q_EMIT SweepNotComputed( + loadStatus == types::RadarProductLoadStatus::ProductNotAvailable ? + types::NoUpdateReason::NotAvailable : + types::NoUpdateReason::NotLoaded); return; } diff --git a/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp b/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp index 75aa1c0d..92ecbb9f 100644 --- a/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp +++ b/scwx-qt/source/scwx/qt/view/level3_raster_view.cpp @@ -121,9 +121,12 @@ void Level3RasterView::ComputeSweep() std::shared_ptr message; std::chrono::system_clock::time_point requestedTime {selected_time()}; std::chrono::system_clock::time_point foundTime; - std::tie(message, foundTime, std::ignore) = + types::RadarProductLoadStatus loadStatus {}; + std::tie(message, foundTime, loadStatus) = radarProductManager->GetLevel3Data(GetRadarProductName(), requestedTime); + set_load_status(loadStatus); + // If a different time was found than what was requested, update it if (requestedTime != foundTime) { @@ -133,7 +136,10 @@ void Level3RasterView::ComputeSweep() if (message == nullptr) { logger_->debug("Level 3 data not found"); - Q_EMIT SweepNotComputed(types::NoUpdateReason::NotLoaded); + Q_EMIT SweepNotComputed( + loadStatus == types::RadarProductLoadStatus::ProductNotAvailable ? + types::NoUpdateReason::NotAvailable : + types::NoUpdateReason::NotLoaded); return; } diff --git a/scwx-qt/source/scwx/qt/view/radar_product_view.cpp b/scwx-qt/source/scwx/qt/view/radar_product_view.cpp index dc50383c..00e261eb 100644 --- a/scwx-qt/source/scwx/qt/view/radar_product_view.cpp +++ b/scwx-qt/source/scwx/qt/view/radar_product_view.cpp @@ -58,6 +58,8 @@ public: std::chrono::system_clock::time_point selectedTime_; bool showSmoothedRangeFolding_ {false}; bool smoothingEnabled_ {false}; + types::RadarProductLoadStatus loadStatus_ { + types::RadarProductLoadStatus::ProductNotLoaded}; std::shared_ptr radarProductManager_; @@ -90,6 +92,11 @@ std::optional RadarProductView::elevation() const return {}; } +types::RadarProductLoadStatus RadarProductView::load_status() const +{ + return p->loadStatus_; +} + std::shared_ptr RadarProductView::radar_product_manager() const { @@ -126,6 +133,11 @@ std::mutex& RadarProductView::sweep_mutex() return p->sweepMutex_; } +void RadarProductView::set_load_status(types::RadarProductLoadStatus loadStatus) +{ + p->loadStatus_ = loadStatus; +} + void RadarProductView::set_radar_product_manager( std::shared_ptr radarProductManager) { diff --git a/scwx-qt/source/scwx/qt/view/radar_product_view.hpp b/scwx-qt/source/scwx/qt/view/radar_product_view.hpp index 2801b74e..267afe0a 100644 --- a/scwx-qt/source/scwx/qt/view/radar_product_view.hpp +++ b/scwx-qt/source/scwx/qt/view/radar_product_view.hpp @@ -38,11 +38,12 @@ public: [[nodiscard]] virtual std::shared_ptr color_table() const = 0; [[nodiscard]] virtual const std::vector& - color_table_lut() const; - [[nodiscard]] virtual std::uint16_t color_table_min() const; - [[nodiscard]] virtual std::uint16_t color_table_max() const; - [[nodiscard]] virtual std::optional elevation() const; - [[nodiscard]] virtual float range() const; + color_table_lut() const; + [[nodiscard]] virtual std::uint16_t color_table_min() const; + [[nodiscard]] virtual std::uint16_t color_table_max() const; + [[nodiscard]] virtual std::optional elevation() const; + [[nodiscard]] types::RadarProductLoadStatus load_status() const; + [[nodiscard]] virtual float range() const; [[nodiscard]] virtual std::chrono::system_clock::time_point sweep_time() const; [[nodiscard]] virtual float unit_scale() const = 0; @@ -98,6 +99,8 @@ protected: virtual void DisconnectRadarProductManager() = 0; virtual void UpdateColorTableLut() = 0; + void set_load_status(types::RadarProductLoadStatus loadStatus); + protected slots: virtual void ComputeSweep();