[traffxml] Purge expired messages

Signed-off-by: mvglasow <michael -at- vonglasow.com>
This commit is contained in:
mvglasow
2025-06-15 16:40:03 +03:00
parent db3ed87b92
commit f31541efb2
6 changed files with 86 additions and 5 deletions

View File

@@ -265,6 +265,7 @@ MainWindow::MainWindow(Framework & framework)
menuBar()->addMenu(fileMenu);
fileMenu->addAction("Open sample", QKeySequence("Ctrl+O"), this, &MainWindow::OnOpenTrafficSample);
fileMenu->addAction("Purge expired messages", QKeySequence("Ctrl+P"), this, &MainWindow::OnPurgeExpiredMessages);
fileMenu->addAction("Clear TraFF cache", QKeySequence("Ctrl+D"), this, &MainWindow::OnClearCache);
m_closeTrafficSampleAction = fileMenu->addAction("Close sample", QKeySequence("Ctrl+W"), this, &MainWindow::OnCloseTrafficSample);
@@ -408,6 +409,11 @@ void MainWindow::OnOpenTrafficSample()
#endif
}
void MainWindow::OnPurgeExpiredMessages()
{
m_framework.GetTrafficManager().PurgeExpiredMessages();
}
void MainWindow::OnClearCache()
{
m_framework.GetTrafficManager().Clear();

View File

@@ -41,6 +41,11 @@ private:
*/
void OnOpenTrafficSample();
/**
* Called when the user requests to purge expired messages.
*/
void OnPurgeExpiredMessages();
/**
* Called when the user requests to clear the cache.
*/

View File

@@ -195,6 +195,21 @@ bool operator==(TraffLocation const & lhs, TraffLocation const & rhs)
&& (lhs.m_to == rhs.m_to);
}
IsoTime TraffMessage::GetEffectiveExpirationTime()
{
IsoTime result = m_expirationTime;
if (m_startTime && m_startTime.value() > result)
result = m_startTime.value();
if (m_endTime && m_endTime.value() > result)
result = m_endTime.value();
return result;
}
bool TraffMessage::IsExpired(IsoTime now)
{
return GetEffectiveExpirationTime() < now;
}
std::optional<TrafficImpact> TraffMessage::GetTrafficImpact()
{
// no events, no impact

View File

@@ -359,6 +359,27 @@ using MultiMwmColoring = std::map<MwmSet::MwmId, std::map<traffic::TrafficInfo::
struct TraffMessage
{
/**
* @brief Gets the time after which this message effectively expires.
*
* The effective expiration time is the latest of `m_expirationTime`, `m_startTime` and
* `m_endTime`. `nullopt` values are ignored.
*
* @return The effective expiration time for the message.
*/
IsoTime GetEffectiveExpirationTime();
/**
* @brief Whether the message has expired.
*
* A message is considered to have expired if its effective expiration time (as returned by
* `GetEffectiveExpirationTime()` refers to a point in time before `now`.
*
* @param now The reference time to compare to (usually current time)
* @return True if the message has expired, false if not.
*/
bool IsExpired(IsoTime now);
/**
* @brief Retrieves the traffic impact of all events.
*