mpris: preload album art at root level, cache survives panel hidden

This commit is contained in:
Damocles 2026-04-12 18:42:06 +02:00
parent 5d483e6284
commit 7e359fb730

View file

@ -13,6 +13,21 @@ M.BarSection {
readonly property MprisPlayer player: Mpris.players.values[0] ?? null
readonly property bool playing: player?.playbackState === MprisPlaybackState.Playing
property string _cachedArt: ""
property string _artTrack: ""
// Cache art URL at root level so it's captured even when panel is hidden
readonly property string _artUrl: player?.trackArtUrl ?? ""
readonly property string _currentTrack: player?.trackTitle ?? ""
on_ArtUrlChanged: if (_artUrl) _cachedArt = _artUrl
on_CurrentTrackChanged: if (_currentTrack !== _artTrack) { _artTrack = _currentTrack; _cachedArt = _artUrl || "" }
// Preload art while panel is hidden ensures QML image cache has the pixels
Image {
visible: false
source: root._cachedArt
asynchronous: true
}
required property var bar
@ -154,16 +169,14 @@ M.BarSection {
fillMode: Image.PreserveAspectCrop
visible: _hasArt
asynchronous: true
source: root._cachedArt
property bool _hasArt: false
property string _lastGoodSource: ""
property string _lastTrack: ""
readonly property string _artUrl: root.player?.trackArtUrl ?? ""
readonly property string _track: root.player?.trackTitle ?? ""
on_ArtUrlChanged: if (_artUrl) _lastGoodSource = _artUrl
on_TrackChanged: if (_track !== _lastTrack) { _lastTrack = _track; _lastGoodSource = _artUrl || ""; _hasArt = false }
onStatusChanged: if (status === Image.Ready) _hasArt = true
source: _lastGoodSource
Connections {
target: root
function on_CachedArtChanged() { if (!root._cachedArt) _artImg._hasArt = false }
}
}
Rectangle {