From 18f835d7e5aed14dd830ab00715a9d8edda90430 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 7 Dec 2024 14:36:44 +0100 Subject: [PATCH] Mpris2: Check for valid current row --- src/mpris2/mpris2.cpp | 19 +++++++++++++++---- src/mpris2/mpris2.h | 3 ++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/mpris2/mpris2.cpp b/src/mpris2/mpris2.cpp index 94ae894bb..dfbb0aa72 100644 --- a/src/mpris2/mpris2.cpp +++ b/src/mpris2/mpris2.cpp @@ -386,8 +386,12 @@ void Mpris2::SetRating(double rating) { } -QDBusObjectPath Mpris2::current_track_id() const { - return QDBusObjectPath(QStringLiteral("/org/strawberrymusicplayer/strawberry/Track/%1").arg(QString::number(playlist_manager_->active()->current_row()))); +int Mpris2::current_playlist_row() const { + return playlist_manager_->active()->current_row(); +} + +QDBusObjectPath Mpris2::current_track_id(const int current_row) const { + return QDBusObjectPath(QStringLiteral("/org/strawberrymusicplayer/strawberry/Track/%1").arg(current_row)); } // We send Metadata change notification as soon as the process of changing song starts... @@ -405,11 +409,14 @@ void Mpris2::CurrentSongChanged(const Song &song) { // ... and we add the cover information later, when it's available. void Mpris2::AlbumCoverLoaded(const Song &song, const AlbumCoverLoaderResult &result) { + const int current_row = current_playlist_row(); + if (current_row == -1) return; + last_metadata_ = QVariantMap(); song.ToXesam(&last_metadata_); using mpris::AddMetadata; - AddMetadata(u"mpris:trackid"_s, current_track_id(), &last_metadata_); + AddMetadata(u"mpris:trackid"_s, current_track_id(current_row), &last_metadata_); QUrl cover_url; if (result.album_cover.cover_url.isValid() && result.album_cover.cover_url.isLocalFile() && QFile(result.album_cover.cover_url.toLocalFile()).exists()) { @@ -519,7 +526,11 @@ void Mpris2::Seek(qint64 offset) { void Mpris2::SetPosition(const QDBusObjectPath &trackId, qint64 offset) { - if (CanSeek() && trackId == current_track_id() && offset >= 0) { + const int current_row = current_playlist_row(); + + if (current_row == -1) return; + + if (CanSeek() && trackId == current_track_id(current_row) && offset >= 0) { offset *= kNsecPerUsec; if (offset < player_->GetCurrentItem()->Metadata().length_nanosec()) { diff --git a/src/mpris2/mpris2.h b/src/mpris2/mpris2.h index a70a53c5c..cfc1071b3 100644 --- a/src/mpris2/mpris2.h +++ b/src/mpris2/mpris2.h @@ -230,7 +230,8 @@ class Mpris2 : public QObject { QString PlaybackStatus(EngineBase::State state) const; - QDBusObjectPath current_track_id() const; + int current_playlist_row() const; + QDBusObjectPath current_track_id(const int current_row) const; bool CanSeek(EngineBase::State state) const;