From 3ee77e3f44554f9c413f68f11317f198883c65e9 Mon Sep 17 00:00:00 2001 From: Broque Thomas <26755000+Nezreka@users.noreply.github.com> Date: Sun, 24 May 2026 01:35:15 -0700 Subject: [PATCH] Release 2.6.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MINOR bump: Qobuz playlist sync is the headline feature (#677), plus the Import album search fallback-source surfacing fix (#681). * web_server.py — _SOULSYNC_BASE_VERSION → 2.6.0 * webui/static/helper.js — split the 2.5.9 'Unreleased — dev cycle' entries into a new 2.6.0 block with a real release-date marker; bumped the _getLatestWhatsNewVersion fallback default; rolled the '2.5.9 Release Stability Pass' modal section down to a generic 'Earlier in v2.5' aggregator now that 2.6.0 is the current release * .github/workflows/docker-publish.yml — bumped manual version_tag default to 2.6.0 so the next workflow_dispatch defaults right --- .github/workflows/docker-publish.yml | 4 ++-- web_server.py | 2 +- webui/static/helper.js | 14 ++++++++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index ae96209f..89f37e58 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -9,9 +9,9 @@ on: workflow_dispatch: inputs: version_tag: - description: 'Version tag (e.g. 2.5.9)' + description: 'Version tag (e.g. 2.6.0)' required: true - default: '2.5.9' + default: '2.6.0' jobs: build-and-push: diff --git a/web_server.py b/web_server.py index a53bd02b..f3cad76f 100644 --- a/web_server.py +++ b/web_server.py @@ -40,7 +40,7 @@ logger = setup_logging(_log_level, _log_path) # App version — single source of truth for backup metadata, system-info, update check, etc. # Semver: MAJOR.MINOR.PATCH. Bump at each dev→main release. -_SOULSYNC_BASE_VERSION = "2.5.9" +_SOULSYNC_BASE_VERSION = "2.6.0" def _build_version_string(): """Append short commit hash to version when available (e.g. 2.35+abc1234).""" diff --git a/webui/static/helper.js b/webui/static/helper.js index e83a5b89..c29f9009 100644 --- a/webui/static/helper.js +++ b/webui/static/helper.js @@ -3413,10 +3413,12 @@ function closeHelperSearch() { // projects that span multiple commits before shipping. Strip the flag at // release time and add a real `date:` line at the top of the version block. const WHATS_NEW = { - '2.5.9': [ - { date: 'Unreleased — dev cycle' }, + '2.6.0': [ + { date: 'May 24, 2026 — 2.6.0 release' }, { title: 'Qobuz playlist sync', desc: 'new Qobuz tab on the Sync page. Connect Qobuz in Settings → Connections, hit Refresh on the tab, and your Qobuz playlists + Favorite Tracks show up alongside Tidal and Deezer. clicks run the same discovery → sync → download flow as the other sources.', page: 'sync' }, { title: 'Import search: show when results came from the fallback source', desc: 'if you picked MusicBrainz (or Discogs / iTunes / etc.) as your primary metadata source but the Import album search ended up serving Deezer cards, you had no idea — the chain silently fell through when the primary returned nothing. now each card shows a small "via Deezer" label when the source differs from your primary, and a banner above the grid spells it out when all results came from the fallback. backend behavior unchanged.' }, + ], + '2.5.9': [ { date: 'May 21, 2026 — 2.5.9 release' }, { title: 'Now-playing modal: lyrics panel', desc: 'new lyrics panel below the player controls in the expanded now-playing modal. fetches from LRClib via /api/lyrics/fetch, but prefers the local .lrc / .txt sidecar files SoulSync drops next to your audio during post-processing so downloaded tracks show lyrics instantly with zero network. synced LRC (timestamped) highlights the active line and auto-scrolls it into the middle of the viewport on every audio timeupdate; plain text renders without highlighting. status chip shows whether the result came back Synced or Plain. panel is collapsed by default — click the Lyrics header to expand. cached per track so revisiting a track doesn\'t refetch.' }, { title: 'Now-playing modal: View Artist closes the modal first', desc: 'tapping View Artist on the expanded media player now closes the now-playing modal before navigating, so the artist page is actually visible instead of sitting under a modal you\'d have to manually dismiss. click is a no-op when no artist_id is attached to the current track.' }, @@ -3508,8 +3510,8 @@ const VERSION_MODAL_SECTIONS = [ usage_note: "Sync → Qobuz → 🔄 Refresh", }, { - title: "2.5.9 Release Stability Pass", - description: "this release ties together the new release-based download sources and a set of fixes from real user reports: HiFi instance detection, Jellyfin full refreshes, transient SQLite disk I/O failures, and wrong-artist Album Completeness fills.", + title: "Earlier in v2.5", + description: "highlights from the 2.5.x cycle that landed just before 2.6.0: new release-based download sources, HiFi instance probing, Jellyfin full-refresh repairs, transient SQLite retries, and tighter Album Completeness artist matching.", features: [ "Torrent and Usenet are now available as Prowlarr-backed download sources with release staging, live progress, and source-aware history labels", "HiFi instances are probed by actually checking whether they can return a playable manifest, including legacy public hifi-api instances", @@ -3518,7 +3520,7 @@ const VERSION_MODAL_SECTIONS = [ "Album Completeness rejects same-title releases from the wrong artist before importing anything", "Import album search now labels each card with the source that served it and warns when results came from a fallback instead of your primary", ], - usage_note: "version 2.5.9 focuses on safer matching and making the new release-based sources usable without disturbing existing source flows", + usage_note: "browse the What's New panel for the full 2.5.x changelog", }, { title: "Torrent and Usenet Are Now Live Download Sources", @@ -3904,7 +3906,7 @@ function _getLatestWhatsNewVersion() { const versions = Object.keys(WHATS_NEW) .filter(v => _compareVersions(v, buildVer) <= 0) .sort((a, b) => _compareVersions(b, a)); - return versions[0] || '2.5.9'; + return versions[0] || '2.6.0'; } function openWhatsNew() {