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 73cdf7df..5ca206d1 100644 --- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp +++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp @@ -683,9 +683,15 @@ RadarProductManager::GetActiveVolumeTimes( { std::unordered_set> providers {}; - std::set volumeTimes; + std::set volumeTimes {}; std::mutex volumeTimesMutex {}; + // Return a default set of volume times if the default time point is given + if (time == std::chrono::system_clock::time_point {}) + { + return volumeTimes; + } + // Lock the refresh map std::shared_lock refreshLock {p->refreshMapMutex_}; @@ -717,6 +723,12 @@ RadarProductManager::GetActiveVolumeTimes( dates.end(), [&](const auto& date) { + // Don't query for a time point in the future + if (date > std::chrono::system_clock::now()) + { + return; + } + // Query the provider for volume time points auto timePoints = provider->GetTimePointsByDate(date); diff --git a/wxdata/include/scwx/provider/aws_nexrad_data_provider.hpp b/wxdata/include/scwx/provider/aws_nexrad_data_provider.hpp index b258e0d8..436ad0ba 100644 --- a/wxdata/include/scwx/provider/aws_nexrad_data_provider.hpp +++ b/wxdata/include/scwx/provider/aws_nexrad_data_provider.hpp @@ -35,7 +35,7 @@ public: std::string FindLatestKey() override; std::vector GetTimePointsByDate(std::chrono::system_clock::time_point date) override; - std::pair + std::tuple ListObjects(std::chrono::system_clock::time_point date) override; std::shared_ptr LoadObjectByKey(const std::string& key) override; diff --git a/wxdata/include/scwx/provider/nexrad_data_provider.hpp b/wxdata/include/scwx/provider/nexrad_data_provider.hpp index 2b1f683b..14a75815 100644 --- a/wxdata/include/scwx/provider/nexrad_data_provider.hpp +++ b/wxdata/include/scwx/provider/nexrad_data_provider.hpp @@ -64,10 +64,11 @@ public: * * @param date Date for which to list objects * - * @return - New objects found for the given date + * @return - Whether query was successful + * - New objects found for the given date * - Total objects found for the given date */ - virtual std::pair + virtual std::tuple ListObjects(std::chrono::system_clock::time_point date) = 0; /** diff --git a/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp b/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp index e8f99b47..2960a3df 100644 --- a/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp +++ b/wxdata/source/scwx/provider/aws_nexrad_data_provider.cpp @@ -165,7 +165,7 @@ AwsNexradDataProvider::GetTimePointsByDate( std::vector timePoints {}; - logger_->debug("GetTimePointsByDate: {}", day); + logger_->debug("GetTimePointsByDate: {}", util::TimeString(date)); std::shared_lock lock(p->objectsMutex_); @@ -177,7 +177,11 @@ AwsNexradDataProvider::GetTimePointsByDate( lock.unlock(); // List objects, since the date is not present in the date list - ListObjects(date); + auto [success, newObjects, totalObjects] = ListObjects(date); + if (success) + { + p->UpdateObjectDates(date); + } // Re-lock mutex lock.lock(); @@ -196,7 +200,7 @@ AwsNexradDataProvider::GetTimePointsByDate( return timePoints; } -std::pair +std::tuple AwsNexradDataProvider::ListObjects(std::chrono::system_clock::time_point date) { const std::string prefix {GetPrefix(date)}; @@ -262,7 +266,7 @@ AwsNexradDataProvider::ListObjects(std::chrono::system_clock::time_point date) outcome.GetError().GetMessage()); } - return std::make_pair(newObjects, totalObjects); + return {outcome.IsSuccess(), newObjects, totalObjects}; } std::shared_ptr @@ -309,16 +313,16 @@ std::pair AwsNexradDataProvider::Refresh() // yesterday, to ensure we haven't missed any objects near midnight if (p->refreshDate_ < today) { - auto [newObjects, totalObjects] = ListObjects(yesterday); - allNewObjects = newObjects; - allTotalObjects = totalObjects; + auto [success, newObjects, totalObjects] = ListObjects(yesterday); + allNewObjects = newObjects; + allTotalObjects = totalObjects; if (totalObjects > 0) { p->refreshDate_ = yesterday; } } - auto [newObjects, totalObjects] = ListObjects(today); + auto [success, newObjects, totalObjects] = ListObjects(today); allNewObjects += newObjects; allTotalObjects += totalObjects; if (totalObjects > 0)