Commit Graph
6862 Commits
Author SHA1 Message Date
vicrodh 09d640138c fix(library): integrate remote album and SACD artwork fixes
Integrate the combined build containing the remote album ID correction and SACD artwork sidecars. The KEF DLNA fix remains on its separate branch pending reporter feedback.

cx
2026-09-08 15:26:15 -06:00
vicrodh 0ebcab6d3e fix(library): support SACD artwork fallback and image sidecars
Refresh missing artwork for unchanged SACD images when a folder cover is added after scanning. Enable image-specific metadata and cover sidecars in the Qt editor while preserving physical track numbers and never writing the ISO.

Validated with SACD regressions, the real Heathen image, 13 Qt editor tests, QML audits and the combined release build.

cx
2026-09-08 15:26:03 -06:00
vicrodh 357f2373fa fix(library): omit remote albums without a server album ID
Keep orphan Jellyfin and Subsonic tracks indexed without exposing internal grouping keys as server album IDs. Align album cards, artist counts and track navigation, and rebuild derived catalogs with schema 8.

Regression fails on the previous projection (three cards for one real album) and passes with the fix for both providers. Catalog suite: 45 passed, 2 ignored scale benchmarks.

cx
2026-09-08 14:38:36 -06:00
vicrodh 6b0561c5cd fix(library): merge validated remote album artwork fallback
cx
2026-09-08 13:39:51 -06:00
vicrodh ff49cbd2ab fix(library): retain album artwork fallback for remote catalogs
Use collection artwork when Jellyfin or Subsonic tracks have no image, preserving existing track artwork. Rebuild derived catalogs so existing libraries receive the correction.

cx
2026-09-08 13:39:50 -06:00
vicrodh 30a778f2f6 fix(flake): set the real 2.1.0 srcHash
The flake shipped with srcHash = lib.fakeHash, so consuming it with
inputs.qbz.url = "github:vicrodh/qbz" failed to evaluate. Set the
published v2.1.0 tag hash (verified with nix-prefetch-url --unpack).

Closes #744.

cc
2026-09-08 00:24:07 -06:00
vicrodh 0668868a28 packaging(aur): drop debuginfo from source PKGBUILDs
The qbz/qbzd source builds set only !lto; makepkg then injects -C
debuginfo=2 for its debug package, which inflates the final rustc link
enough to trip the OOM killer on the qbz-qt binary. Add !debug so the
source packages link within a normal builder's memory. Verified by
clean container builds of qbz and qbzd 2.1.0.

cc
2026-09-07 23:40:18 -06:00
vicrodh 80a13d75c1 ci(release): fix aarch64 tarball naming and gentoo metadata validation
Two release-pipeline fixes surfaced by the 2.1.0 tag:

- release-linux-aarch64: the GUI and qbzd tarballs (and their internal dirs)
  were named with DEB_ARCH (arm64), but every source consumer — release-aur,
  the Gentoo binary ebuilds, the Flathub manifest — fetches them as aarch64,
  which matches the rpm/AppImage suffix. They 404'd on the tag and needed a
  manual re-upload. Name the tarballs and dirs with ARCH (aarch64); the .deb
  files keep DEB_ARCH (arm64), the Debian convention.
- release-gentoo: the metadata validation step calls xmllint, which is not on
  the runner by default; install libxml2-utils before using it.

cc
2026-09-07 21:40:34 -06:00
vicrodh 9857c1992b docs(release): 2.1.0 feature inventory and tag details
Release copy for 2.1.0 "Rebuild Q (You Can (Not) Redo)": the feature inventory
that feeds the Discussion and the tag details rendered by the website and the
in-app About modal. The Discussion link points to discussions/743; the h1
codename matches the About modal literal (about_qt.rs CODENAME).

