Commit Graph
2362 Commits
Author SHA1 Message Date
vicrodh c1a67c61d5 feat(ui): resolve custom artist images in FavoritesView
Add withCustomImages() helper that overrides artist image objects
before passing to groupArtists(). All 3 call sites (alpha index,
sidepanel, virtualized grid) get custom image overrides.
2026-02-23 08:55:25 -06:00
vicrodh aac411d82f feat(ui): resolve custom artist images in HomeView
Wrap toArtistCard() image resolution with custom image store
lookup. Featured artists on home page show custom images.
2026-02-23 08:55:25 -06:00
vicrodh c4c467eecd feat(ui): resolve custom artist images in SearchView
Wrap getArtistImage() to check custom image store before
falling back to Qobuz default. All 3 call sites (most popular,
search results, virtual grid) get the override automatically.
2026-02-23 08:55:25 -06:00
vicrodh 7f17d53879 feat(app): initialize custom artist image store on login
Load all custom artist image overrides on login and clear
them on logout, alongside existing blacklist store init.
2026-02-23 08:55:25 -06:00
vicrodh 6b54db1073 feat(store): create customArtistImageStore
Centralized store for resolving custom artist image overrides
globally. Loaded on login, exposes resolveArtistImage() with
normalized name matching (handles diacritics, case differences).
2026-02-23 08:55:25 -06:00
vicrodh 7c6e07908f feat(backend): add bulk fetch for custom artist images
Add get_all_custom_artist_images() database method and
v2_library_get_all_custom_artist_images command to support
loading all custom artist image overrides at once for the
global resolution store.
2026-02-23 08:55:25 -06:00
vicrodh e9ffff53f4 feat(ui): right-click context menu to change artist image 2026-02-23 08:55:25 -06:00
vicrodh 3229640a12 fix(ui): remove round mask from lightbox, show image at natural shape 2026-02-23 08:55:25 -06:00
vicrodh 01d57ca7bb feat(backend): add remove and get custom artist image commands 2026-02-23 08:55:25 -06:00
vicrodh 98d719d833 feat(backend): resize and thumbnail custom artist images 2026-02-23 08:55:25 -06:00
vicrodh f49e5a35ec feat(ui): click album artwork to view full size 2026-02-23 08:55:25 -06:00
vicrodh 668a92b3a8 feat(ui): click artist image to view full size 2026-02-23 08:55:25 -06:00
vicrodh 8deef0be10 feat(ui): add ImageLightbox component 2026-02-23 08:55:25 -06:00
vicrodh 285421ece9 feat(auto-theme): make color swatches editable with color picker
Replace the 5 static k-means palette previews with 8 labeled, editable
swatches showing the actual applied CSS variables: Base, Surface,
Elevated, Accent, Text, Muted, Border, Danger.

Each swatch opens a native color picker on click. Changes apply
instantly to the live theme and persist to localStorage.

Remove unused ThemePalette/PaletteColor types and k-means palette
extraction from the frontend store (no longer needed since swatches
are driven by the GeneratedTheme variables directly).
2026-02-23 04:06:30 -06:00
vicrodh 0886f69cc5 feat(auto-theme): add experimental notice below detected DE line
Shows a warning-colored message below the detected desktop environment
indicating this is an experimental feature that may not match exactly.
2026-02-23 04:00:44 -06:00
vicrodh 1aeb9bf47e feat(auto-theme): read full DE color scheme for system theme
Instead of using wallpaper k-means + accent override (which produced
wrong backgrounds), the system source now reads ALL colors from the
DE config (kdeglobals for KDE, dconf hints for GNOME).

Maps Window/View/Button/Selection/Header sections directly to CSS
variables — bg-primary from Window, bg-secondary from View,
bg-tertiary from Button, accent from Selection, text from
ForegroundNormal, etc.

Adds SystemColorScheme type, get_system_color_scheme() in system.rs,
generate_theme_from_scheme() in generator.rs, and two new V2 commands:
v2_generate_theme_from_system_colors and v2_get_system_color_scheme.

Frontend tryAccentColorTheme() replaced with trySystemColorSchemeTheme()
which calls the new endpoint. Old color math helpers removed.
2026-02-23 03:51:37 -06:00
vicrodh 74d8d2d3cf fix(auto-theme): async spawn_blocking for image processing, KDE color scheme fallback
- V2 commands (generate_theme_from_image, generate_theme_from_wallpaper,
  extract_palette) now use tokio::task::spawn_blocking to avoid freezing
  the main thread during CPU-bound image decoding and k-means clustering.
  This lets the UI spinner animate properly.

- KDE accent detection now falls back to Colors:Selection DecorationFocus
  and BackgroundNormal from kdeglobals when no explicit AccentColor is set.
  This reads the actual KDE color scheme accent instead of only looking
  for the Plasma 6 custom accent field.

