summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mpris2/playerinterfacetest.cpp17
-rw-r--r--mpris2/playerinterfacetest.h12
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;
};
}