cc
2026-09-07 18:12:19 -06:00
vicrodh b56e4f9b74 fix(qt): remove an unavailable sidecar row from a mixed playlist
A mixed Qobuz playlist whose Plex (or Jellyfin/Subsonic) sidecar track no
longer resolves renders an "Unavailable track" row, and "Remove from playlist"
from the row menu did nothing:

  playlist remove: no plex key for row plex:47032
  playlist remove: non-numeric row id plex:47032

remove_sidecar_row resolved the ref ONLY through the live queue
(local_picker_ref_for_row), but an unavailable row has no queue entry, so the
lookup returned None, the plex arm bailed, and the fallthrough tried to parse
the "plex:<key>" display id as a Qobuz u64 and failed. Nothing was removed —
and it must not depend on Plex being reachable, since the removal is a local
SQLite delete.

Derive the removal target from the display id itself, which already encodes
"<source>:<reference>", falling back to it when the queue ref is absent. This
also closes the same gap for Jellyfin/Subsonic sidecars (previously unhandled),
via remove_remote_track_from_playlist. Pure helper `sidecar_removal` with unit
tests covering resolved, unavailable-plex, unavailable-remote, local and Qobuz
rows.

cc
2026-09-07 17:36:54 -06:00
vicrodh 06770cfd4c fix(build): qt-cargo.py runs cargo via subprocess, not os.execvpe
os.exec* is emulated on Windows (spawn + terminate the caller) and crashed
the release-windows build: it died with "Segmentation fault ... exit code
139" immediately after the wrapper printed the SDK fingerprint, before cargo
produced any output. The POSIX Linux and macOS builds using the same wrapper
were unaffected, which localised it to the Windows exec emulation.

Spawn cargo with subprocess.run and propagate its exit code. Portable across
all three targets; cargo output still streams through the inherited stdio and
CXXFLAGS/QMAKE plumbing is unchanged. Verified locally: the wrapper reaches
cargo and returns its status.

cc
2026-09-07 15:58:21 -06:00
vicrodh e4ad325744 fix(qt): unique id for the kiosk history queue delegate
The Up Next and History delegates in KioskNowPlaying both declared
`id: queueRow`. qmlcachegen and the runtime tolerate the collision, but
qmllint fails to resolve the inline QueueRowLite type in the second delegate
and the pre-release qt gate rejected it. Give the history delegate its own id.

cc
2026-09-07 12:46:58 -06:00
vicrodh db950139eb chore(about): merge Ko-fi supporter Jan into pre-release 2026-09-07 12:34:11 -06:00
vicrodh 58cd3b70e7 chore(about): add Ko-fi supporter Jan
cc
2026-09-07 12:33:45 -06:00
vicrodh 31da9c57bb fix(qt): kiosk feedback round — chrome, search, album, artists, lyrics
Address the owner's kiosk feedback on top of the release hardening:

- Chrome: the back bar is a drag surface and shrank to 44px with one shared
  button form for Back/Forward/Connect/Cast; Qobuz Connect and Cast are a
  permanent cluster in the bar; the dead Share-logs button left the kiosk
  Settings header.
- Transport bar: the hidden overflow menu is gone; Volume is always visible
  with a vertical sheet, and Desktop mode has its own button.
- Now Playing: one centred transport row (New-bar order); lyrics are centred
  (shared LyricsLinesView gains an opt-in centered, desktop default false).
- Local Library: the media funnel and an Open (ephemeral) entry point reach
  the kiosk; Artists is its own multi-column round-card grid (kiosk-only, the
  desktop LocalArtistsTab is untouched); the Artists drill-down query no
  longer hangs off a stale derived guard.
- Search: the All-tab dashboard shelves render again — they were mounted in a
  Loader Component that read the delegate id under reuse and bound an empty
  model; they are direct children now.
- Album detail: icon actions the height of the quality badge plus play next /
  later / queue, an inline floating quality badge, and zebra rows; both album
  headers show a quality badge.
- Immersive: a quiet auto-hiding kiosk exit moved to the bottom, clear of the
  window controls.

