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 d6b0d20b..94fc73d7 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -304,7 +304,7 @@ void RadarProductManagerImpl::RefreshLevel2Data() util::async( [&]() { - size_t newObjects = level2DataProvider_->Refresh(); + auto [newObjects, totalObjects] = level2DataProvider_->Refresh(); std::chrono::milliseconds interval = kRetryInterval_; @@ -325,11 +325,17 @@ void RadarProductManagerImpl::RefreshLevel2Data() emit self_->NewLevel2DataAvailable(latestTime); } + else if (level2DataRefreshEnabled_ && totalObjects == 0) + { + logger_->info("No level 2 data found, disabling refresh"); - std::unique_lock lock(level2DataRefreshTimerMutex_); + level2DataRefreshEnabled_ = false; + } if (level2DataRefreshEnabled_) { + std::unique_lock lock(level2DataRefreshTimerMutex_); + logger_->debug( "Scheduled refresh in {:%M:%S}", std::chrono::duration_cast(interval)); diff --git a/wxdata/include/scwx/provider/aws_nexrad_data_provider.hpp b/wxdata/include/scwx/provider/aws_nexrad_data_provider.hpp index d56132ce..46f7cc53 100644 --- a/wxdata/include/scwx/provider/aws_nexrad_data_provider.hpp +++ b/wxdata/include/scwx/provider/aws_nexrad_data_provider.hpp @@ -34,7 +34,7 @@ public: std::pair ListObjects(std::chrono::system_clock::time_point date); std::shared_ptr LoadObjectByKey(const std::string& key); - size_t Refresh(); + std::pair Refresh(); protected: virtual std::string diff --git a/wxdata/include/scwx/provider/nexrad_data_provider.hpp b/wxdata/include/scwx/provider/nexrad_data_provider.hpp index cb5dfe75..27506c32 100644 --- a/wxdata/include/scwx/provider/nexrad_data_provider.hpp +++ b/wxdata/include/scwx/provider/nexrad_data_provider.hpp @@ -84,9 +84,11 @@ public: * no objects have been added to the cache for the current date, the previous * date is also queried for data. * - * @return New objects found + * @return - New objects found + * - Total objects found */ - virtual size_t Refresh() = 0; + + virtual std::pair Refresh() = 0; /** * Convert the object key to a time point. diff --git a/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp b/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp index 90555e5b..e8512ca2 100644 --- a/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp +++ b/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp @@ -237,7 +237,7 @@ AwsNexradDataProvider::LoadObjectByKey(const std::string& key) return nexradFile; } -size_t AwsNexradDataProvider::Refresh() +std::pair AwsNexradDataProvider::Refresh() { using namespace std::chrono; @@ -251,14 +251,16 @@ size_t AwsNexradDataProvider::Refresh() std::unique_lock lock(refreshMutex); - size_t totalNewObjects = 0; + size_t allNewObjects = 0; + size_t allTotalObjects = 0; // If we haven't gotten any objects from today, first list objects for // yesterday, to ensure we haven't missed any objects near midnight if (refreshDate < today) { auto [newObjects, totalObjects] = ListObjects(yesterday); - totalNewObjects = newObjects; + allNewObjects = newObjects; + allTotalObjects = totalObjects; if (totalObjects > 0) { refreshDate = yesterday; @@ -266,13 +268,14 @@ size_t AwsNexradDataProvider::Refresh() } auto [newObjects, totalObjects] = ListObjects(today); - totalNewObjects += newObjects; + allNewObjects += newObjects; + allTotalObjects += totalObjects; if (totalObjects > 0) { refreshDate = today; } - return totalNewObjects; + return std::make_pair(allNewObjects, allTotalObjects); } void AwsNexradDataProvider::Impl::PruneObjects()