Commit Graph
3026 Commits
Author SHA1 Message Date
Afonso Jorge Ramos 5ed549d46b feat(macos): gate Linux-only audio backends with cfg
Add #[cfg(target_os = "linux")] to pipewire_backend and pulse_backend
modules. Add CpalDefaultBackend for non-Linux platforms using CPAL
default host (CoreAudio on macOS). Gate reset_pipewire_clock() calls.
2026-03-20 00:45:03 +01:00
vicrodh 352d589276 fix: update rcgen 0.12 -> 0.14 API and suppress unused variable warning
rcgen 0.14 breaking changes:
- CertificateParams::new() takes Vec<String> not Vec<SanType>
- Certificate::from_params() replaced by params.self_signed(&key_pair)
- cert.serialize_pem() replaced by cert.pem()
- cert.serialize_private_key_pem() replaced by key_pair.serialize_pem()
- Ia5String no longer public, DNS SANs passed as strings

Also prefixed unused _envelope variable in qconnect_service.rs.

cc
2026-03-19 17:34:12 -06:00
vicrodh 63b0136b5d Merge remote-tracking branch 'origin/pre-release' into pre-release 2026-03-19 17:25:19 -06:00
Victor RH 3b2cd1addd Merge pull request #188 from vicrodh/dependabot/cargo/src-tauri/pre-release/qrcode-generator-5.0.0
chore(deps): bump qrcode-generator from 4.1.9 to 5.0.0 in /src-tauri
2026-03-19 17:24:26 -06:00
Victor RH 23811367af Merge pull request #186 from vicrodh/dependabot/npm_and_yarn/pre-release/svelte-check-4.4.5
chore(deps-dev): bump svelte-check from 4.3.5 to 4.4.5
2026-03-19 17:24:24 -06:00
dependabot[bot] 3e6b51c7dd chore(deps): bump qrcode-generator from 4.1.9 to 5.0.0 in /src-tauri
Bumps [qrcode-generator](https://github.com/magiclen/qrcode-generator) from 4.1.9 to 5.0.0.
- [Commits](https://github.com/magiclen/qrcode-generator/compare/v4.1.9...v5.0.0)

---
updated-dependencies:
- dependency-name: qrcode-generator
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 23:22:18 +00:00
dependabot[bot] 85d9f62934 chore(deps-dev): bump svelte-check from 4.3.5 to 4.4.5
Bumps [svelte-check](https://github.com/sveltejs/language-tools) from 4.3.5 to 4.4.5.
- [Release notes](https://github.com/sveltejs/language-tools/releases)
- [Commits](https://github.com/sveltejs/language-tools/compare/svelte-check@4.3.5...svelte-check@4.4.5)

---
updated-dependencies:
- dependency-name: svelte-check
  dependency-version: 4.4.5
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 23:21:55 +00:00
Victor RH 2c06d1163b Merge pull request #189 from vicrodh/dependabot/npm_and_yarn/pre-release/sveltejs/vite-plugin-svelte-7.0.0
chore(deps-dev): bump @sveltejs/vite-plugin-svelte from 5.1.1 to 7.0.0
2026-03-19 17:21:08 -06:00
Victor RH ef4ee640b1 Merge pull request #191 from vicrodh/dependabot/cargo/src-tauri/pre-release/rcgen-0.14.7
chore(deps): bump rcgen from 0.12.1 to 0.14.7 in /src-tauri
2026-03-19 17:21:05 -06:00
Victor RH 9cf7657be7 Merge pull request #193 from vicrodh/dependabot/cargo/src-tauri/pre-release/ashpd-0.13.8
chore(deps): bump ashpd from 0.13.3 to 0.13.8 in /src-tauri
2026-03-19 17:21:03 -06:00
Victor RH eb82bc8920 Merge pull request #190 from vicrodh/dependabot/cargo/src-tauri/pre-release/tauri-2.10.3
chore(deps): bump tauri from 2.10.2 to 2.10.3 in /src-tauri
2026-03-19 17:21:01 -06:00
Victor RH 8adcd67702 Merge pull request #192 from vicrodh/dependabot/cargo/src-tauri/pre-release/uuid-1.22.0
chore(deps): bump uuid from 1.21.0 to 1.22.0 in /src-tauri
2026-03-19 17:20:58 -06:00
Victor RH 5ec74a5beb Merge pull request #184 from vicrodh/dependabot/npm_and_yarn/pre-release/typescript-5.9.3
chore(deps-dev): bump typescript from 5.6.3 to 5.9.3
2026-03-19 17:20:56 -06:00
Victor RH 38fab9f7c9 Merge pull request #187 from vicrodh/dependabot/npm_and_yarn/pre-release/vitest-4.1.0
chore(deps-dev): bump vitest from 4.0.17 to 4.1.0
2026-03-19 17:20:54 -06:00
Victor RH f5e7187251 Merge pull request #185 from vicrodh/dependabot/npm_and_yarn/pre-release/svelte-5.54.0
chore(deps-dev): bump svelte from 5.53.6 to 5.54.0
2026-03-19 17:20:50 -06:00
dependabot[bot] d04781826c chore(deps): bump ashpd from 0.13.3 to 0.13.8 in /src-tauri
Bumps [ashpd](https://github.com/bilelmoussaoui/ashpd) from 0.13.3 to 0.13.8.
- [Release notes](https://github.com/bilelmoussaoui/ashpd/releases)
- [Commits](https://github.com/bilelmoussaoui/ashpd/commits)

---
updated-dependencies:
- dependency-name: ashpd
  dependency-version: 0.13.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 23:16:32 +00:00
dependabot[bot] 9d29ed757c chore(deps): bump uuid from 1.21.0 to 1.22.0 in /src-tauri
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.21.0 to 1.22.0.
- [Release notes](https://github.com/uuid-rs/uuid/releases)
- [Commits](https://github.com/uuid-rs/uuid/compare/v1.21.0...v1.22.0)

---
updated-dependencies:
- dependency-name: uuid
  dependency-version: 1.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 23:16:18 +00:00
dependabot[bot] 92058de4a2 chore(deps): bump rcgen from 0.12.1 to 0.14.7 in /src-tauri
Bumps [rcgen](https://github.com/rustls/rcgen) from 0.12.1 to 0.14.7.
- [Release notes](https://github.com/rustls/rcgen/releases)
- [Commits](https://github.com/rustls/rcgen/compare/v0.12.1...v0.14.7)

---
updated-dependencies:
- dependency-name: rcgen
  dependency-version: 0.14.7
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 23:16:06 +00:00
dependabot[bot] 97ac638ae3 chore(deps): bump tauri from 2.10.2 to 2.10.3 in /src-tauri
Bumps [tauri](https://github.com/tauri-apps/tauri) from 2.10.2 to 2.10.3.
- [Release notes](https://github.com/tauri-apps/tauri/releases)
- [Commits](https://github.com/tauri-apps/tauri/compare/tauri-v2.10.2...tauri-v2.10.3)

---
updated-dependencies:
- dependency-name: tauri
  dependency-version: 2.10.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 23:15:47 +00:00
dependabot[bot] e6c5096fa2 chore(deps-dev): bump @sveltejs/vite-plugin-svelte from 5.1.1 to 7.0.0
Bumps [@sveltejs/vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte/tree/HEAD/packages/vite-plugin-svelte) from 5.1.1 to 7.0.0.
- [Release notes](https://github.com/sveltejs/vite-plugin-svelte/releases)
- [Changelog](https://github.com/sveltejs/vite-plugin-svelte/blob/main/packages/vite-plugin-svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/vite-plugin-svelte/commits/@sveltejs/vite-plugin-svelte@7.0.0/packages/vite-plugin-svelte)

---
updated-dependencies:
- dependency-name: "@sveltejs/vite-plugin-svelte"
  dependency-version: 7.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 23:15:35 +00:00
dependabot[bot] 23279f2fe6 chore(deps-dev): bump vitest from 4.0.17 to 4.1.0
Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 4.0.17 to 4.1.0.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.0/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 4.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 23:15:27 +00:00
dependabot[bot] 4a19b05a19 chore(deps-dev): bump svelte from 5.53.6 to 5.54.0
Bumps [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte) from 5.53.6 to 5.54.0.
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.54.0/packages/svelte)

---
updated-dependencies:
- dependency-name: svelte
  dependency-version: 5.54.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 23:15:10 +00:00
dependabot[bot] 3f6c590a04 chore(deps-dev): bump typescript from 5.6.3 to 5.9.3
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.6.3 to 5.9.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.6.3...v5.9.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 5.9.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 23:15:01 +00:00
vicrodh 52d724a7e4 Merge branch 'pre-release' 2026-03-19 17:13:37 -06:00
vicrodh af23efb3c1 chore: bump version to 1.2.0
Updated:
- src-tauri/Cargo.toml
- src-tauri/tauri.conf.json
- package.json + package-lock.json
- snapcraft.yaml (root + packaging/)
- flake.nix
- Cargo.lock
- metainfo.xml (new release entry)
- README: Snap MPRIS limitation note with forum link

cc
2026-03-19 17:12:31 -06:00
vicrodh d0476dd5ab fix(qconnect): fix renderer handoff args and TransportConnected type check
QconnectBadge was passing { rendererId } instead of
{ request: { renderer_id: rendererId } } to v2_qconnect_set_active_renderer,
causing "missing required key request" error on every handoff attempt.

Also fixed TypeError when event.payload is a string ("TransportConnected")
instead of an object — the 'in' operator requires an object operand.

cc
2026-03-19 16:43:32 -06:00
vicrodh 024c1fe98e diag(qconnect): add click logging and pressed effect to renderer button
cc
2026-03-19 16:11:09 -06:00
vicrodh 768b9c118c fix(qconnect): re-request session state after renderer join
QBZ wasn't appearing as a renderer on first connect because the
frontend snapshot was emitted before the deferred renderer join
completed. After joining as renderer, wait 500ms and re-request
session state so the server sends an updated renderer list that
includes QBZ.

cc
2026-03-19 16:07:28 -06:00
vicrodh 3fcecd80b1 docs: clarify offline cache vs local library in README
cc
2026-03-19 15:54:17 -06:00
vicrodh 9d54a19439 docs: move QConnect below Audio, add wiki link
cc
2026-03-19 15:41:05 -06:00
vicrodh 989eb3faf5 docs: rewrite README for 1.2.0
Major rewrite reflecting current state of the project:
- Qobuz Connect as headline feature
- No API keys needed (proxy-based architecture)
- API proxy self-hosting instructions for source builds
- Updated tech stack (rodio 0.22, MuPDF 0.6, ashpd, 5 locales)
- 13 crates including 4 QConnect crates
- Removed outdated sections (KWin title bar, vendored rodio, data migration)
- Streamlined installation and known issues

cc
2026-03-19 15:30:35 -06:00
vicrodh 6245ac9633 docs: add 1.2.0 release documents
TAG_DETAILS.md, CHANGELOG_HIGHLIGHTS.md, CHANGELOG_FULL.md for the
Qobuz Connect release. 185 commits covering QConnect protocol, Linebed
visualizer, playlist follow/unfollow, audio settings sync overhaul, and
dozens of fixes.

cc
2026-03-19 15:21:22 -06:00
vicrodh ac9d38b2a9 fix: linebed canvas no longer overflows into player area
Offset canvas upward and reduce height by 154px (player height + margin)
so the bed ends above the player controls and track info area.

cc
2026-03-19 15:14:40 -06:00
vicrodh 73af66986e fix: adjust linebed camera to show full bed within viewport
Camera raised (y: 1738 -> 2200) and tilted steeper (x: -0.65 -> -0.78)
so the entire bed is visible without overflowing the bottom edge.
Also avoids covering the track info in the lower-right corner.

cc
2026-03-19 15:02:21 -06:00
vicrodh 780f75158a fix: skip credential tests in Nix build sandbox (#154)
Nix sets HOME=/homeless-shelter during builds, which makes
dirs::config_dir() return a technically writable but unusable path.
The keyring/D-Bus is also unavailable in the sandbox.

Added detection for HOME containing "homeless-shelter" or
"/nix/store", and NIX_BUILD_TOP env var, to skip credential
roundtrip tests in Nix builds.

cc
2026-03-19 14:52:24 -06:00
vicrodh 6261f312be fix: use {:?} for souvlaki MediaControlError formatting
MediaControlError doesn't impl Display on all platforms. Using {}
would fail to compile on non-Linux targets. Use {:?} (Debug) instead.

Cherry-picked from PR #181 by @afonsojramos.

cc
2026-03-19 14:42:12 -06:00
vicrodh 026dd0a53a chore: remove mpris slot from snapcraft to unblock Snap Store review
The mpris slot requires an auto-connect review from Canonical that has
been pending for 9+ days. Remove it to unblock the version bump from
1.1.18 to 1.1.20. MPRIS media controls will not work in the snap
build until the review is approved in a future release.

cc
2026-03-19 14:16:40 -06:00
vicrodh 9cdd1521b9 feat: add no-telemetry note to MusicBrainz integration description
MusicBrainz is a one-way pull — QBZ fetches public data but never
sends user data back. Added this clarification to the help text in
all 5 locales and to the wiki Integrations page.

cc
2026-03-19 14:13:00 -06:00
vicrodh a985be3134 feat: add Documentation link to sidebar gear menu
Opens https://github.com/vicrodh/qbz/wiki in browser.
Also updated Report Issue URL to use .yml template.

cc
2026-03-19 14:09:26 -06:00
vicrodh 388fc45116 chore: fix dependabot alerts — update devalue 5.6.4, sveltekit 2.53.3
- devalue 5.6.3 -> 5.6.4: fixes prototype pollution in parse/unflatten
  (GHSA #23, #24)
- @sveltejs/kit -> 2.53.3: fixes deserialization DoS in form actions

cc
2026-03-19 14:05:35 -06:00
vicrodh f055f53ed5 chore: migrate issue templates from markdown to YAML forms (#171)
Replaces placeholder-text markdown templates with structured YAML
issue forms. Dropdowns for installation method, display server, and
audio backend. Required fields for description, steps, and version.
Same output format when reading submitted issues.

cc
2026-03-19 13:56:44 -06:00
vicrodh 50b9ecb85e feat: add (?) help tooltips to bit-perfect audio settings (#166)
Exclusive Mode, DAC Passthrough, and Force Bit-Perfect now have (?)
help icons that show detailed explanations on hover:
- What backend each setting requires (ALSA Direct vs PipeWire)
- What PipeWire properties they affect (clock.force-rate, quantum)
- How they relate to each other (dependency chain)
- What happens without them (resampling to default rate)

i18n help texts added to all 5 locales.

cc
2026-03-19 12:53:04 -06:00
vicrodh 1f1e729db8 fix: HiFi Wizard now detects real DAC sample rates from /proc/asound
v2_query_dac_capabilities was returning hardcoded sample rates
(44.1-192kHz including 176.4kHz) instead of querying the actual
hardware. This caused incorrect configuration for DACs that don't
support all rates (e.g. DacMagic Plus doesn't support 176.4kHz).

Now queries /proc/asound/cardN/stream0 via PipeWire sink mapping
or ALSA device ID to get the real discrete rates from the USB
descriptor. Falls back to defaults only if detection fails.

cc
2026-03-19 12:41:24 -06:00
vicrodh b795d59f1f fix: show actual error message instead of [object Object] on playback failure (#182)
Tauri invoke errors are objects with { code, details, message } fields.
Template literal interpolation with ${err} produces [object Object].
Extract .message or .details, falling back to JSON.stringify().

The quality fallback itself (UltraHiRes -> HiRes) is already handled
by get_stream_url_with_fallback in qbz-core.

cc
2026-03-19 12:30:11 -06:00
vicrodh d676a5cb96 fix: Following playlists tab not loading — use authStore for userId
loadFollowingPlaylists was calling non-existent v2_get_runtime_status
command. Fixed to use getUserInfo() from authStore instead.

Also fixed loadFavoritePlaylists early return when no favorites exist
— it was skipping the loadFollowingPlaylists() call entirely.

cc
2026-03-19 12:04:58 -06:00
vicrodh 697c31053b feat: add Favorites/Following sub-tabs in Favorites > Playlists (#172)
Separates playlists into two sub-tabs:
- Favorites: playlists marked with the heart icon (local QBZ feature)
- Following: playlists subscribed on Qobuz (owner.id != current user)

The Following tab shows playlists from getUserPlaylists where the
owner is not the current user, matching Qobuz's subscription model.

i18n keys added to all 5 locales.

cc
2026-03-19 12:00:08 -06:00
vicrodh 6caeae2d8e fix: remove misleading artist album counts (#169)
Qobuz API's albums_count on Artist objects includes compilations,
tributes, appearances, and other non-album releases, showing
exaggerated numbers (e.g. 647 albums for an artist with ~20 releases).

Removed the count display from:
- Favorites artist list view
- Favorites artist grid view
- Search results artist cards

The accurate album count is available inside ArtistDetailView where
the actual releases are loaded and filtered.

cc
2026-03-19 11:54:08 -06:00
vicrodh 1ad16338fa feat: add Qobuz playlist follow/unfollow (#172)
Discovered undocumented Qobuz API endpoints from bundle analysis:
- POST /playlist/subscribe { playlist_id }
- POST /playlist/unsubscribe { playlist_id }

This is the native "follow playlist" feature that syncs across all
Qobuz clients, separate from QBZ's existing "Copy to Library" (local
copy) and "Favorite" (local flag) features.

Added:
- subscribe_playlist/unsubscribe_playlist in both qbz-qobuz and legacy client
- v2_qobuz_subscribe_playlist / v2_qobuz_unsubscribe_playlist commands
- Bookmark toggle button in PlaylistDetailView (next to Copy button)
- i18n keys in all 5 locales

cc
2026-03-19 11:36:56 -06:00
vicrodh 5488839e97 fix: increase PipeWire rate switch delay and verify after stream creation (#180)
USB hubs/docks (e.g. Razer USB4 Dock) may need longer than 300ms for
sample rate switching. When PipeWire hasn't finished reconfiguring,
96K/192K tracks play at wrong speed (half/quarter) and sound distorted.

Changes:
- Increase initial clock.force-rate delay from 300ms to 500ms
- After stream creation, query pw-metadata clock.rate to verify the
  actual graph rate matches what was requested
- If mismatch detected, retry with additional 500ms delay and re-force
- Log warnings when rate can't be verified so users can report

cc
2026-03-19 10:57:21 -06:00
vicrodh 509426ebcf fix: restore booklet viewer with mupdf 0.6 (#170)
mupdf 0.5 had struct size mismatches on Arch Linux (mupdf-sys bindings
incompatible with system MuPDF headers). Upgrading to mupdf 0.6 fixes
the bindings.

- Removed the booklet feature gate — mupdf is now a direct dependency
  again, matching the v1.1.19 configuration
- Removed stub implementation (always compile real MuPDF backend)
- sys-lib-libjpeg remains excluded (cross-distro libjpeg incompatibility)

cc
2026-03-19 09:28:07 -06:00