Regression coverage in scripts/test_qt_kiosk_feedback.mjs (wired into the
runtime gate). Verified on a private authenticated Xvfb; QML audits 6/6,
Node gate 5/5, release build 0 warnings.

cc
2026-09-07 12:33:28 -06:00
vicrodh b1dba198c9 feat(qt): kiosk profile release hardening
Integrate the Kiosk profile hardening round: 12 dedicated Kiosk views plus
22 shared opt-in hosts, shared navigation history with Back/Forward, Albums
as the default library tab, native paged Local Library (artists/tracks),
lightweight MyQBZ grid and detail, Ephemeral lifecycle, bounded lists and
artwork sized to the physical frame, static skeletons, 64px transport bar,
Settings touch reflow and a persistent Immersive exit.

Desktop keeps its prior behavior: every shared component defaults to the
desktop path and only opts into Kiosk behavior through explicit properties
(origin-relative ScrollMemory, viewport-bounded artwork requests).

Regression coverage: kiosk navigation and artwork Node tests added to the
runtime gate, scroll-origin fixtures for fixed and grouped rows, i18n
strings for all eight locales.

Verified by 750 release tests, six QML audits, Kiosk smokes at 800x480 and
1280x800 and a Desktop A/B with seven pixel-identical captures.

cc
2026-09-07 08:23:11 -06:00
vicrodh c1c463dc94 refactor(about): load sponsor credits from release data
cx
2026-09-06 23:44:22 -06:00
vicrodh 834dc7826d docs(community): clarify Windows and sponsor support
cx
2026-09-06 23:14:21 -06:00
vicrodh 7b90b30d38 docs(contributing): require workflow context in PRs
cx
2026-09-06 23:06:15 -06:00
vicrodh a6649f3bdc docs(contributing): keep model disclosure future-proof
cx
2026-09-06 22:58:52 -06:00
vicrodh 4eea00a61a chore(issue-templates): simplify contributor intake
cx
2026-09-06 22:56:59 -06:00
vicrodh 654ebc5722 docs(contributing): require model-specific LLM disclosure
cx
2026-09-06 22:56:54 -06:00
vicrodh d024013168 docs(readme): update distribution and macOS guidance
cx
2026-09-06 22:33:46 -06:00
vicrodh 24a0f5331d docs: expand platform build requirements and AI documentation note
Add the Windows experimental badge and source build prerequisites for Arch, Gentoo, NixOS and Windows. Clarify how to build against an installed Windows Qt SDK and invite help with documentation.

cx
2026-09-06 22:21:13 -06:00
vicrodh 21e81a4b42 fix(ci): reject early exits in packaged Qt startup smokes
Observe process survival through the full smoke window, isolate profiles and the session bus, restore hidden SDKs and reap private process groups. Reuse the Qt log gate and retain smoke evidence on failures. Add subprocess regressions to the test-crates gate.

cx
2026-09-06 19:24:15 -06:00
vicrodh 02c4a6bdc0 docs: clarify QBZ scope and SACD notices for 2.1.0
Translate the project statement, document the implemented offline grace window, and link the bundled DST provenance and license notices. Align the release codename, ARM64 requirements and AppStream date.

cx
2026-09-06 19:20:54 -06:00
vicrodh 8f2050d703 fix(sacd): support images with 2064-byte physical sectors
Detect sector layout from Master TOC signatures and strip physical framing while preserving logical addressing, bounds and file mutation checks. Add reader and scanner regressions with synchronized CI presence guards.

Verified full decoding of 53 tracks across five real images, seek and previous-reader comparisons, isolated release UI opening and scanning, and disc, DSD, library and Qt tests.

cx
2026-09-06 17:29:06 -06:00
vicrodh 0ce4e1fa04 fix(local): publish ephemeral sessions before requesting navigation
Publish the open sequence after the active session and its document on the Qt thread. Keep boot restore and metadata updates from requesting navigation.

