feat(qt): For You gains Qobuz Mixes pages, Artist Spotlight and Radios
Ports the three sections the tab was missing, against the Slint implementation rather than invented: the section rails, the cards, and the mix landing page with its navigation seam so back/forward behave. The mixes reuse the shared crates for their requests -- the Slint app already makes them, so nothing new talks to Qobuz here. Also carries the qt-run.sh portability work needed for the Mac mini: `free`, `nproc`, `pgrep` and `timeout` all differ or are simply absent on BSD/macOS. Two of those bit during the first Mac build. `pgrep` exits 1 when it matches nothing -- the normal case -- and under `pipefail` that killed the script before a single line of output, which reads exactly like a build that did nothing. And `timeout` does not exist on macOS at all, so the smoke produced a one-line log over which the grep cheerfully reported "0 QML complaints": a test that never ran, rendering as a pass. The smoke now fails outright on a log that short. cc
This commit is contained in:
24 files changed
+2659
-205
No files matched your search
@@ -102,7 +102,19 @@ Rectangle {
|
||||
// Favorite state of the now-playing track (Slint:
|
||||
// QueueState.now-playing-favorite). The queue document carries it on its
|
||||
// `current` row; this re-parses ONLY when that document changes.
|
||||
//
|
||||
// The bar's OWN heart settles fine on its own — `queue_qt::toggle_favorite`
|
||||
// republishes the queue document straight after the write. What it could
|
||||
// not see was a heart flipped ANYWHERE ELSE for the same track (the album
|
||||
// page's row, a search result, a card): nothing republishes the queue for
|
||||
// those, so the bar sat on a stale glyph for the rest of the track. The
|
||||
// one-slot override below closes it, keyed on the track id so it expires
|
||||
// by itself the moment playback moves on — no map to keep clean.
|
||||
property string favOverrideId: ""
|
||||
property bool favOverrideValue: false
|
||||
readonly property bool npFavorite: {
|
||||
if (root.favOverrideId !== "" && root.favOverrideId === QbzPlayer.npTrackId)
|
||||
return root.favOverrideValue
|
||||
try {
|
||||
var d = JSON.parse(QbzQueue.queueJson)
|
||||
return !!(d && d.current && d.current.isFavorite)
|
||||
@@ -110,6 +122,16 @@ Rectangle {
|
||||
return false
|
||||
}
|
||||
}
|
||||
Connections {
|
||||
target: QbzLibrary
|
||||
function onLibraryFavoriteChanged(key, value) {
|
||||
var id = QbzPlayer.npTrackId
|
||||
if (id !== "" && key === "track:" + id) {
|
||||
root.favOverrideId = id
|
||||
root.favOverrideValue = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Audio settings / normalization (Tauri's normalization button; Slint's
|
||||
// "Audio settings" flyout). `normalization` IS settable through
|
||||
|
||||
Reference in new issue
Block a user