feat(cache): fix lazy PK metadata resolution and playlist track ordering
- In `track_metadata.rs`, implement fallback logic for lazy PKs: first try real_pk, then fallback to lazy_pk for metadata keys seeded before download. - In `db.rs`, add debug logging after migration to track remaining metadata under lazy_pk. - In `source.rs` (Qobuz): - Detect and repair playlists with missing cache entries by forcing refresh when `items.len() < total`. - Preserve original track order after parallel processing by attaching and sorting on original index. - Handle missing performer/cover gracefully with warnings and provider fallback. - In `metadata_cache.rs` (Radio France), simplify logging and improve test coverage for expiration logic. - In `cache.rs`, add debug/warning logs when metadata or cover seeding fails during lazy caching.
This commit is contained in:
@@ -328,6 +328,7 @@ impl SourceCacheManager {
|
||||
None
|
||||
};
|
||||
|
||||
let metadata_is_some = metadata.is_some();
|
||||
let mut final_metadata = metadata;
|
||||
if final_metadata.is_none() {
|
||||
if let Some(data) = provider_data.as_ref() {
|
||||
@@ -352,10 +353,25 @@ impl SourceCacheManager {
|
||||
|
||||
if let Some(meta) = final_metadata.as_ref() {
|
||||
self.seed_audio_metadata(lazy_pk, meta);
|
||||
} else {
|
||||
#[cfg(feature = "server")]
|
||||
tracing::warn!(
|
||||
"cache_audio_lazy_with_provider: no metadata to seed for {} \
|
||||
(meta_hint={}, provider_data={})",
|
||||
lazy_pk,
|
||||
metadata_is_some,
|
||||
provider_data.as_ref().map(|d| d.metadata.is_some()).unwrap_or(false)
|
||||
);
|
||||
}
|
||||
|
||||
if let Some(cover_pk) = final_cover_pk {
|
||||
let _ = self.set_audio_metadata(lazy_pk, "cover_pk", json!(cover_pk));
|
||||
} else {
|
||||
#[cfg(feature = "server")]
|
||||
tracing::debug!(
|
||||
"cache_audio_lazy_with_provider: no cover_pk seeded for {}",
|
||||
lazy_pk
|
||||
);
|
||||
}
|
||||
|
||||
Ok(lazy_pk.to_string())
|
||||
|
||||
Reference in New Issue
Block a user