Don't display stale storm tracking information

This commit is contained in:
Dan Paulat 2024-02-18 23:11:24 -06:00
parent 09cb64b84f
commit b493a8d013

View file

@ -142,11 +142,27 @@ void OverlayProductView::Impl::LoadProduct(
self_, self_,
[=, this](std::shared_ptr<request::NexradFileRequest> request) [=, this](std::shared_ptr<request::NexradFileRequest> request)
{ {
using namespace std::chrono_literals;
// Select loaded record // Select loaded record
const auto& record = request->radar_product_record(); const auto& record = request->radar_product_record();
// Validate record // Validate record
if (record != nullptr) if (record != nullptr)
{
auto productTime = record->time();
auto level3File = record->level3_file();
if (level3File != nullptr)
{
const auto& header = level3File->message()->header();
productTime =
util::TimePoint(header.date_of_message(),
header.time_of_message() * 1000);
}
// If the record is from the last 30 minutes
if (productTime + 30min >= time ||
productTime + 30min >= std::chrono::system_clock::now())
{ {
// Store loaded record // Store loaded record
std::unique_lock lock {recordMutex_}; std::unique_lock lock {recordMutex_};
@ -161,6 +177,36 @@ void OverlayProductView::Impl::LoadProduct(
Q_EMIT self_->ProductUpdated(product); Q_EMIT self_->ProductUpdated(product);
} }
} }
else
{
// If product is more than 30 minutes old, discard
std::unique_lock lock {recordMutex_};
std::size_t elementsRemoved = recordMap_.erase(product);
lock.unlock();
if (elementsRemoved > 0)
{
Q_EMIT self_->ProductUpdated(product);
}
logger_->trace("Discarding stale data: {}",
util::TimeString(productTime));
}
}
else
{
// If the product doesn't exist, erase the stale product
std::unique_lock lock {recordMutex_};
std::size_t elementsRemoved = recordMap_.erase(product);
lock.unlock();
if (elementsRemoved > 0)
{
Q_EMIT self_->ProductUpdated(product);
}
logger_->trace("Removing stale product");
}
}); });
} }