From 49baa7915bab9b286a6123da45b0404157de5fcd Mon Sep 17 00:00:00 2001 From: Bart De Vries Date: Wed, 14 Apr 2021 20:23:48 +0200 Subject: [PATCH] More elegant solution for setting MPRIS2 audio duration when changing tracks --- src/audiomanager.cpp | 1 - src/mpris2/mediaplayer2player.cpp | 12 ++++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/audiomanager.cpp b/src/audiomanager.cpp index 102fe071..f8d2aee2 100644 --- a/src/audiomanager.cpp +++ b/src/audiomanager.cpp @@ -219,7 +219,6 @@ void AudioManager::setEntry(Entry* entry) if (startingPosition > 1000) d->m_player.setPosition(startingPosition); d->m_player.pause(); d->m_readyToPlay = true; - Q_EMIT entryChanged(d->m_entry); // TODO: this is a hack to get MPRIS to show correct duration; should be split off into a separate signal Q_EMIT canPlayChanged(); Q_EMIT canPauseChanged(); Q_EMIT canSkipForwardChanged(); diff --git a/src/mpris2/mediaplayer2player.cpp b/src/mpris2/mediaplayer2player.cpp index 52a6bce0..fce8467b 100644 --- a/src/mpris2/mediaplayer2player.cpp +++ b/src/mpris2/mediaplayer2player.cpp @@ -280,6 +280,18 @@ void MediaPlayer2Player::audioPositionChanged() void MediaPlayer2Player::audioDurationChanged() { + qDebug() << "Signal change of audio duration through MPRIS2"; + // We reset all metadata in case the audioDuration changed + // This is done because duration is not yet available when setEntry is + // called (this is before the QMediaPlayer has read the new track + if (m_audioPlayer) { + if (m_audioPlayer->entry()) { + m_metadata = getMetadataOfCurrentTrack(); + signalPropertiesChange(QStringLiteral("Metadata"), Metadata()); + } + } + + // for progress indicator on taskbar if (m_audioPlayer) { setPropertyPosition(static_cast(m_audioPlayer->position())); }