cc
2026-02-23 03:42:37 -06:00
vicrodh 93ff5db9a0 feat(auto-theme): add accent-first cascade, overlay spinner, and failure modal
Source options: System Colors (accent -> wallpaper fallback), Wallpaper
Sync, Custom Image. Selecting System shows fullscreen overlay while
generating. On failure: modal recommends another theme or custom image,
falls back to Dark immediately.

Store cascade logic: tryAccentColorTheme() first (with wallpaper
backgrounds + system accent override), then generateFromWallpaper(),
then throw for caller to handle.

cc
2026-02-23 03:35:12 -06:00
vicrodh 12a8744f38 feat(auto-theme): add settings UI with System theme, source picker, and palette preview
- "System" theme option in dropdown (after Dark/OLED/Light, before others)
- Selecting System triggers wallpaper-based theme generation
- Sub-controls: source picker (wallpaper/custom image), image selector
- Palette swatches preview, DE detection display, error handling
- Switching to any static theme cleanly disables auto-theme
- i18n keys added to all 4 locales (en, es, de, fr)

cc
2026-02-23 03:27:02 -06:00
vicrodh c48377b092 feat(auto-theme): add autoThemeStore with CSS variable injection and bootstrap restore
- autoThemeStore.ts: manages theme generation, CSS injection, and localStorage persistence
- Bootstrap: restoreAutoThemeVars() called before loadSavedTheme() to prevent FOUC
- data-theme="auto" prevents static CSS theme blocks from matching
- ~40 CSS variables injected at runtime via document.documentElement.style

cc
2026-02-23 03:20:59 -06:00
vicrodh 2e95c6c98a feat(auto-theme): add V2 commands for theme generation and system detection
Six new commands:
- v2_detect_desktop_environment: detect current DE
- v2_get_system_wallpaper: get wallpaper path
- v2_get_system_accent_color: get DE accent color
- v2_generate_theme_from_image: generate theme from any image
- v2_generate_theme_from_wallpaper: generate theme from system wallpaper
- v2_extract_palette: extract color palette for preview

All are pure functions (no State needed), registered in invoke_handler.

cc
2026-02-23 03:19:28 -06:00
vicrodh 1c46fde82c feat(auto-theme): add palette extraction, theme generation, and DE detection
Rust module auto_theme/ with:
- K-means clustering (k=6) on downsampled images for palette extraction
- CSS variable generator producing all ~40 required theme tokens
- WCAG AA contrast enforcement for text and accent colors
- Desktop environment detection (GNOME, KDE Plasma, COSMIC, XFCE, Cinnamon)
- Wallpaper path retrieval per DE (gsettings, Plasma config, COSMIC config)
- System accent color retrieval (GNOME 47+, KDE, COSMIC)

cc
2026-02-23 03:18:00 -06:00
vicrodh 985e673b72 feat(favorites): add genre filter to tracks tab with independent persistence 2026-02-23 02:02:31 -06:00
vicrodh faa4dd969c fix(ui): move results count to nav bar, left of filter/sort controls 2026-02-23 01:58:00 -06:00
vicrodh dc6646efbd fix(ui): prevent alpha-index from expanding to fill flex space in artist browse view 2026-02-23 01:56:17 -06:00
vicrodh 61b73147ca fix(ui): reduce results-count reserved width, fix dropdown menus clipped by nav bar 2026-02-23 01:53:17 -06:00
vicrodh 44d0794d4d fix(ui): move results count to header row right of search with reserved width 2026-02-23 01:50:29 -06:00
vicrodh 4b5649a464 fix(ui): move toolbar controls into nav bar right-aligned for all tabs 2026-02-23 01:48:07 -06:00
vicrodh 30e1e0d0d4 fix(ui): always show close button on expanded search input 2026-02-23 01:44:54 -06:00
vicrodh 627c7d403e fix(ui): move search to header row, right-aligned inline with title 2026-02-23 01:44:20 -06:00
vicrodh 1293ae7aa7 fix(ui): match play button size to secondary in favorites tracks header 2026-02-23 01:41:46 -06:00
vicrodh 79f4bea41b fix(ui): favorites header layout - title and actions inline on same row
Remove header-content wrapper so h1 and action buttons are direct
flex children of .header, placing them inline on the same row.
Remove orphaned CSS and margin-top from header-actions.
2026-02-23 01:41:04 -06:00
vicrodh 8955d90c3a refactor(favorites): remove custom icon, keep only tab order settings
Strip the customizable icon from the Favorites header (now always a
Heart icon) and remove icon/background customization sections from the
edit modal. The modal now only handles tab order reordering. Removed
dead code: resolveCustomIconSrc, customIconSrc, unused lucide imports
(Star, Folder, Library, Heart), convertFileSrc import, header-icon CSS.
2026-02-23 01:35:41 -06:00
vicrodh 4ce765d7f8 fix(immersive): add drag handle button to window controls
Add a Move icon button inside the expandable window controls group
in ImmersiveHeader. On mousedown it calls window.startDragging() to
let the user reposition the window. Cursor shows grab/grabbing.
Only available when the controls are expanded (hover), so collapsed
state has no drag zone as intended.
2026-02-23 01:03:46 -06:00
vicrodh d2f846c541 fix(ui): disable playback controls when nothing to play
Grey out shuffle, previous, play/pause, next, repeat, add-to-playlist,
and favorite buttons when no track is loaded and queue is empty.
Volume/mute controls remain always active.

