QList<QVariantMap> TrackListInterfaceTest::testGetTracksMetadata(const QList<QDBusObjectPath>& trackIds) { QDBusReply<QList<QVariantMap> > reply = iface->call("GetTracksMetadata"); if (!reply.isValid()) { emit interfaceError(Method, "GetTracksMetadata", "Call to GetTracksMetadata failed with error " + reply.error().message()); } else { QList<QVariantMap> metadataList = reply.value(); QMap<QDBusObjectPath,QVariantMap> metadataMap; int i = 0; Q_FOREACH (const QVariantMap& metadata, metadataList) { if (metadata.isEmpty()) { emit interfaceWarning(Method, "GetTracksMetadata", "Got an empty entry at position " + QString::number(i)); } else if (!metadata.contains("mpris:trackid")) { emit interfaceError(Method, "GetTracksMetadata", "No mpris:trackid entry at position " + QString::number(i)); } else if (metadata.value("mpris:trackid").userType() != qMetaTypeId<QDBusObjectPath>()) { emit interfaceError(Method, "GetTracksMetadata", "mpris:trackid entry was not sent as a D-Bus object path (D-Bus type 'o') at position " + QString::number(i)); } else { QDBusObjectPath trackid = metadata.value("mpris:trackid").value<QDBusObjectPath>(); if (trackid.path().isEmpty()) { emit interfaceError(Method, "GetTracksMetadata", "mpris:trackid entry is an empty path at position " + QString::number(i)); } else if (!trackIds.contains(trackid)) { emit interfaceWarning(Method, "GetTracksMetadata", "Entry " + trackid.path() + " was not requested at position " + QString::number(i)); } else { metadataMap.put(trackid, metadata); } } ++i; } } }