cx
2026-09-06 15:21:26 -06:00
vicrodh 0ffcdd1425 fix(discover): link recently played album artists by source
Retain artist IDs in new history snapshots and enable artist links in the carousel and View all. Route local sources to Local Library Artists and resolve older Qobuz snapshots through the existing album lookup.

cx
2026-09-06 14:34:53 -06:00
vicrodh f9578d042c fix(navigation): include local library tabs in history
Record the outgoing tab state and scroll before switching, restore same-view history entries, and route sidebar tab requests through the same path without duplicating the initial landing. Add shared CI and local regressions for source filtering and tab transitions.

cx
2026-09-06 14:34:41 -06:00
vicrodh bf84f2e65b fix(local): apply source filters to selected artist albums
Filter physical album variants in the compatibility detail view and cancel stale native queries and unfiltered retries. Load album rows when switching out of the native model.

cx
2026-09-06 14:34:18 -06:00
vicrodh 9c9424bd30 fix(startup): keep Qt from retrying an unresponsive session bus
Carry transport failure into Qt startup with a process-local fail-fast bus address. Preserve a responsive bus when remote forwarding fails, and retry the original session on the next launch. Add the silent-bus xcb release regression to the shared CI/local runtime gate.

cx
2026-09-06 12:13:34 -06:00
vicrodh 9f32ef2d72 fix(discover): label DSD history by its sampling multiple
Classify one-bit queue metadata as DSD before PCM formatting. Display older misclassified snapshots as DSD64, DSD128 and higher multiples without rewriting the stored history, and pass the detail to both carousel and full-page cards.

Verify native local-track to queue metadata and old snapshots in the passing 741-test Qt suite. Audio behavior is unchanged.

cx
2026-09-06 11:43:49 -06:00
vicrodh 97545feae7 fix(discover): preserve sources on existing Most Played album cards
Use one mapper for the carousel and full history page. Carry the stored routing source and normalized badge vocabulary through both surfaces, including existing rows, downloads and media servers.

Cover existing snapshots and catalog aliases in the Qt suite; all 741 tests pass with temporary XDG data.

cx
2026-09-06 11:43:49 -06:00
vicrodh 8f959fc757 fix(library): restore the last local album after a clean exit
Save the local album identifier and active filter in the account navigation file at clean shutdown. Restore it on remembered startup, preserve launcher link and crash recovery precedence, and fall back to Local Library when the album is unavailable.

Cover profile isolation, a later Home exit, invalid context and startup policy with persistence fixtures. All 738 Qt tests pass with a temporary XDG profile.

cx
2026-09-06 06:37:38 -06:00
vicrodh 9bcc5043f3 fix(ui): keep local album source badges visible across surfaces
Carry the physical source list through Discover pins and Library feeds, including logical albums with multiple origins. Reuse the Local Library badge vocabulary and shared AlbumCard rendering so local origins remain visible in Discover, Library and MyQBZ.

Validated with 738 Qt tests and the six QML audits.

cx
2026-09-06 06:37:38 -06:00
vicrodh df8e1c89c1 fix(library): preserve explorer column choices across restarts
Store browser searches and facet selections per profile with atomic writes. Prefer navigation history when available and restore saved choices before QML can publish construction defaults. Keep the startup crash guard and unrelated preferences intact.

Validate with six QML audits and two passing profile-isolation and persistence regressions.

cx
2026-09-06 06:06:41 -06:00
vicrodh fd421044bc fix(renderer): rescue failed Linux Auto presentation per launch
Probe Qt's default backend in a disposable graphics-only child before runtime and the main window. After proven failure, allow one software presentation attempt without persisting a renderer preference. Preserve explicit backend policy and saved-GPU validation.

Bound and reap children, keep deep links in the parent, and avoid blocked diagnostic pipes. Cover healthy/failing decisions, overrides, missing executables, paths with spaces and watchdog cleanup in the passing Qt suite.

