diff --git a/src/blackcore/airspacemonitor.cpp b/src/blackcore/airspacemonitor.cpp index 1383239ad..1981db09a 100644 --- a/src/blackcore/airspacemonitor.cpp +++ b/src/blackcore/airspacemonitor.cpp @@ -1238,7 +1238,12 @@ namespace BlackCore // list sorted from new to old QWriteLocker lock(&m_lockParts); CAircraftPartsList &partsList = this->m_partsByCallsign[callsign]; - partsList.push_frontMaxElements(parts, MaxPartsPerCallsign); + partsList.push_front(parts); + + // remove outdated parts (but never remove the most recent one) + const auto predicate = [now = parts.getMSecsSinceEpoch()](const auto & p) { return p.getMSecsSinceEpoch() >= now - PartsPerCallsignMaxAgeInSeconds * 1000; }; + const auto newEnd = std::find_if(partsList.rbegin(), partsList.rend(), predicate).base(); + partsList.erase(newEnd, partsList.end()); partsList.front().setTimeOffsetMs(timeOffsetMs); diff --git a/src/blackmisc/simulation/remoteaircraftprovider.h b/src/blackmisc/simulation/remoteaircraftprovider.h index 93e9b721c..b6088d420 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.h +++ b/src/blackmisc/simulation/remoteaircraftprovider.h @@ -48,7 +48,7 @@ namespace BlackMisc { public: static constexpr int MaxSituationsPerCallsign = 6; //!< How many situations per callsign - static constexpr int MaxPartsPerCallsign = 3; //!< How many parts per callsign + static constexpr int PartsPerCallsignMaxAgeInSeconds = 20; //!< How many seconds to keep parts for //! Situations per callsign using CSituationsPerCallsign = QHash;