diff options
-rw-r--r-- | mpris2/playerinterfacetest.cpp | 17 | ||||
-rw-r--r-- | mpris2/playerinterfacetest.h | 12 |
2 files changed, 20 insertions, 9 deletions
diff --git a/mpris2/playerinterfacetest.cpp b/mpris2/playerinterfacetest.cpp index b7d44d2..5ee5497 100644 --- a/mpris2/playerinterfacetest.cpp +++ b/mpris2/playerinterfacetest.cpp @@ -76,7 +76,7 @@ void PlayerInterfaceTest::checkUpdatedProperty(const QString& propName) } else if (propName == "Rate") { checkPropValid("Rate", QVariant::Double); } else if (propName == "Metadata") { - checkMetadata(); + checkMetadata(true); } } @@ -116,7 +116,7 @@ void PlayerInterfaceTest::checkProps(const QVariantMap& oldProps) checkMinimumRate(oldProps); checkMaximumRate(oldProps); checkPropValid("Rate", QVariant::Double, oldProps); - checkMetadata(oldProps); + checkMetadata(false, oldProps); checkConsistency(oldProps); } @@ -238,7 +238,7 @@ static bool compare(const QVariantMap& one, const QVariantMap& other) return true; } -void PlayerInterfaceTest::checkMetadata(const QVariantMap& oldProps) +void PlayerInterfaceTest::checkMetadata(bool updatePosition, const QVariantMap& oldProps) { if (!props.contains("Metadata")) { emit interfaceError(Property, "Metadata", "Property Metadata is missing"); @@ -277,6 +277,17 @@ void PlayerInterfaceTest::checkMetadata(const QVariantMap& oldProps) return; } } + + if (updatePosition) { + QDBusObjectPath oldTrackId = m_currentTrack; + m_currentTrack = metadata.value("mpris:trackid").value<QDBusObjectPath>(); + if (oldTrackId != m_currentTrack) { + emit interfaceInfo(Property, "Metadata", "Track changed (assuming Position is now 0)"); + m_pos = 0; + m_posLastCalculated = QTime::currentTime(); + } + } + if (metadata.isEmpty()) { return; } diff --git a/mpris2/playerinterfacetest.h b/mpris2/playerinterfacetest.h index 727b5e6..715f571 100644 --- a/mpris2/playerinterfacetest.h +++ b/mpris2/playerinterfacetest.h @@ -20,10 +20,9 @@ #define MPRIS2_PLAYERINTERFACETEST_H #include "interfacetest.h" +#include <QDBusObjectPath> #include <QTime> -class QDBusObjectPath; - namespace Mpris2 { class PlayerInterfaceTest : public InterfaceTest { @@ -71,15 +70,16 @@ namespace Mpris2 { void checkMaximumRate(const QVariantMap& oldProps = QVariantMap()); void checkRate(const QVariantMap& oldProps = QVariantMap()); void checkPosition(const QVariantMap& oldProps = QVariantMap()); - void checkMetadata(const QVariantMap& oldProps = QVariantMap()); + void checkMetadata(bool updatePosition, const QVariantMap& oldProps = QVariantMap()); void checkRateConsistency(const QVariantMap& oldProps = QVariantMap()); void checkPositionConsistency(const QVariantMap& oldProps = QVariantMap()); void checkPredictedPosition(); void updateCurrentRate(); - qint64 m_pos; - qreal m_effectiveRate; // 0.0 if not playing, Rate otherwise - QTime m_posLastCalculated; + qint64 m_pos; + qreal m_effectiveRate; // 0.0 if not playing, Rate otherwise + QTime m_posLastCalculated; + QDBusObjectPath m_currentTrack; }; } |