cx
2026-09-06 05:08:17 -06:00
vicrodh 279a6fe847 fix(auth): bound saved-token restoration through the response body
Apply a request-local 15-second deadline without limiting shared streaming requests or canceling store activation. Preserve saved tokens on network failures and release the splash into the existing login/offline route with the error visible.

Verify header stalls, partial and trickling bodies, cancellation, late responses and account retries with local HTTP fixtures plus boot-controller tests. All 103 Qobuz and 733 Qt tests pass.

cx
2026-09-06 05:05:28 -06:00
vicrodh 7ea01a7e67 fix(startup): bound and cancel the Linux instance probe
Use one two-second deadline across native Unix connect, D-Bus authentication, name ownership and URL/window forwarding. Own and shut down the transport on cancellation, preserve unconfirmed links, and keep the primary server alive.

Cover stalled and delayed phases, filesystem/abstract buses, ownership release and early UI handoff with isolated fixtures. All 733 Qt tests pass; async-io features remain unchanged.

cx
2026-09-06 05:05:27 -06:00
vicrodh 9fd9978be2 fix(windows): bundle and audit app-local MSVC runtime
Deploy the official x64 redistributable DLLs into the shared MSI/ZIP payload and reject missing, debug, incompatible or shadowed CRT imports. Smoke both deployed products with isolated profiles and record loaded Qt/CRT paths.

Validate with 14 PE fixtures, PowerShell parsing, actionlint and shellcheck. Native clean-Windows acceptance remains pending.

cx
2026-09-06 04:54:40 -06:00
vicrodh 6794e15257 fix(build): invalidate native objects when the Qt SDK changes
Fingerprint Qt SDK headers for C++ cache inputs and share bounded debug/release startup gates between local tooling and CI.

cx
2026-09-06 03:53:05 -06:00
vicrodh 088fac93c6 merge: integrate test-crates fixes
cx
2026-09-05 20:31:17 -06:00
vicrodh 39ba3282f5 fix(ci): eliminate test-crates build warnings
Correct dead platform declarations, stale rustdoc and test warnings; validate complete gettext headers. Install LLD in the Qt job and explicitly validate committed shader packs without rebaking them. Keep the independent shader bake gate and add three build-policy tests.

The full local gate passed 2398 workspace tests and 715 Qt tests, QML audits, shader baking and the isolated offscreen smoke without compiler, rustdoc or gettext warnings.

cx
2026-09-05 20:31:05 -06:00
vicrodh 9fd39edf5f fix(tests): update embedded album fixtures
Initialize the four new optional AlbumSummary fields in all six test fixtures. Preserve absent metadata semantics and restore workspace test compilation.

cx
2026-09-05 20:30:50 -06:00
vicrodh f063646d4a merge: integrate QConnect controller hardening
Preserve unavailable library replacement changes from pre-release. Combine additive translation entries from both branches in all eight locales.

cx
2026-09-05 18:38:00 -06:00
vicrodh 9b3b52cf9c fix(qconnect): preserve controller state across renderer handoffs
Keep queue reads from starving controls without weakening real queue-write serialization. Restore official proto3 zero defaults and next/previous loop, shuffle and autoplay semantics.

Project controls from the active peer state and target exact upcoming queue occurrences without optimistic cursor changes or local playback fallback. Cover takeover, seek, mute, wire decoding and manual skip regressions in the CI gate.

cx
2026-09-05 18:37:07 -06:00
vicrodh db84e733d6 fix(log): compact consecutive repeated diagnostics
Group identical redacted diagnostics across stderr, file and the live ring. Flush repeat summaries on visible transitions, exports and shutdown while keeping periodic counts for sustained bursts.

cx
2026-09-05 18:36:51 -06:00
vicrodh d8f23d15e0 merge: integrate unavailable library replacements
cx
2026-09-05 17:31:35 -06:00
vicrodh 316a0c8f46 fix(qt): replace unavailable library favorites
cx
2026-09-05 17:31:17 -06:00