From 744775d3a18ee6d2429ff1a57d1a409b879548f1 Mon Sep 17 00:00:00 2001 From: Psychotoxical Date: Sun, 15 Mar 2026 12:06:03 +0100 Subject: [PATCH] feat: Rust audio engine, genre mix, queue shuffle, and UX improvements (v1.2.0) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Audio Engine - Replace Howler.js with native Rust/rodio backend (src-tauri/src/audio.rs) - audio_play/pause/resume/stop/seek/set_volume Tauri commands - Generation counter cancels stale in-flight downloads on skip - Wall-clock position tracking; audio:ended after 2 ticks near end ### Playback Persistence - Persist currentTrack, queue, queueIndex, currentTime to localStorage - Cold-start resume: play + seek to saved position on app restart - Position priority: server queue > localStorage ### Random Mix - Genre blacklist: excludeAudiobooks toggle + custom chip-based blacklist - Clickable genre chips in tracklist to blacklist on the fly - Super Genre Mix: 9 genres, progressive rendering, Load 10 more - Promise.allSettled + 45s timeout for large Metal/Rock libraries - Two-column filter panel at top of page ### Queue & UI - Shuffle button in queue header (Fisher-Yates, keeps current track at 0) - LiveSearch arrow key / Enter / Escape keyboard navigation - Multi-line tooltip support (data-tooltip-wrap attribute) - Update link uses Tauri shell open() to launch system browser - Sidebar min-width 180px → 200px (fixes Psysonic title clipping) - Tooltip z-index fix: main-content z-index:1 over queue panel Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 55 +++ package-lock.json | 19 +- package.json | 4 +- src-tauri/Cargo.lock | 862 +++++++++++++++++++++++++++++++++- src-tauri/Cargo.toml | 5 +- src-tauri/src/audio.rs | 322 +++++++++++++ src-tauri/src/lib.rs | 16 +- src-tauri/tauri.conf.json | 2 +- src/App.tsx | 8 +- src/api/subsonic.ts | 8 +- src/components/LiveSearch.tsx | 178 ++++--- src/components/QueuePanel.tsx | 6 +- src/components/Sidebar.tsx | 9 +- src/i18n.ts | 50 +- src/pages/RandomMix.tsx | 357 +++++++++++++- src/pages/Settings.tsx | 93 +++- src/store/authStore.ts | 8 + src/store/playerStore.ts | 337 ++++++------- src/styles/components.css | 9 +- src/styles/layout.css | 1 + 20 files changed, 2037 insertions(+), 312 deletions(-) create mode 100644 src-tauri/src/audio.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 95c4cace..e4373d81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,61 @@ 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.2.0] - 2026-03-15 + +### Added + +#### Rust Audio Engine (replaces Howler.js) +- **New native audio backend** built in Rust using [rodio](https://github.com/RustAudio/rodio). Audio is now decoded and played entirely in the Tauri backend — no more reliance on the WebView's `