Commit Graph
116 Commits
Author SHA1 Message Date
vicrodh 2802527912 chore(deps): update jsdom 29.0.2, notify-rust 4.14.0
Also closed PR #298 (md-5 0.11) — breaking API change across 9
call sites for zero functionality gain.

cc
2026-04-09 08:38:19 -06:00
Victor RH b196a299dc Merge pull request #300 from vicrodh/dependabot/cargo/src-tauri/pre-release/tauri-plugin-dialog-2.7.0 2026-04-09 08:20:17 -06:00
vicrodh 8fc6111782 feat(qbzd): mDNS discovery + registration for LAN pairing
Daemon side: registers _qbz._tcp.local mDNS service on startup
so desktop apps can discover it on the LAN. Uses hostname as
service name (configurable via qbzd.toml).

Desktop side: new qbzd_discovery.rs module with Tauri commands:
- v2_qbzd_start_discovery: browse _qbz._tcp services
- v2_qbzd_stop_discovery: stop browsing
- v2_qbzd_get_devices: list discovered daemons

Uses same mdns-sd crate already used for AirPlay discovery.

cc
2026-04-09 04:30:08 -06:00
dependabot[bot] e6bacb7507 chore(deps): bump tauri-plugin-dialog from 2.6.0 to 2.7.0 in /src-tauri
Bumps [tauri-plugin-dialog](https://github.com/tauri-apps/plugins-workspace) from 2.6.0 to 2.7.0.
- [Release notes](https://github.com/tauri-apps/plugins-workspace/releases)
- [Commits](https://github.com/tauri-apps/plugins-workspace/compare/log-v2.6.0...log-v2.7.0)

---
updated-dependencies:
- dependency-name: tauri-plugin-dialog
  dependency-version: 2.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-09 05:37:52 +00:00
vicrodh a279e04881 feat(credentials): use XDG portal secret for key derivation
Add per-app secret from org.freedesktop.portal.Secret as entropy
in the AES-256-GCM key derivation. DE-agnostic (works with GNOME,
KDE, etc.) and Flatpak-safe (portals auto-accessible in sandbox).

Falls back to machine_id + salt when portal is unavailable (headless,
old DEs, non-Linux). Cached for session lifetime via OnceLock.

Users will need to re-login once on upgrade (key derivation changed).

cc
2026-04-07 08:22:28 -06:00
vicrodh 192f681d25 fix: bump Cargo.toml version to 1.2.3
Cargo.toml was left at 1.2.2 because the version bump sed command
only matched JSON format ("version": "1.2.2") not TOML format
(version = "1.2.2"). This caused CARGO_PKG_VERSION to report 1.2.2
at runtime, triggering the update-available modal on every launch.

cc
2026-04-07 06:41:19 -06:00
vicrodh c37f3d7595 feat(security): enable system keyring for credential storage
Enable async-secret-service + crypto-rust features on the keyring
crate, activating GNOME Keyring and KDE Wallet support. The keyring
integration code was already written but the crate was compiled
without any platform backend, so it silently failed every time.

OAuth tokens will now be stored in the system keyring when available,
with encrypted file as automatic fallback.

Added org.freedesktop.secrets to Flatpak finish-args for sandbox
keyring access.

Fixes #215

cc
2026-04-06 16:20:26 -06:00
vicrodh 2c0f42b885 chore(deps): bump dirs 5 -> 6 across all crates
Zero API changes, only bumps internal deps (windows-sys, redox_users).
Eliminates duplicate dirs versions in Cargo.lock.

Closes #257

cc
2026-04-06 15:16:34 -06:00
vicrodh bf555ab143 feat(streaming): CMAF segmented download pipeline
Download tracks via Qobuz Akamai CDN with encrypted CMAF segments.
Derives session key (HKDF), unwraps content key (AES-CBC), decrypts
frames (AES-CTR), reassembles into standard FLAC. Falls back to legacy
track/getFileUrl if CMAF fails.

- Add qbz-cmaf dependency to src-tauri
- Make ensure_cmaf_session public on QobuzClient
- Add ensure_cmaf_session and get_file_url passthroughs to CoreBridge
- Add download_audio_cmaf and try_cmaf_download helpers
- Wire CMAF as primary download path in v2_play_track with legacy fallback

cc
2026-04-06 13:31:41 -06:00
vicrodh 09fcb5eb7b chore(deps): upgrade alsa crate 0.9 -> 0.10
Remove dead alsa dependency from src-tauri/Cargo.toml (code lives in
qbz-audio since V2 migration) and bump qbz-audio to alsa 0.10.
Eliminates duplicate alsa versions in Cargo.lock.

Breaking changes in 0.10 (Format/ChmapPosition reorder) do not affect
QBZ — we use catch-all matches and never rely on PartialOrd.

Closes #260

cc
2026-04-06 09:18:27 -06:00
Victor RH 5a4f014b79 Merge pull request #265 from afonsojramos/gate-flatpak-snap-macos
Reviewed: clean platform detection refactor, no audio code touched, all gates correct. Lockfiles will be regenerated post-merge.
2026-04-05 21:18:31 -06:00
vicrodh ee019851ef chore: bump version to 1.2.2
cc
2026-04-04 11:15:15 -06:00
Afonso Jorge Ramos adfc390009 fix(notifications): use released notify-rust 4.13.0 instead of fork 2026-04-04 15:31:58 +02:00
Afonso Jorge Ramos 5d115277a5 feat: add @tauri-apps/plugin-os for platform detection 2026-04-03 13:58:04 +02:00
Victor RH e56b0cbb6a Merge pull request #238 from afonsojramos/fix/macos-x86-build
fix(macos): enable x86_64 cross-compilation
2026-04-01 16:29:13 -06:00
Victor RH 1b10f6c132 Merge pull request #246 from afonsojramos/feat/macos-rich-notifications-pr
feat(macos): add album artwork to notifications
2026-03-31 20:27:23 -06:00
Victor RH b2f75cc85c Merge pull request #239 from afonsojramos/feat/macos-deep-link
feat(macos): add deep link support for qobuzapp:// URLs
2026-03-31 20:27:02 -06:00
Afonso Jorge Ramos a4a591e73c feat(macos): switch to notify-rust fork with image_path support 2026-04-01 03:35:27 +02:00
Afonso Jorge Ramos 9823dfb680 fix(macos): enable x86_64 cross-compilation
- Upgrade rust_cast 0.18.1 → 0.21 (switches from openssl to rustls,
  removing the openssl-sys dependency that blocked x86_64 cross-compile)
- Split mupdf sys-lib features to Linux-only (on macOS there are no GTK
  symbol conflicts, and system libs don't support x86_64 cross-compile
  from Apple Silicon)
- Update release-macos workflow to build both aarch64 and x86_64 DMGs
  using a matrix strategy
2026-04-01 02:40:55 +02:00
victorrhgap 080b916c64 feat: prevent system sleep during playback via XDG portal
Add idle_inhibit module using ashpd's Inhibit portal to prevent
screen blanking and system suspend while audio is playing.

- Acquires Idle+Suspend inhibit when playback starts
- Releases when paused, stopped, or track cleared
- Works on GNOME, KDE, Sway, XFCE
- Works inside Flatpak/Snap (no extra permissions needed)
- Graceful fallback if portal unavailable

Addresses #229

cc
2026-03-31 12:41:21 -06:00
Victor RH e229bbd7c3 Merge pull request #223 from vicrodh/dependabot/cargo/src-tauri/pre-release/lofty-0.23.3
chore(deps): bump lofty from 0.18.2 to 0.23.3 in /src-tauri
2026-03-31 09:11:39 -06:00
Afonso Jorge Ramos a2fb44511d feat(macos): add deep link support for qobuzapp:// URLs
Add tauri-plugin-deep-link to handle qobuzapp:// URLs on macOS, where
the OS delivers URLs via Apple Events instead of CLI arguments.

- Register qobuzapp scheme in tauri.conf.json (injected into Info.plist)
- Add on_open_url handler for Apple Event URL delivery
- Extract is_qobuz_link() and handle_qobuz_link() helpers to deduplicate
  URL matching across single-instance, first-launch, and deep-link paths
- Tighten URL matching from contains() to starts_with() for security
- Log emit errors instead of silently discarding them
2026-03-31 05:53:44 +02:00
Victor RH b9572b3c2e Merge pull request #218 from vicrodh/dependabot/cargo/src-tauri/pre-release/axum-0.8.8
chore(deps): bump axum from 0.7.9 to 0.8.8 in /src-tauri
2026-03-30 21:46:12 -06:00
Victor RH 1e4ce38258 Merge pull request #224 from vicrodh/dependabot/cargo/src-tauri/pre-release/souvlaki-0.8.3
chore(deps): bump souvlaki from 0.7.3 to 0.8.3 in /src-tauri
2026-03-30 21:39:20 -06:00
dependabot[bot] e5556f7842 chore(deps): bump rand from 0.8.5 to 0.10.0 in /src-tauri
Bumps [rand](https://github.com/rust-random/rand) from 0.8.5 to 0.10.0.
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-random/rand/compare/0.8.5...0.10.0)

---
updated-dependencies:
- dependency-name: rand
  dependency-version: 0.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 05:36:29 +00:00
dependabot[bot] d0064d122a chore(deps): bump souvlaki from 0.7.3 to 0.8.3 in /src-tauri
Bumps [souvlaki](https://github.com/Sinono3/souvlaki) from 0.7.3 to 0.8.3.
- [Release notes](https://github.com/Sinono3/souvlaki/releases)
- [Changelog](https://github.com/Sinono3/souvlaki/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Sinono3/souvlaki/compare/0.7.3...0.8.3)

---
updated-dependencies:
- dependency-name: souvlaki
  dependency-version: 0.8.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 05:36:08 +00:00
dependabot[bot] 63dd054815 chore(deps): bump lofty from 0.18.2 to 0.23.3 in /src-tauri
Bumps [lofty](https://github.com/Serial-ATA/lofty-rs) from 0.18.2 to 0.23.3.
- [Release notes](https://github.com/Serial-ATA/lofty-rs/releases)
- [Changelog](https://github.com/Serial-ATA/lofty-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Serial-ATA/lofty-rs/compare/0.18.2...0.23.3)

---
updated-dependencies:
- dependency-name: lofty
  dependency-version: 0.23.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 05:35:57 +00:00
dependabot[bot] ef1915f83d chore(deps): bump axum from 0.7.9 to 0.8.8 in /src-tauri
Bumps [axum](https://github.com/tokio-rs/axum) from 0.7.9 to 0.8.8.
- [Release notes](https://github.com/tokio-rs/axum/releases)
- [Changelog](https://github.com/tokio-rs/axum/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tokio-rs/axum/compare/axum-v0.7.9...axum-v0.8.8)

---
updated-dependencies:
- dependency-name: axum
  dependency-version: 0.8.8
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 05:35:32 +00:00
victorrhgap 7c96720dca chore: bump version to 1.2.1
Update all version endpoints, regenerate lockfiles,
add metainfo release entry and release docs.

cc
2026-03-25 19:47:08 -06:00
Afonso Jorge Ramos 3809a5cc67 feat(macos): add notify-rust dependency for desktop notifications 2026-03-20 00:45:15 +01: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] 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
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 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
vicrodh 9c14a76975 fix: make mupdf optional to unblock build on Arch Linux
mupdf-sys 0.5.0 bindings are incompatible with the current system
MuPDF library (struct size assertions overflow). Gate mupdf behind
a booklet feature flag (disabled by default). When disabled, booklet
commands return an error instead of crashing the build.

cc
2026-03-15 13:48:35 -06:00
vicrodh 65a0d523bb fix(qconnect): track active remote renderer state for skip and seekbar
cx
2026-03-13 11:55:48 -06:00
vicrodh 02155f54fe merge(pre-release): sync qconnect-poc-v3 with latest local integration state
cx
2026-03-12 15:23:32 -06:00
vicrodh df86363aac fix: add retry with fresh URL on CDN premature EOF
Root cause: Qobuz CDN returns "end of file before message length
reached" for specific tracks - sends Content-Length header then
closes connection without body data. Consistently reproducible for
certain tracks while others from the same album work fine.

Add retry logic at all download paths: on failure, request a fresh
stream URL from the API and retry once (CDN may route to different
edge). Streaming probe failures now fall back to standard download
path instead of failing completely. Also stream response body in
chunks for better partial-read diagnostics.
2026-03-11 20:41:58 -06:00
vicrodh a4a6722110 chore: bump version to 1.1.20 2026-03-11 12:53:13 -06:00
vicrodh 0eb0139418 fix: remove sys-lib-libjpeg from mupdf to fix startup on Debian/Fedora (#161, #162)
Ubuntu ships libjpeg8 (libjpeg.so.8) while Debian sid and Fedora ship
libjpeg62-turbo (libjpeg.so.62). Building with sys-lib-libjpeg on Ubuntu
hardcodes a dependency on libjpeg.so.8, breaking startup on other distros.

Let mupdf vendor its own libjpeg (statically linked) instead.
2026-03-11 08:01:25 -06:00
vicrodh 05f1a5ec13 chore: bump version to 1.1.19
- Cargo.toml, tauri.conf.json, package.json, snapcraft.yaml
- Regenerate Cargo.lock and package-lock.json
- Add metainfo release entry for 1.1.19
2026-03-09 00:35:42 -06:00
vicrodh 69aed4e1ad feat(notifications): migrate from notify-rust to ashpd XDG Portal
Replace direct D-Bus notifications (notify-rust) with XDG Desktop
Portal notifications (ashpd) for Flathub compliance. Portal
notifications use the app's .desktop file identity and don't require
--talk-name=org.freedesktop.Notifications permission.

- Replace notify-rust dep with ashpd (linux-only, tokio+notification)
- Use NotificationProxy for portal-based notifications
- Use stable ID "track-now-playing" to replace instead of stacking
- Convert artwork path to file:// URI via ashpd::Uri
- Graceful fallback when portal is unavailable
2026-03-03 22:25:59 -06:00
vicrodh b49d0b3e3b chore(release): bump version to 1.1.19-rc-1
cx
2026-03-01 18:59:24 -06:00
vicrodh faf8844584 chore: upgrade rodio 0.19 to 0.22, remove vendored rodio/cpal
Remove vendored rodio and cpal from src-tauri/vendor/ since rodio 0.22
now includes upstream f32 decoder support (our vendored modification).
Update all Cargo.toml files to use rodio 0.22 from crates.io and remove
the [patch.crates-io] section.
2026-02-28 07:48:03 -06:00
vicrodh bb723c7ca5 feat: switch booklet viewer from pdfjs-dist to MuPDF backend
Replace browser-side pdfjs-dist canvas rendering with server-side
MuPDF rendering for high-quality PDF booklet display. MuPDF renders
pages to PNG at configurable DPI in Rust, producing much sharper
results than the JavaScript canvas approach which had persistent
JPEG 2000 WASM decoder issues.

- Add mupdf crate with sys-lib features (avoid GTK symbol conflicts)
- Create pdf_viewer.rs with v2_booklet_open/render_page/close commands
- Download PDF to temp file, render pages on demand via MuPDF
- Display rendered PNGs as img tags instead of canvas
- DPI scales with zoom and devicePixelRatio for crisp output
- Support rotation via MuPDF transformation matrix
2026-02-28 07:48:03 -06:00
vicrodh 6d2128e90a chore: bump version to 1.1.18 2026-02-26 03:41:45 -06:00
vicrodh 1981771584 chore: bump version to 1.1.17 2026-02-23 17:59:24 -06:00
vicrodh 26db1c1728 chore(release): bump version to 1.1.15 2026-02-23 12:18:08 -06:00
vicrodh a0790f9a1d feat(qconnect-tauri): add runtime service bridging renderer commands to CoreBridge
cx
2026-02-21 12:54:06 -06:00
vicrodh 373220c379 chore(qconnect): register workspace crates and tauri adapter dependency
-cx
2026-02-21 12:17:30 -06:00