diff --git a/CHANGELOG.md b/CHANGELOG.md index a01d333d..16aa9c51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.26.1] - 2026-04-01 + +### Fixed + +- **Background flickering in Hero, Album Detail and Playlist Detail**: Blurred hero backgrounds were flickering for up to 20 seconds on first visit. Root cause: `useCachedUrl` with the default `fallbackToFetch = true` immediately returned the raw server URL, causing the background to render twice — once with the HTTP URL (triggering a server fetch) and again when the IndexedDB blob was ready. Fixed by passing `fallbackToFetch = false` in all three locations so the background only renders once the blob is cached. + +--- + ## [1.26.0] - 2026-04-01 ### Added diff --git a/package.json b/package.json index 08960c38..59eb335b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "psysonic", - "version": "1.26.0", + "version": "1.26.1", "private": true, "scripts": { "dev": "vite", diff --git a/packages/aur/PKGBUILD b/packages/aur/PKGBUILD index 2bc3e62d..91849db1 100644 --- a/packages/aur/PKGBUILD +++ b/packages/aur/PKGBUILD @@ -1,6 +1,6 @@ # Maintainer: Psychotoxic pkgname=psysonic -pkgver=1.26.0 +pkgver=1.26.1 pkgrel=1 pkgdesc="Desktop music player for Subsonic API-compatible servers (Navidrome, Gonic, etc.)" arch=('x86_64') diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 801eaa49..a3d76507 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -3397,7 +3397,7 @@ dependencies = [ [[package]] name = "psysonic" -version = "1.25.1" +version = "1.26.1" dependencies = [ "biquad", "md5", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 6ac333cf..de98e082 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "psysonic" -version = "1.26.0" +version = "1.26.1" description = "Psysonic Desktop Music Player" authors = [] license = "" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 1fd05a1b..04b7ad27 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Psysonic", - "version": "1.26.0", + "version": "1.26.1", "identifier": "dev.psysonic.player", "build": { "beforeDevCommand": "npm run dev", diff --git a/src/components/Hero.tsx b/src/components/Hero.tsx index c8b09b44..e7002158 100644 --- a/src/components/Hero.tsx +++ b/src/components/Hero.tsx @@ -95,7 +95,7 @@ export default function Hero({ albums: albumsProp }: HeroProps = {}) { // buildCoverArtUrl generates a new salt on every call — must be memoized. const bgRawUrl = useMemo(() => album?.coverArt ? buildCoverArtUrl(album.coverArt, 800) : '', [album?.coverArt]); const bgCacheKey = useMemo(() => album?.coverArt ? coverArtCacheKey(album.coverArt, 800) : '', [album?.coverArt]); - const resolvedBgUrl = useCachedUrl(bgRawUrl, bgCacheKey); + const resolvedBgUrl = useCachedUrl(bgRawUrl, bgCacheKey, false); // Keep the last known good URL so HeroBg never receives '' during a cache-miss // transition (which would cause the background to flash empty before fading in). diff --git a/src/pages/AlbumDetail.tsx b/src/pages/AlbumDetail.tsx index 3ce76626..cd45aa5a 100644 --- a/src/pages/AlbumDetail.tsx +++ b/src/pages/AlbumDetail.tsx @@ -234,7 +234,7 @@ const handleEnqueueAll = () => { // Hooks must be called unconditionally — derive from nullable album state const coverUrl = album?.album.coverArt ? buildCoverArtUrl(album.album.coverArt, 400) : ''; const coverKey = album?.album.coverArt ? coverArtCacheKey(album.album.coverArt, 400) : ''; - const resolvedCoverUrl = useCachedUrl(coverUrl, coverKey); + const resolvedCoverUrl = useCachedUrl(coverUrl, coverKey, false); if (loading) return
; if (!album) return
{t('albumDetail.notFound')}
; diff --git a/src/pages/PlaylistDetail.tsx b/src/pages/PlaylistDetail.tsx index a51ae0f0..c0a2c1d5 100644 --- a/src/pages/PlaylistDetail.tsx +++ b/src/pages/PlaylistDetail.tsx @@ -136,7 +136,7 @@ export default function PlaylistDetail() { const bgFetchUrl = useMemo(() => buildCoverArtUrl(coverQuad[0] ?? '', 300), [coverQuad]); const bgCacheKey = useMemo(() => coverArtCacheKey(coverQuad[0] ?? '', 300), [coverQuad]); - const resolvedBgUrl = useCachedUrl(bgFetchUrl, bgCacheKey); + const resolvedBgUrl = useCachedUrl(bgFetchUrl, bgCacheKey, false); // Song search const [searchOpen, setSearchOpen] = useState(false);