diff --git a/src/blackmisc/simulation/interpolationlogger.cpp b/src/blackmisc/simulation/interpolationlogger.cpp
index 97cefc619..ff72b1745 100644
--- a/src/blackmisc/simulation/interpolationlogger.cpp
+++ b/src/blackmisc/simulation/interpolationlogger.cpp
@@ -228,7 +228,7 @@ namespace BlackMisc
QLatin1String("
") % log.callsign.asString() % QLatin1String(" | ") %
QLatin1String("") % msSinceEpochToTime(log.timestamp) % QLatin1String(" | ") %
(changedParts ? QLatin1String("* | ") : QLatin1String(" | ")) %
- QLatin1String("") % log.parts.toQString() % QLatin1String(" | ");
+ QLatin1String("") % (log.empty ? QLatin1String("empty") : log.parts.toQString()) % QLatin1String(" | ");
}
tableRows += QLatin1String("\n");
return QLatin1String("\n") % tableHeader % tableRows % QLatin1String("
\n");
diff --git a/src/blackmisc/simulation/interpolationlogger.h b/src/blackmisc/simulation/interpolationlogger.h
index 9f1094f8d..6d4c02491 100644
--- a/src/blackmisc/simulation/interpolationlogger.h
+++ b/src/blackmisc/simulation/interpolationlogger.h
@@ -78,6 +78,7 @@ namespace BlackMisc
qint64 timestamp = -1; //!< current timestamp
BlackMisc::Aviation::CCallsign callsign; //!< current callsign
BlackMisc::Aviation::CAircraftParts parts; //!< parts to be logged
+ bool empty = false;
};
//! Log current interpolation cycle, only stores in memory, for performance reasons
diff --git a/src/blackmisc/simulation/interpolator.cpp b/src/blackmisc/simulation/interpolator.cpp
index af9fca36e..9f57709ec 100644
--- a/src/blackmisc/simulation/interpolator.cpp
+++ b/src/blackmisc/simulation/interpolator.cpp
@@ -182,6 +182,14 @@ namespace BlackMisc
partsStatus.reset();
if (currentTimeMsSinceEpoch < 0) { currentTimeMsSinceEpoch = QDateTime::currentMSecsSinceEpoch(); }
+ // log for empty parts aircraft parts
+ if (m_aircraftParts.isEmpty())
+ {
+ static const CAircraftParts emptyParts;
+ this->logParts(currentTimeMsSinceEpoch, emptyParts, true, log);
+ emptyParts;
+ }
+
// find the first parts not in the correct order, keep only the parts before that one
const auto end = std::is_sorted_until(m_aircraftParts.begin(), m_aircraftParts.end(), [](auto && a, auto && b) { return b.getAdjustedMSecsSinceEpoch() < a.getAdjustedMSecsSinceEpoch(); });
const auto validParts = makeRange(m_aircraftParts.begin(), end);
@@ -226,18 +234,22 @@ namespace BlackMisc
}
while (false);
- if (m_logger && log)
- {
- CInterpolationLogger::PartsLog log;
- log.callsign = m_callsign;
- log.timestamp = currentTimeMsSinceEpoch;
- log.parts = currentParts;
- m_logger->logParts(log);
- }
-
+ this->logParts(currentTimeMsSinceEpoch, currentParts, false, log);
return currentParts;
}
+ template
+ void CInterpolator::logParts(qint64 timestamp, const CAircraftParts &parts, bool empty, bool log)
+ {
+ if (!log || !m_logger) { return; }
+ CInterpolationLogger::PartsLog logInfo;
+ logInfo.callsign = m_callsign;
+ logInfo.timestamp = timestamp;
+ logInfo.parts = parts;
+ logInfo.empty = empty;
+ m_logger->logParts(logInfo);
+ }
+
template
void CInterpolator::addAircraftSituation(const CAircraftSituation &situation)
{
diff --git a/src/blackmisc/simulation/interpolator.h b/src/blackmisc/simulation/interpolator.h
index acdf18fbd..c57723cf9 100644
--- a/src/blackmisc/simulation/interpolator.h
+++ b/src/blackmisc/simulation/interpolator.h
@@ -88,6 +88,9 @@ namespace BlackMisc
private:
CInterpolationLogger *m_logger = nullptr;
+ //! Log parts
+ void logParts(qint64 timestamp, const Aviation::CAircraftParts &parts, bool empty, bool log);
+
Derived *derived() { return static_cast(this); }
const Derived *derived() const { return static_cast(this); }
};