Closes #103
2026-02-23 00:56:39 -06:00
vicrodh 3d2a4cbe97 fix(deep-link): robust qobuzapp:// handler across all packages
- Auto-detect installed .desktop filename (com.blitzfc.qbz.desktop,
  qbz.desktop, qbz-nix.desktop) instead of hardcoding
- Run update-desktop-database after register/deregister so xdg-open
  and browsers pick up the MIME association immediately
- Fix v2_check_qobuzapp_handler to match all known desktop filenames
- Align StartupWMClass to com.blitzfc.qbz across all packaging formats
- Add StartupNotify=true to Arch/AUR/Snap desktop files

Fixes browser URI handler not working for .deb users (Discussion #44)
2026-02-23 00:38:10 -06:00
vicrodh 7a5fe2f5ce fix(ui): keybindings settings modal z-index and 2-column layout
KeybindingsSettings (Customize Shortcuts) had z-index 1000, behind
NowPlayingBar (2001). Bumped to 3000 per ADR-003. Also widened to
660px and added 2-column grid layout with responsive fallback.

This was the actual broken modal — KeyboardShortcutsModal was already
fixed but KeybindingsSettings was missed.
2026-02-22 22:28:07 -06:00
vicrodh abc7a1a2a3 fix(ui): right-click context menu on all card components
- AlbumCard: right-click opens AlbumMenu at click position
- FavoritePlaylistCard: right-click opens menu at click position
- QobuzPlaylistCard: add right-click context menu with click positioning
- SearchPlaylistCard: add right-click context menu with click positioning
- All card menus now use floatingMenuStore for mutual exclusion
- Menu positioning uses click coordinates instead of trigger button
2026-02-22 20:17:40 -06:00
vicrodh 0ee8b9db0e feat(settings): make sync audio on startup opt-in
The reload_settings() call at bootstrap is now gated behind a new
sync_audio_on_startup setting (default OFF). Most users don't need
it; it exists for edge cases where Player::new() holds stale settings
(e.g., after Flatpak updates changing DB schema).

Adds toggle in Settings > Audio with i18n for all 4 locales.
2026-02-22 19:54:12 -06:00
vicrodh 0dea116c69 fix(audio): move reload_settings from per-play to once at bootstrap
reload_settings() was running before every v2_play_track call, which
is excessive and can overwrite correct in-memory audio settings with
stale DB values (especially in Flatpak where DB sync timing differs).

Moved to runtime_bootstrap Step 6, after session activation when
per-user stores are ready. v2_reinit_audio_device still reloads on
explicit device changes.
2026-02-22 19:48:32 -06:00
vicrodh 33e8d34bef fix(i18n): add missing diacritics in es, fr, de locales 2026-02-22 18:45:14 -06:00
vicrodh e811afe27e feat(ui): add right-click context menu to album and playlist cards 2026-02-22 18:13:11 -06:00
vicrodh d5203d498a feat(favorites): add random album and artist buttons 2026-02-22 18:12:20 -06:00
vicrodh 6229fa8400 feat(ui): add loading spinner to radio buttons 2026-02-22 18:09:07 -06:00
vicrodh 6c1979b7ea fix(session): persist empty queue state on clear 2026-02-22 18:05:18 -06:00
vicrodh 643bb20c2e feat(settings): add opt-in session persistence toggle 2026-02-22 18:05:02 -06:00
vicrodh d7213e06a4 fix(runtime): wait for CoreBridge init before bootstrap auth 2026-02-22 17:59:22 -06:00
vicrodh 2e51c2e1f2 fix(ui): favorites albums and artists height overflow behind player 2026-02-22 17:58:58 -06:00
vicrodh 37cca5dccf fix(ui): render sanitized HTML in playlist descriptions 2026-02-22 17:58:41 -06:00
vicrodh 66d25b773b fix(ui): keybindings modal z-index and 2-column layout 2026-02-22 17:57:46 -06:00