Correction du bug où l'URL de la cover générée par pmoqobuz était relative au lieu d'être absolue, comme pour le flux audio. Ajout de la conversion de l'URL de la cover en URL absolue dans la fonction adapt_playlist_items_to_qobuz. Version mise à jour de 0.3.5 à 0.3.6.
2.0 KiB
Bug URL relative de la cover - TERMINÉ
Description du bug
Le document DIDL généré par les PMO playlists possédait une URL absolue pour le flux audio, mais une URL relative pour la cover. Les deux entités (flux audio et cover) sont stockées dans des caches pmoaudiocache et pmocovers respectivement.
Crates concernées
- pmoqobuz (crate corrigée)
- pmoplaylist, pmocache, pmoaudiocache, pmocovers, pmodidl (explorées pour l'analyse)
Analyse
Architecture des URLs dans PMOMusic
-
pmocache::FileCache::route_forretourne une route relative (ex:/audio/flac/abc123,/covers/images/def456) -
Les sources (
pmoqobuz,pmoparadise) reçoivent unbase_urlà leur création et sont responsables de convertir les URLs relatives en absolues avant de retourner les résultats de Browse. -
pmoplaylist::ReadHandle::to_itemsgénère des items DIDL avec des URLs relatives pour l'audio ET la cover.
Localisation du bug
Le bug se trouvait dans pmoqobuz/src/source.rs dans la fonction adapt_playlist_items_to_qobuz.
Cette fonction convertissait correctement l'URL audio en URL absolue mais oubliait de faire la même conversion pour item.album_art (la cover).
Comparaison avec pmoparadise
pmoparadise/src/source.rs faisait déjà correctement les deux conversions (audio et cover).
Correction appliquée
Fichier modifié
pmoqobuz/src/source.rs
Modification
Ajout de la conversion de l'URL de la cover dans adapt_playlist_items_to_qobuz :
// Convertir l'URL de la cover en URL absolue si elle est relative
if let Some(art) = item.album_art.as_mut() {
if art.starts_with('/') {
*art = format!("{}{}", self.inner.base_url, art);
}
}
Pattern architectural
Chaque source qui utilise pmoplaylist::to_items() doit post-traiter les items pour convertir les URLs relatives (/audio/..., /covers/...) en URLs absolues en utilisant son base_url.
Statut
TERMINÉ - La compilation réussit après la correction.