11 KiB
11 KiB
QBZ 1.1.19 Full Changelog
Codename: Limpiando la casa Commits: ~200 since v1.1.18
Audio Engine
rodio 0.22 migration
- Removed vendored rodio/cpal fork entirely; now uses upstream rodio 0.22
- All decoder, stream, and buffer management updated to new API
- Explicit 100ms buffer size replaces vendored cpal tuning
- PipeWire clock.force-quantum disabled for rodio 0.22 compatibility
ALSA improvements
- Sample rate fallback when DAC doesn't support the requested rate
- PipeWire sink suspended before ALSA Direct exclusive access to prevent DeviceBusy errors
- ALSA Direct gapless playback enabled and defaulted to ON
- Gapless restrictions removed for DAC Passthrough and ALSA Direct modes
- Pre-check hardware rates via /proc/asound before attempting ALSA Direct
Smart quality downgrade
- When hardware can't handle a sample rate, QBZ selects the best compatible quality automatically
- Quality badge tooltip shows "Hardware compatibility" explanation
- Cached audio also verified against hardware rates before playback
Other audio fixes
- Hot-reload gapless and normalization settings to active player
- Stop updating live gain during EBU R128 refinement passes
- Audio settings sync on startup for OAuth login path
- Output device name polling during playback
- Configured device name shown when player has no active stream
- Deprecated CPAL
name()replaced withdescription()
Booklet Viewer
- Albums with digital booklets show a booklet button in the album header
- Full in-app PDF viewer with page navigation
- MuPDF native backend replaces pdfjs-dist for crisp rendering and smaller bundle
- Download button to save booklet PDF locally
- Auto-fit page width on load
- V2 backend command fetches PDF through Tauri to bypass CORS
- Goody/booklet model added to qbz-models crate
- i18n keys added to all 4 locales
Neon Visualizers
Three new Canvas 2D visualizers under Immersive > Neon:
Laser (NeonFlowPanel)
- Neon laser beams that pulse, bend, and shift with bass/mid/high energy
- Dual rendering layers for glow effect
Tunnel (TunnelFlowPanel)
- Depth-tunnel with warped elliptical rings
- Curved wisps flow outward from center
- Watercolor cloud layer for atmosphere
Comet (CometFlowPanel)
- Watercolor nebula with curved wisps, tunnel rings, and central abyss
- Album art color extraction — samples artwork, derives 4 dominant hues + darkest color
- Palette lerps smoothly on track change
- Time-based hue mutation for continuous color evolution
- Fades to near-black during silence; wisps, rings, and clouds scale with total energy
- Corner vignettes using darkest album art color with bass-driven drift
- Beat detection spawns wisps on bass transients
Shared
- All panels have per-panel FPS configuration
- Dedicated submenu with fixed positioning and hover bridge
Immersive Mode
- 3-mode background — Full (GPU shader), Lite (CSS blur), Off; configurable in settings
- Auto-degrade — sustained low FPS triggers automatic downgrade with dismissible modal notification
- Per-panel FPS — each visualizer has independent FPS settings; default 15 FPS
- Configurable ambient FPS — separate from panel FPS
- Ambient background fixes — 8x8 downscale replaces CSS blur; dark artwork mood preserved; MIRRORED_REPEAT for texture edges
- Composition profiles — GSK renderer selection and blur toggle per profile
- GPU detection — AMD and Intel identification for profile recommendations
- GSK renderer control — Cairo, GL, NGL, or Vulkan backend selection
- Immersive settings moved to end of Appearance section with standard collapsible pattern
Artist Discovery
MusicBrainz tag-based recommendations
- "You May Also Like" uses MusicBrainz genre tags instead of typical similar-artist APIs
- Deterministic shuffle for varied results across visits
- Shows 6 artists with 2 reserves for instant thumbs-down replacement
- Similarity percentage displayed per recommended artist
Tag-scoped dismissals
- Thumbs down dismisses an artist from a specific tag/genre context only
- Same artist can still appear in different genre contexts
- SQLite table with composite key (tag + normalized artist name)
- Instant removal from list with reserve pull-in
Artist Network sidebar
- Opens by default; preference persisted in localStorage
- State restoration after Queue/Lyrics close
- Clean transitions when navigating between artists (state reset on artist change)
- Simplified header: "Artist Network" title, PanelRightClose icon
- Empty relationship sections hidden automatically
Label Releases View
- Completely redesigned with label logo header
- Sorting: date, title, popularity
- Filters: album, EP, single, live
- Search bar with animated expand
- Group-by-artist toggle with collapsible sections
- Performance improvements for large label catalogs
- Consistent back button and navigation height
Security
- Removed hardcoded key material from credential encryption
- Cryptographically secure session ID generation (replaces deterministic)
- DOM-based HTML sanitization replacing regex-based sanitizer
- Sensitive identifiers and secrets redacted from backend logs
- Removed unused user_id accessors from Qobuz and Tauri API modules
- Hardened release-aur CI workflow permissions and input validation
Spotify Import
- Removed Spotify API dependency entirely
- Uses embed page scraping for playlist import — no credentials needed
- Link resolver updated for new scraping approach
New Features
- Explicit content badges across the entire app
- Search track context menu — right-click works on search result tracks
- Track/disc number extraction from file tags during local library import
- Window size validation prevents GDK crash from corrupt DB values (by @arminfelder, PR #136)
- Cancel download for purchase album downloads
- Miniplayer keyboard shortcuts
- Autoconfig-graphics CLI tool (
qbz --autoconfig-graphics) - Custom artwork for playlists and folder sidebar visibility controls
- Image cache — frontend image cache with size-aware loading, LRU eviction, and settings UI
- Granular navigation history with per-item scroll position
Stability
- Graceful shutdown on RunEvent::Exit to prevent heap corruption
- WebKit double-destroy prevention — secondary windows close before main window
- Window size clamping to screen resolution; physical/logical pixel mismatch fixed
- Flatpak tray icon path corrected for sandbox environment
- Snap MPRIS declared as slot instead of plug
- Titlebar double-click maximize fixed
- Opaque main window default for shutdown stability on Linux
- WebKit EGL shutdown workarounds applied defensively
Bug Fixes
- Equalizer animation no longer appears active when player is paused
- Home settings changes apply immediately without page reload
- Navigation scroll position scoped per item with 1-hour TTL
- Session restore no longer recalls stale scroll positions
- Download paths restructured to Artist/Album [FORMAT][Quality]/track
- EPs and singles backfilled when artist page omits them
- Search grid no longer collapses to single column on keystroke
- Escape on empty search input blurs focus instead of navigating
- Multi-select add-to-playlist sends all tracks in one call
- Deduplicate albums with quality subfolders in local library
- Reco meta caches cleared when image cache is cleared
- ML/reco module optimized for home view loading
- Artist resolution parallelized for card rendering
- Force dmabuf respected as full GPU opt-in for compositing
- FavQ and TopQ context types added to playback context
- Last.fm uses user-scoped storage for session restore
- Qobuz purchase source detection on library scan
- Svelte a11y and component warnings resolved across 26+ components
- ADR-001 compliance maintained across all new components
Scene Discovery
- Explore by location — discover artists from the same city, country, or musical scene as any artist
- MusicBrainz-powered location and genre affinity matching with Qobuz catalog validation
- Progress tracking with animated loading phases (searching → validating → done)
- Two view modes: responsive grid and sidepanel with artist discography
- Alphabetical A-Z grouping with jump navigation index
- Genre multi-select filter with searchable popup (when >9 genres)
- Text search across discovered artists
- Sticky compact header on scroll with scene label, country flag, and genre summary
- Paginated "Load More" for large scenes
- Filtered count display (e.g., "42 / 100 artists")
Discovery Tabs (Redesigned Home)
3-tab home layout
- Home — customizable feed with drag-to-reorder sections and per-section visibility toggles
- Editor's Picks — fixed Qobuz editorial curation (New Releases, Editor's Picks, Qobuzissimes, Press Awards, Popular Albums)
- For You — personalized recommendations built from listening history
Home tab customization
- Sections include: New Releases, Press Awards, Popular Albums, Qobuzissimes, Editor's Picks, Qobuz Playlists, Your Mixes, Essential Discography, Recently Played, Continue Listening, Your Top Artists, More From Favorites
- Settings modal (gear icon) to toggle visibility and reorder sections
- Genre filter available on Home and Editor's Picks tabs
For You tab
- Progressive loading with skeleton placeholders per section
- Radio Stations — 9 album-based radios (3 recent + 3 favorites + 3 top artists); dominant color extraction per card
- Artists to Follow — 10 suggested artists from similar-to-your-top-3 with styled 210px cards
- Spotlight — featured artist card with top tracks, playlists, "Create Radio" button, and "Qobuz Radio Station" subtitle; dominant color from artist image
- Similar to [Album] — albums related to a featured album
- Rediscover Your Library — neglected/forgotten albums from your collection
- Essentials [Genre] — essential albums from one of your top genres
Sticky compact header
- Appears after 60px scroll; hides greeting and shows compact tab navigation with genre filter
- Edge-to-edge positioning with negative margin pattern (matching ArtistDetailView jump-nav)
- Time-based greeting (Morning/Afternoon/Evening) with i18n and username interpolation
Session cache
- Album, artist, and track data cached to avoid redundant API calls on navigation
- Scroll position preserved per tab
Packaging
- Cargo.lock tracked in git — enables deterministic builds for distro packagers (NixOS, etc.)
- Tauri version sync — @tauri-apps/api updated to 2.10.1 matching Rust crate 2.10.x
- AUR cleanup — removed non-functional aur-source and aur-git packages; only qbz-bin maintained
- AUR maintainer email updated
- APT repository — CI triggers APT repo update on release publish
- Flatpak — PipeWire stream matching restored; quality guidelines applied
Contributors
- @arminfelder — Window size validation (PR #136)