feat(discover): add get_dynamic_suggest_full carrying track_to_analysed

Tauri's DailyQ/WeeklyQ /dynamic/suggest seeds a track_to_analysed payload
(~9 resolved {track_id,artist_id,genre_id,label_id} tuples) for the PRIMARY
mix algorithm; the empty-analysis call is only its fallback. The Slint port
only ever sent the empty-analysis path. Add a TrackToAnalyse model
(qbz-models) and a get_dynamic_suggest_full method on the qobuz client and
qbz-core that carries the payload; the existing get_dynamic_suggest now
delegates with an empty analysis (behaviour unchanged). Plumbing only — the
mix.rs build of the analysis tuples + the two-call fallback lands next (a2).

cc
This commit is contained in:
vicrodh committed 2026-06-15 15:50:41 -06:00
1 parent 76406aa746
commit ee83734fba
4 files changed
+47 -3

No files matched your search

+1
View File
@@ -124,6 +124,7 @@ pub use types::{
StreamUrl,
Track,
TrackFileUrl,
TrackToAnalyse,
TracksContainer,
UserSession,
};
+13
View File
@@ -9,6 +9,19 @@
use serde::{Deserialize, Serialize};
use std::collections::HashSet;
// ============ Dynamic-suggest (DailyQ/WeeklyQ) ============
/// A seed track resolved for the `/dynamic/suggest` `track_to_analysed`
/// payload (DailyQ / WeeklyQ). Field names match the Qobuz wire shape
/// exactly; `0` marks an unknown id (mirrors Tauri's `?? 0`).
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrackToAnalyse {
pub track_id: u64,
pub artist_id: u64,
pub genre_id: u64,
pub label_id: u64,
}
// ============ Quality Types ============
/// Audio quality format IDs (matches Qobuz API format IDs)