Optimize album art URL handling and simplify image display logic

This commit refactors the album art URL normalization logic in Rust to use match expressions for cleaner and more concise code. It also simplifies the image display logic in Vue by removing the redundant cacheBustedUrl check, ensuring the image is displayed based solely on load and error states.
This commit is contained in:
2026-02-21 15:48:05 +01:00
parent 86df772354
commit b3f1917441
2 changed files with 28 additions and 31 deletions

View File

@@ -350,20 +350,14 @@ const swipeOpacity = computed(() => {
@click="openCoverOverlay"
>
<img
v-if="cacheBustedUrl"
ref="coverImageRef"
:style="{
opacity:
cacheBustedUrl && imageLoaded && !imageError ? 1 : 0,
visibility:
cacheBustedUrl && imageLoaded && !imageError
? 'visible'
: 'hidden',
position:
cacheBustedUrl && imageLoaded && !imageError
? 'relative'
: 'absolute',
opacity: imageLoaded && !imageError ? 1 : 0,
visibility: imageLoaded && !imageError ? 'visible' : 'hidden',
position: imageLoaded && !imageError ? 'relative' : 'absolute',
}"
:src="cacheBustedUrl || ''"
:src="cacheBustedUrl"
:alt="metadata?.album || 'Album cover'"
class="cover-image"
@load="handleImageLoad"

View File

@@ -517,13 +517,11 @@ impl RadioParadiseSource {
}
// Normaliser l'albumArtURI : rendre absolu si chemin relatif, sinon fallback par défaut
if let Some(art) = item.album_art.as_mut() {
if art.starts_with('/') {
*art = format!("{}{}", self.base_url, art);
}
} else {
item.album_art = Some(self.default_cover_url());
}
item.album_art = match item.album_art.take() {
Some(art) if art.starts_with('/') => Some(format!("{}{}", self.base_url, art)),
Some(_) => Some(self.default_cover_url()), // URL externe brute → fallback local
None => Some(self.default_cover_url()),
};
}
Ok(items)
@@ -590,13 +588,11 @@ impl RadioParadiseSource {
item.genre = Some("Radio Paradise".to_string());
}
if let Some(art) = item.album_art.as_mut() {
if art.starts_with('/') {
*art = format!("{}{}", self.base_url, art);
}
} else {
item.album_art = Some(self.default_cover_url());
}
item.album_art = match item.album_art.take() {
Some(art) if art.starts_with('/') => Some(format!("{}{}", self.base_url, art)),
Some(_) => Some(self.default_cover_url()),
None => Some(self.default_cover_url()),
};
}
Ok(items)
@@ -921,6 +917,13 @@ impl MusicSource for RadioParadiseSource {
if item.genre.is_none() {
item.genre = Some("Radio Paradise".to_string());
}
item.album_art = match item.album_art.take() {
Some(art) if art.starts_with('/') => {
Some(format!("{}{}", self.base_url, art))
}
Some(_) => Some(self.default_cover_url()),
None => Some(self.default_cover_url()),
};
adjusted.push(item);
}
@@ -987,13 +990,13 @@ impl MusicSource for RadioParadiseSource {
item.genre = Some("Radio Paradise".to_string());
}
if let Some(art) = item.album_art.as_mut() {
if art.starts_with('/') {
*art = format!("{}{}", self.base_url, art);
item.album_art = match item.album_art.take() {
Some(art) if art.starts_with('/') => {
Some(format!("{}{}", self.base_url, art))
}
} else {
item.album_art = Some(self.default_cover_url());
}
Some(_) => Some(self.default_cover_url()),
None => Some(self.default_cover_url()),
};
let expected_id =
format!("radio-paradise:channel:{}:liveplaylist:track:{}", slug, pk);