Commit Graph
62 Commits
Author SHA1 Message Date
victorrhgap 759149f32b feat(favorites): add bulk make-offline action to track selection bar
Add CloudDownload button to BulkActionBar for downloading selected
tracks for offline use. Fires v2_cache_favorite_track for each
selected track.

Closes #231

cc
2026-03-31 14:05:10 -06:00
victorrhgap 93374080a0 feat(titlebar): add Playlists to favorites dropdown in titlebar nav
Add ListMusic icon and playlists tab to TitleBarNav favorites dropdown,
matching the sidebar fix.

cc
2026-03-31 13:55:09 -06:00
victorrhgap b00f294e1c feat(sidebar): add Playlists to favorites quick access menu
Remove filter that excluded playlists from sidebar favorites section.
Add ListMusic icon for the playlists tab in both expanded and
collapsed popover views.

Closes #233

cc
2026-03-31 13:09:14 -06: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
victorrhgap 2900fb882c feat: add log sanitization for sensitive IDs and UUIDs
Add log_sanitize module with mask_uuid() and mask_id() functions to
prevent security scanners from flagging user IDs and session UUIDs
in log output.

- mask_uuid: 123e4567-e89b-12d3-a456-426614174000 -> 123e4567-****-****-****-****14174000
- mask_id: 12345678 -> 1234****
- Applied to offline_user_id in session_lifecycle (CodeQL alert #50)
- Applied to session_uuid and command uuid in qconnect_service

cc
2026-03-31 12:05:24 -06:00
victorrhgap 8b38316a85 style: remove unused CSS selectors in SearchView
cc
2026-03-31 11:11:18 -06:00
victorrhgap 016b0f6166 chore: remove unused required_i32_to_u64 function
cc
2026-03-31 11:09:32 -06:00
victorrhgap 4e526b1ae5 chore(deps): upgrade vite 6->8, vite-plugin-svelte 5->7, kit 2.55
- vite 8.0.3: Rolldown replaces Rollup+esbuild as build engine
- @sveltejs/vite-plugin-svelte 7.0.0: requires vite 8, inspector integrated
- @sveltejs/kit 2.55.0: vite 8 compatibility
- vitest 4.1.2: stable vite 8 peer dep
- Remove esbuild override (no longer needed with Rolldown)

Build, tests (92/92), and svelte-check all pass.

cc
2026-03-31 10:30:05 -06:00
victorrhgap a99d558e37 fix: update lofty 0.18 API calls to lofty 0.23
- Imports reorganized: use lofty::prelude::*, lofty::tag::*, lofty::picture::*
- Picture::new_unchecked -> Picture::unchecked().pic_type().mime_type().build()
- set_year/remove_year -> set_date/remove_date with Timestamp
- ItemKey::Unknown("ISRC") -> ItemKey::Isrc
- save_to_path(path) -> save_to_path(path, WriteOptions::default())
- get_string/remove_key now take ItemKey by value
- Bump qbz-library crate lofty dep to 0.23

cc
2026-03-31 09:32:02 -06:00
victorrhgap 166d346730 fix: update axum 0.7 API calls to axum 0.8
- Route path params: /:id -> /{id} (matchit 0.8 syntax)
- WebSocket Message::Text now takes Utf8Bytes: payload -> payload.into()

cc
2026-03-31 07:50:49 -06:00
victorrhgap 66a0c8f02a fix: update rand 0.8 API calls to rand 0.10
- thread_rng() -> rng()
- RngCore/fill_bytes -> RngExt/fill
- OsRng.fill_bytes -> rng().fill
- gen_range -> random_range
- Rng -> RngExt trait import

cc
2026-03-30 21:13:16 -06:00
victorrhgap 00cf8cf450 refactor(icons): rename all deprecated lucide-svelte icons to v1 names
Replace Github icon with inline SVG (brand icons removed in lucide v1).
Rename 15 deprecated icon aliases to their canonical v1 names:
AlertCircle->CircleAlert, AlertTriangle->TriangleAlert,
BarChart2->ChartNoAxesColumn, CheckCircle->CircleCheckBig,
CheckSquare->SquareCheckBig, Edit3->PenLine, Filter->Funnel,
HelpCircle->CircleHelp, Home->House, Loader2->LoaderCircle,
Mic2->MicVocal, MoreHorizontal->Ellipsis, MoreVertical->EllipsisVertical,
XCircle->CircleX, AlignLeft->AlignStartVertical

cc
2026-03-30 20:53:24 -06:00
victorrhgap 84c9b69359 style: fix indentation and missing semicolon from PR #230
cc
2026-03-30 13:29:29 -06:00
victorrhgap 38258ec99e fix(i18n): post-merge corrections for PR #226
- Fix French text leaked into en.json (actions.radio.startArtistRadio)
- Fix capitalized key "Mono" -> "mono" in en/es/fr (matched source code)
- Translate missing refreshMetadata in es.json
- Translate missing showActiveAlbums in fr.json
- Fix typo "Artistas anterior" -> "Artistas anteriores" in es.json
- Add all new PR #226 keys to de.json and pt.json

cc
2026-03-30 13:21:26 -06:00
victorrhgap 1c51eac578 docs: add contributors section to README, remove inline credits
List all contributors from AboutModal in Contributing section.
Remove individual credits from installation sections.

cc
2026-03-26 08:45:42 -06:00
victorrhgap e34212a5ab docs: add macOS experimental section to README
cc
2026-03-26 08:30:02 -06:00
victorrhgap 5a01840fac docs: add contributor thanks to release notes
cc
2026-03-26 00:39:19 -06:00
victorrhgap 88c352f64c fix(gentoo): use libayatana-appindicator instead of libappindicator
libappindicator:3 no longer exists in Gentoo repos. The ayatana
fork is the maintained replacement. Fixes recurring emerge failure.

cc
2026-03-26 00:00:00 -06:00
victorrhgap 1fc4a4d5a9 fix(ci): generate Manifest digests in Gentoo overlay workflow
Ebuilds without matching Manifest hashes cause 'Missing digest'
errors on emerge. Download DIST files and compute BLAKE2B/SHA512
for ebuilds, metadata.xml, and tarballs.

cc
2026-03-25 23:04:15 -06:00
victorrhgap a9ef23e4e1 docs: reorder release notes, macOS is experimental not headline
cc
2026-03-25 20:34:42 -06: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
victorrhgap d34ca6e23b chore: remove docs/superpowers from git tracking
Planning docs may contain sensitive data, gitignored permanently.

cc
2026-03-25 19:37:05 -06:00
victorrhgap 5d9d956fc1 Merge pull request #211 from vicrodh/dependabot/cargo/src-tauri/rustls-webpki-0.103.10
cc
2026-03-25 18:14:32 -06:00
victorrhgap 3dd09ea522 chore(deps): bump aws-lc-rs 1.16.1 -> 1.16.2, aws-lc-sys 0.38.0 -> 0.39.0
Fixes dependabot alerts #25 and #26 (high severity):
- CRL Distribution Point Scope Check Logic Error
- X.509 Name Constraints Bypass via Wildcard/Unicode CN

cc
2026-03-25 18:13:02 -06:00
victorrhgap 543e6cd123 fix(degraded): reduce clear timeout from 10 to 5 minutes
Qobuz issues are typically intermittent, 10 minutes was too long
to keep the degraded indicator visible after recovery.

cc
2026-03-25 17:48:03 -06:00
victorrhgap 904502c57c feat(ui): add degraded service indicator for Qobuz server issues
Track 504/server errors and show orange warning triangle in
NowPlayingBar when Qobuz is having issues. Auto-clears after
10 minutes without errors. Shows status in Settings too.

cc
2026-03-25 16:54:04 -06:00
victorrhgap cf2df33bc4 feat(offline): add manual network check button
Make NowPlayingBar offline indicator clickable to force immediate
network check. Add Check Now button in Settings offline section.

cc
2026-03-25 16:46:53 -06:00
victorrhgap a8910a66c7 feat(prefetch): use exponential backoff for cache pre-loading
Replace fixed 500ms delays with download_with_backoff in prefetch
path. Gives the same 1s/2s/4s backoff and 4th retry as playback.

cc
2026-03-25 15:35:58 -06:00
victorrhgap ead1516201 feat(settings): add quality fallback behavior dropdown
New dropdown in the Playback section lets users choose what happens
when all quality retries fail: ask (modal), always retry at lowest,
or always skip. Loaded from and persisted to the backend via
v2_get/set_quality_fallback_behavior.

cc
2026-03-25 15:30:48 -06:00
victorrhgap e966f35b30 feat(ui): wire QualityFallbackModal into global layout
Listen for 'quality-fallback-prompt' custom events dispatched by
playbackService, open the modal with track context, and handle
try-lower / skip / close actions.

cc
2026-03-25 15:29:27 -06:00
victorrhgap 3559cedeca feat(playback): handle QualityExhausted with user preference
When v2_play_track returns QualityExhausted, the service checks the
persisted fallback behavior: auto-retry at lowest quality, auto-skip,
or emit a custom event so the UI can show the QualityFallbackModal.

Also passes forceLowestQuality option through to the backend invoke.

cc
2026-03-25 15:27:29 -06:00
victorrhgap a902434411 feat(ui): add QualityFallbackModal component
Modal displayed when all quality retries are exhausted during Qobuz
streaming. Offers the user two choices: retry at lowest quality or
skip to the next track. Includes a "remember my choice" checkbox
that persists the preference via v2_set_quality_fallback_behavior.

cc
2026-03-25 15:26:39 -06:00
victorrhgap 283302f6d2 feat(i18n): add quality fallback modal and settings translations
All 5 locales: en, es, de, fr, pt.

cc
2026-03-25 15:22:58 -06:00
victorrhgap b08e5ecf02 feat(audio): exponential backoff retry with quality fallback
Replace fixed 500ms delays with 1s/2s/4s exponential backoff.
Add 4th retry attempt at fallen-back quality level.
Return QualityExhausted structured error when all attempts fail.
Add force_lowest_quality param to v2_play_track.

cc
2026-03-25 14:22:07 -06:00
victorrhgap 94518e56c2 feat(audio): add v2 commands for quality fallback behavior
v2_get_quality_fallback_behavior and v2_set_quality_fallback_behavior
to read/write the persisted user preference.

cc
2026-03-25 14:06:21 -06:00
victorrhgap 038f846884 feat(audio): add quality_fallback_behavior to audio settings
Persisted in audio_settings.db, protected by ADR-003.
Survives reset_all(), defaults to 'ask'.

cc
2026-03-25 14:03:56 -06:00
victorrhgap 5ad1179628 ci: add platform triage workflow for issue auto-assign
When a new issue selects macOS as platform, automatically labels it
platform:macos and assigns afonsojramos. Linux issues get labeled
platform:linux.

cc
2026-03-25 13:18:30 -06:00
victorrhgap 00d6d02c0d feat(issues): add platform dropdown to all issue templates
Adds Linux/macOS selection as first field in bug reports, feature
requests, and feedback forms. Adapts Linux-specific fields (DE, display
server) to indicate they are Linux-only and adds macOS options to
install method and audio backend dropdowns.

cc
2026-03-25 13:15:54 -06:00
victorrhgap ff16767fce feat(about): add afonsojramos and GwendalBeaumont to contributors
cc
2026-03-25 13:15:44 -06:00
victorrhgap da32afffee Merge pull request #208 from GwendalBeaumont/refactor/external/i18n-interpolation
refactor(i18n): replace hardcoded strings in SearchView, PlaylistDetailView, AlbumMenu

cc
2026-03-25 13:08:09 -06:00
victorrhgap 235bd08e2c fix(qconnect): tolerate missing queue_version major/minor fields
Qobuz changed their protocol to sometimes send QueueVersionRef
without major/minor populated. Our decoder treated these as
required fields, causing all cloud_type=6 messages to fail with
"missing required numeric field 'queue_version.major'".

Default to 0 when absent — matches the dev panel behavior.

cc
2026-03-24 21:14:44 -06:00
victorrhgap 39e5867a7d fix: proxy all images through reqwest to bypass WebKit TLS (#163)
When image cache is disabled or unavailable, images were returned
as original HTTPS URLs for WebKit to load directly. On AppImage
distros where GnuTLS can't find system CA certs, this fails silently.

Now all images go through reqwest (rustls, bundled CA) and are
written to temp files as file:// URLs. WebKit never needs to
resolve HTTPS for images.

cc
2026-03-24 20:35:32 -06:00
victorrhgap a25bcb0e76 fix(ci): macOS build aarch64-only, drop x86_64 cross-compile
Cross-compiling x86_64 from aarch64 fails on openssl-sys (no
cross pkg-config). Apple Silicon only — Intel Macs use Rosetta 2.

cc
2026-03-24 20:14:47 -06:00
victorrhgap a347b39e07 fix(ci): use macos-latest for both arch targets
macos-13 runner is deprecated. Use macos-latest (Apple Silicon)
with cross-compilation for x86_64 target.

cc
2026-03-24 20:04:23 -06:00
victorrhgap 84b3abc636 Revert "ci: add macOS release workflow (unsigned DMG)"
This reverts commit 0ce4cc7bc1.
2026-03-24 19:40:26 -06:00
victorrhgap 0ce4cc7bc1 ci: add macOS release workflow (unsigned DMG)
Builds DMG for both Apple Silicon (aarch64) and Intel (x86_64).
Triggered on tag push or manual dispatch. Artifacts uploaded to
GitHub Releases as pre-release.

Unsigned — users bypass Gatekeeper with right-click > Open.

cc
2026-03-24 19:39:44 -06:00
victorrhgap 052de7fb54 ci: add macOS release workflow (unsigned DMG)
Builds DMG for both Apple Silicon (aarch64) and Intel (x86_64).
Triggered on tag push or manual dispatch. Artifacts uploaded to
GitHub Releases as pre-release.

Unsigned — users bypass Gatekeeper with right-click > Open.

cc
2026-03-24 19:37:10 -06:00
victorrhgap 9f7304b35b Merge branch 'pr-181' into pre-release 2026-03-24 19:28:57 -06:00
victorrhgap badbbf2973 fix: ESC in immersive now exits fullscreen too (#202)
ESC key was calling onClose() directly, skipping the fullscreen
exit logic. Changed to handleExitImmersive() which exits fullscreen
before closing, matching the behavior of the UI close buttons.

cc
2026-03-24 19:12:21 -06:00
victorrhgap 45b3390c6d Merge branch 'pr-205' into pre-release 2026-03-24 19:09:48 -06:00
victorrhgap d27ab66595 fix: SystemTooltip wraps long text instead of overflowing (#166)
white-space: nowrap caused help tooltips to bleed outside their
container. Changed to normal with max-width 360px so technical
help text wraps properly.

cc
2026-03-24 18:59:51 -06:00
victorrhgap b826f88fad feat(hifi-wizard): non-systemd support and verify step fix
- Add Gentoo/OpenRC and Void/runit to distro selector
- All systemctl commands now adapt to selected distro init system
- Verify step warns user to close wizard before testing
- Status/restart/rollback commands are distro-aware

cc
2026-03-24 18:48:41 -06:00
victorrhgap 9a1b88e5bf fix: prevent image flicker on WebKitGTK 2.50+ (compositing layer fix)
WebKitGTK 2.50.x evicts image textures from GPU memory during
repaints triggered by hover/scroll, causing momentary placeholder
flash. Force each cached image into its own compositing layer via
will-change + translateZ(0) to prevent texture eviction.

Applied in cachedSrc action so all 18 components using it are fixed.

cc
2026-03-24 18:23:22 -06:00
victorrhgap 499f188bf8 fix: hybrid Intel+NVIDIA treated as NVIDIA-only for compositing
main.rs GPU conditions checked has_nvidia && !has_amd but not
has_intel, so hybrid laptops (Intel iGPU + NVIDIA dGPU) had
compositing and DMA-BUF disabled unnecessarily.

Also remove duplicate DMABUF/compositing logic from lib.rs that
ran before main.rs and conflicted with its GPU-aware decisions.

cc
2026-03-24 18:03:46 -06:00
victorrhgap d9ea5f96e0 fix: make diagnostics panel on-request instead of always visible
Panel is collapsed by default, loads data only when opened.

cc
2026-03-24 18:03:37 -06:00
victorrhgap 7f952b11ac feat: add system diagnostics panel to Developer Mode
Tabular view comparing saved vs runtime settings for audio,
graphics, and environment variables. Collapsible sections with
match/mismatch indicators and export to clipboard.

cc
2026-03-24 17:55:35 -06:00
victorrhgap be900ab628 feat: add v2_get_runtime_diagnostics command
Single IPC call returns saved audio/graphics/developer settings,
runtime GPU detection state, and active environment variables.

cc
2026-03-24 17:51:57 -06:00
victorrhgap 0265f32a97 docs: add 3-phase plan for diagnostics, NVIDIA defaults, setup wizard
Phase 1: Developer diagnostics tool (saved vs runtime settings)
Phase 2: GPU-aware smart defaults for NVIDIA-only Wayland
Phase 3: First-run setup wizard (Cider-style)

cc
2026-03-24 17:41:40 -06:00
victorrhgap a472930cd0 fix: respect saved graphics settings at startup
apply_linux_webkit_workarounds() was unconditionally disabling
DMABUF renderer and compositing mode, ignoring what the user
configured in Appearance > Composition settings.

Now reads graphics_settings.db and developer_settings.db at startup
(readonly, before Tauri state init) so toggles actually take effect.

- Add new_readonly() to GraphicsSettingsStore and DeveloperSettingsStore
- Hardware Acceleration ON = compositing enabled
- Force DMA-BUF toggle respected for WEBKIT_DISABLE_DMABUF_RENDERER
- Env vars still override saved settings

cc
2026-03-24 16:06:24 -06:00
victorrhgap 1a5104150a perf: batch download status checks on Home view
Replace 8+ sequential per-section IPC calls with a single batch
command. Backend reads all tracks once instead of N times.

- Add v2_check_albums_fully_cached_batch (single DB read, HashMap return)
- Remove per-section await tick() + loadAllAlbumDownloadStatuses() calls
- Single batch call at end of loadHome() after all data resolves
- Keep individual check for on-click refresh (single album)

cc
2026-03-24 15:58:24 -06:00
Victor RH ad866b191e Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/svelte-5.53.6' into pre-release 2026-03-01 08:50:41 -06:00
Victor RH 25e91425bc Merge branch 'feature/multi-account-isolation' into pre-release 2026-02-06 01:42:35 -06:00