From 9be0d8dfa91bc365c1a05e725cdfdc563e916958 Mon Sep 17 00:00:00 2001 From: Psychotoxical Date: Sun, 5 Apr 2026 19:34:26 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20v1.32.0=20=E2=80=94=20The=20Big=20Easte?= =?UTF-8?q?r=20Update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Internet Radio full release (HTML5 engine, card UI, RadioDirectoryModal, cover upload), Backup/Restore, Albums year filter, Statistics Library Insights (playtime/genres/formats), Playlist cover upload, resizable tracklist columns for Playlists & Favorites, crossfade fine control, Settings Storage tab redesign, various fixes and UI polish. Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/release.yml | 3 + CHANGELOG.md | 34 + package.json | 2 +- src-tauri/Cargo.lock | 29 +- src-tauri/Cargo.toml | 5 +- src-tauri/capabilities/default.json | 3 + src-tauri/gen/schemas/capabilities.json | 2 +- src-tauri/src/audio.rs | 820 ++++++++++++------ src-tauri/src/lib.rs | 293 ++++++- src-tauri/tauri.conf.json | 2 +- src/api/subsonic.ts | 112 +++ src/components/AlbumTrackList.tsx | 305 ++----- src/components/AppUpdater.tsx | 13 +- src/components/Equalizer.tsx | 45 +- src/components/PlayerBar.tsx | 7 +- src/components/QueuePanel.tsx | 22 +- src/components/Sidebar.tsx | 2 +- src/i18n.ts | 353 +++++++- src/pages/AdvancedSearch.tsx | 4 +- src/pages/Albums.tsx | 85 +- src/pages/ArtistDetail.tsx | 4 +- src/pages/Artists.tsx | 8 +- src/pages/Favorites.tsx | 319 +++++-- src/pages/InternetRadio.tsx | 1026 ++++++++++++++++++----- src/pages/PlaylistDetail.tsx | 570 ++++++++++--- src/pages/RandomMix.tsx | 8 +- src/pages/SearchResults.tsx | 4 +- src/pages/Settings.tsx | 447 ++++++---- src/pages/Statistics.tsx | 158 +++- src/store/authStore.ts | 4 + src/store/offlineStore.ts | 15 +- src/store/playerStore.ts | 59 +- src/styles/components.css | 295 ++++++- src/styles/layout.css | 9 + src/utils/backup.ts | 73 ++ src/utils/useTracklistColumns.ts | 179 ++++ 36 files changed, 4108 insertions(+), 1211 deletions(-) create mode 100644 src/utils/backup.ts create mode 100644 src/utils/useTracklistColumns.ts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 04354a6e..321df249 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -123,6 +123,9 @@ jobs: VITE_LASTFM_API_SECRET: ${{ secrets.VITE_LASTFM_API_SECRET }} with: releaseId: ${{ needs.create-release.outputs.release_id }} + tagName: app-v${{ needs.create-release.outputs.package_version }} + releaseName: Psysonic v${{ needs.create-release.outputs.package_version }} + releaseDraft: true args: ${{ matrix.settings.args }} - name: sign and upload Windows NSIS updater bundle diff --git a/CHANGELOG.md b/CHANGELOG.md index 56cae316..ea57d08f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,40 @@ 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.32.0] - 2026-04-05 — *The Big Easter Update* 🐣 + +### Added + +- **Internet Radio — full release**: The Radio page is now accessible from the sidebar. Complete UI rewrite to a card-based layout (cover art, name, edit/homepage buttons) consistent with the Playlists look. Covers can be uploaded or removed via a hover menu directly on the card. +- **Internet Radio — Edit Modal**: A dedicated modal lets you change station name, stream URL, and homepage URL, and upload or remove cover art. +- **Internet Radio — Radio Browser directory** *(via [radio-browser.info](https://www.radio-browser.info))*: Discover new stations directly inside Psysonic. Top stations by vote are shown as suggestions; a debounced search finds stations by name. Favicon images can be imported as cover art in one click. +- **Settings — Backup & Restore**: Export all your settings (servers, theme, font, keybindings, EQ preset, sidebar order) to a single JSON file and import them on another machine or after a reinstall. Available in Settings → Storage. +- **Albums — Year Range Filter**: A From/To year input now appears in the Albums toolbar alongside the existing genre filter. Filtering by year and by genre can be combined; clearing both inputs returns to the default view. +- **Statistics — Library Insights** *(requested via [#88](https://github.com/Psychotoxical/psysonic/issues/88))*: + - **Total Playtime** card: computed in the background by paginating your full album list (up to 5 000 albums). Shows `≥ Xh Ym` if the library is larger. + - **Genre Insights**: Top 10 genres ranked by song count with proportional progress bars. + - **Format Distribution**: Codec breakdown from a random 500-track sample — shows format name and percentage. +- **Playlist Detail — Cover Upload**: Change or remove a playlist's cover image via the hover menu that appears on the hero artwork — no external tool needed. +- **Tracklist columns — Playlists & Favorites** *(work in progress)*: PlaylistDetail and Favorites now support the same resizable, configurable column system introduced in v1.31.0 for Album tracklists. Column widths and visibility are persisted independently per page. The feature is still being refined. + +### Changed + +- **Crossfade — fine-grained control**: The crossfade duration slider now ranges from 0.1 s to 10 s in 0.1 s steps (previously 1 s minimum, 0.5 s steps). The current value is shown with one decimal place. +- **Settings — Storage tab redesign**: The "Offline Library" section now has a short description and includes Cache settings. The "Downloads" section is now labelled "ZIP Export & Archiving". Both sections have been visually consolidated. +- **Artists page — Load More button** *(reported via [#90](https://github.com/Psychotoxical/psysonic/issues/90))*: The button is now styled as `btn-primary` with a `ChevronDown` icon and proper spacing. Previously it was an unstyled ghost button with no visual affordance. +- **Tracklist layout consistency**: The Play-button column is now uniformly 60 px and the title column uses `minmax(150px, 1fr)` across all list views — Search Results, Artist Detail, Random Mix, and Advanced Search now match the Album tracklist layout. +- **Internet Radio — HTML5 playback**: Radio now streams via the browser's native `