Commit Graph
67 Commits
Author SHA1 Message Date
vicrodh d8f43cc4a3 docs(readme): qbzd and kiosk sections, drop diagram and star history
Promote the headless daemon to its own section with a screenshot and the
wiki link, add a Kiosk Mode section for Raspberry screens and handheld
consoles, remove the mermaid architecture diagram and the star-history
chart.

cc
2026-07-23 13:07:06 -06:00
vicrodh b6f5631f51 refactor(slint): publish nav-tab menus into HeaderMenuState global
The four header nav tabs each owned a PopupWindow for their dropdown.
A PopupWindow grabs the pointer while open, so hovering a sibling tab
delivered no hover event and the menus could not be hover-switched.

Add a HeaderMenuState global (open-index, anchor-x, items, home-item)
and the NavMenuEntry struct to state.slint. Tabs now write their
identity into the global on hover/click instead of showing a popup;
the menu panel itself will be rendered by a separate in-window overlay.
Move NavMenuItem into its own file so the overlay can reuse it.

cc
2026-05-19 04:37:26 -06:00
vicrodh 2ebb874f43 fix(icons): improve Linux tray display and refresh assets (#362)
Returning an empty `icon_name` in `tray_linux_ksni.rs` forces SNI
panels (e.g., KDE Plasma) to render the explicit `IconPixmap` data.
This prevents panels from incorrectly resolving the full-color app icon
from the system theme instead of the intended monochrome tray glyph.

Also updates `src-tauri/icons/icon-symbolic.svg` and regenerates
all `tray-dark-*.png` and `tray-light-*.png` assets.
Adds `static/logo.svg` as the main application logo.
2026-04-28 07:37:48 -06:00
vicrodh 75efe7f8e9 feat(ui): add DjIcon component
Inlined SVG component for the upcoming track-shuffle mix button.
Uses fill="currentColor" so it inherits theme color. The source
SVG (static/dj-1.svg) is kept as a reference asset.

cc
2026-04-25 05:08:05 -06:00
vicrodh 4ef7242e4c style(sidebar): accent-tint parent icons and add glyphs to section headers
Addresses three visual gaps in the sidebar after the earlier brightening
pass:

1. My QBZ parent — icon was inheriting the row's text-muted color
   because the custom .icon-container had no color rule of its own. Now
   the icon container sets accent-primary and the parent row's label
   uses text-primary, matching NavigationItem.

2. Folder rows — the folder glyphs were still muted because .folder-
   header / .collapsed-folder-btn / .folder-popover-header all carried
   text-muted as their base color, and FolderGlyph paints via
   currentColor. Switched each surface's base color to accent-primary
   and added explicit text-primary overrides on the actual label spans
   (.folder-name, the popover header span) so the labels stay bright.

3. Section headers — PLAYLISTS had no icon at all and Library only had
   a chevron. Added glyphs via a new .section-header-with-icon class
   that runs accent-primary at the container level (so the SVG picks
   up the tint) with a nested span override for the uppercase label.
   PLAYLISTS uses a new PlaylistsGlyph.svelte (user-supplied
   list-music-player SVG, checked into static/). Library uses
   lucide-svelte LibraryBig for now — swap to a custom SVG later if
   desired.

cc
2026-04-21 09:48:01 -06:00
vicrodh d71bf2334d style(sidebar): replace outline folder icons with solid two-state glyphs
Swaps the outline lucide Folder / FolderPlus icons throughout the
sidebar for the user-supplied solid SVGs, with a state-aware variant
on the folder header so expanded folders actually *look* open.

New component: icons/FolderGlyph.svelte — a single file with three
variants (closed / open / new), fill="currentColor" so it picks up the
surrounding --accent-primary color from the nav item.

Placements:
  * Folder header (collapsible tree node): open variant when expanded,
    closed when not. Reinforces the chevron rotation with a second
    visual cue.
  * Collapsed-sidebar folder button: closed (there's no expand state
    when the whole sidebar is narrow).
  * "Move to folder" context-menu entries: closed (list items).
  * Folder popover header (opened from the collapsed-sidebar button):
    open (the popover IS showing the folder's contents).
  * "New Folder" menu item: the new variant (with the + indicator
    baked into the glyph).

Source SVGs are checked into static/ for traceability.

cc
2026-04-21 09:38:51 -06:00
vicrodh b244d36b5a feat(assets): add monochrome hdd.svg for local-source indicators
Used as a CSS mask in DiscographyBuilder and Collection/Mixtape detail
to render the "local files" source icon tinted to the accent color.

cc
2026-04-19 21:14:12 -06:00
vicrodh a4efbf5cea chore(assets): add my-qbz.svg default icon
Referenced by the new My QBZ collapsible nav section (commit 8466a619)
but the asset file itself was untracked — this ensures it ships with
the feature branch for clean builds.

cc
2026-04-18 20:01:13 -06:00
vicrodh c2eabdcb51 fix(sidebar): use CSS mask for Library nav icon with correct monochrome SVG
Replaces /music-library.svg references in Sidebar and TitleBarNav with
/music-library-2.svg (the corrected all-black monochrome asset the user
provided) and swaps the <img> rendering for a <span> with CSS mask so the
icon inherits the theme's text color — same pattern now used for My QBZ,
cassette, collection, and the existing plex-mono icons.

cc
2026-04-18 20:00:59 -06:00
vicrodh 17e2f711e3 refactor(ui): rename user-facing "Favorites" to "Library"
Aligns with Qobuz's own Library rename in their mobile and desktop
beta apps. Command names, store names, i18n keys, file names, and
internal route identifiers are all unchanged — this is strictly a
user-visible text + icon rewrite.

- Sidebar / TitleBar nav Favorites entry uses /static/music-library.svg
  instead of the lucide Heart
- Artist and label favorite buttons use /static/user-add.svg (albums
  and tracks keep the Heart affordance)
- 5 locale files: all values containing "Favorites" / "Favoritos" /
  "Favoriten" / "Favoris" / "Favoritos" rewritten to "Library" and
  locale-appropriate equivalents (Biblioteca / Bibliothek /
  Bibliothèque / biblioteca)
- "Add to Favorites" / "Remove from Favorites" buttons and toasts
  renamed to "Add to Library" / "Remove from Library"
- Hardcoded title= tooltip strings on track Heart buttons replaced
  with $t() calls

cc
2026-04-18 19:50:28 -06:00
vicrodh e5fbdc19fe chore(assets): add cassette and collection SVG icons
Provided by user for the upcoming Mixtapes & Collections feature (spec
qbz-nix-docs/specs/2026-04-18-mixtapes-collections-design.md, §5.5).
Used for sidebar nav items and detail-view headers.

cc
2026-04-18 16:37:36 -06:00
vicrodh 1fe7d44311 fix(branding): resize icon to fill canvas + add blue edge rim
Tighten the viewBox so the vinyl fills ~97% of the canvas (matching
Steam/Chrome/Papirus sizing). Add a #3968be stroke rim around the
vinyl edge so the icon remains visible on pure-black backgrounds.
Include a subtle radial inner-light from top-left for depth.

Also adds 512x512.png for Flathub compatibility.

Regenerate all PNG exports: Tauri standard sizes, Windows Store
squares, ICO, Android mipmaps, and static logos.

cc
2026-04-15 20:22:00 -06:00
vicrodh 1cb8d2c305 feat(branding): refresh app icon, tray theming, and login branding
Apply the new matte-vinyl QBZ logo (Flathub-compliant: square canvas,
74% footprint, no baked shadows/gloss) across every icon asset: Tauri
standard sizes, Windows Store squares, Android icons and mipmaps,
static/, README, and the tray.

Ship two tray variants (black and white glyphs) and pick the right
one at runtime by reading GNOME color-scheme, GTK settings, and KDE
kdeglobals. Defaults to light-theme glyph when nothing matches.

Login screen: logo 80 -> 175 px with a subtle var(--text-muted)
drop-shadow using color-mix() for alpha, plus QBZ and "Qobuz(TM)
Player" under the icon. Update app.tagline i18n accordingly.

cc
2026-04-15 03:55:28 -06:00
vicrodh 7425d34e27 chore(assets): add laurel wreath SVG used by AwardView placeholder
Referenced by AwardView hero / Other Awards mini-card / AlbumDetailView
sidebar award avatar in commit d719fb67 but the asset itself was never
tracked. Ships the SVG so the placeholder renders after a clean clone.

cc
2026-04-14 17:33:05 -06:00
vicrodh 35d0ff39f0 chore: remove unused github.svg (replaced by simple-icons in PR #237)
cc
2026-03-31 20:27:29 -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
vicrodh 819c1ab03e add static assets: compass icon and radio card shadow overlay 2026-03-10 01:50:27 -06:00
vicrodh 05e5b3f811 perf: replace JetBrains Mono with system monospace
Use Courier New/system monospace for --font-mono instead of
bundling JetBrains Mono (270KB). Only used for log output
and duration displays where a custom font adds no value.
2026-03-09 10:59:03 -06:00
vicrodh fe719a657d perf: self-host all fonts, remove Google Fonts CDN dependency
Remove @import for fonts.googleapis.com. Self-host JetBrains Mono,
Oswald, and LINE Seed JP with @font-face declarations. App now works
fully offline without external font requests.
2026-03-09 10:31:48 -06:00
vicrodh 5b9f5a75c2 feat(ui): add explicit content badge across entire app
Display parental_warning badge (E icon) next to track titles in all
views: TrackRow, QueuePanel, NowPlayingBar, ImmersivePlayer with all
13 visualizer panels, MiniPlayer surfaces, and AlbumDetailView.

Propagate parental_warning field through the full data chain from
Rust backend (qbz-models, queue, commands_v2, session_store, API
server) to frontend stores, adapters, and UI components. Badge uses
CSS mask technique with explicit.svg for theme compatibility.
2026-03-06 08:48:51 -06:00
vicrodh 3c50c1c14e feat(immersive): replace Tunnel visualizer icon with cube SVG 2026-03-05 11:12:04 -06:00
vicrodh 5492e8115e feat(immersive): refine neon and tunnel panel visuals
cx
2026-03-02 00:50:45 -06:00
vicrodh a11826e912 feat: add booklet download button, remove pdfjs-dist dependency
- Add save/download button to booklet toolbar with native file dialog
- Add v2_booklet_save command to copy PDF to user-chosen location
- Remove pdfjs-dist npm package (replaced by MuPDF backend)
- Delete static/pdfjs/ files (~1.9MB: worker, WASM decoders, fallbacks)
- Add bookletDownload i18n keys to all 4 locales
2026-02-26 16:50:59 -06:00
vicrodh c77ca7efaf fix: serve pdfjs worker from static/ for proper WASM resolution
The worker was loaded via Vite's blob: URL transform, which
prevented it from resolving sibling WASM files (openjpeg.wasm,
jbig2.wasm). Now the worker is served from static/pdfjs/ as a
real HTTP resource alongside the WASM files, so JPEG 2000 and
JBIG2 decoders initialize correctly.

Removed disableWorker hack — worker runs properly now.
2026-02-26 15:24:31 -06:00
vicrodh c61b923c8d fix: provide pdfjs WASM files for JPEG 2000 decoding in booklets
PDF booklets use JPEG 2000 images which require OpenJPEG WASM.
Copy pdfjs-dist WASM files to static/pdfjs/ so they are served
at a known URL, and set wasmUrl parameter on getDocument().
2026-02-26 14:56:54 -06:00
vicrodh cd57d37e7a feat(settings): add font family selector in Appearance
- Add 4 bundled fonts: Montserrat, Noto Sans, Source Sans 3, plus
  existing LINE Seed JP (default) and System fallback
- Font selector dropdown in Settings > Appearance, after Language
- Persisted in localStorage, applied on app bootstrap via data-font
  attribute on <html> which overrides --font-sans CSS variable
- @font-face declarations for variable font files in static/fonts/
- i18n key "fontFamily" added to all 4 locales
2026-02-20 18:13:57 -06:00
vicrodh 5475ea0095 style: replace mix videos with CSS gradients, remove nav buttons
Replaced video backgrounds with layered radial/linear CSS gradients
matching the iOS Qobuz style. DailyQ uses gold/amber tones, WeeklyQ
uses purple/lilac. Cards overlay "qobuz" badge and mix name on the
gradient. Removed HorizontalScrollRow wrapper since only two cards
exist. Deleted video assets from static/video/.
2026-02-20 01:01:12 -06:00
vicrodh 8aa9c472fa feat(dailyq): revamp DailyQ/WeeklyQ views and add video assets
Redesigned DynamicSuggestView and WeeklySuggestView with updated
VirtualizedTrackList. Added looping video backgrounds for mix cards.
2026-02-20 00:54:45 -06:00
vicrodh 228563454b feat(plex): checkpoint plex lan integration and quality sync
cx
2026-02-09 01:28:11 -06:00
vicrodh 00d0ce7835 feat(ui): add normalization toggle to player bar
Adds 3-state normalization icon between fullscreen and volume controls.
Uses mask-image SVGs for theme-compatible coloring. Reduces song card
min-width by 72px to accommodate the new control.
2026-02-07 22:55:18 -06:00
vicrodh 61b4c38ea4 chore: update logo 2026-02-04 18:53:50 -06:00
vicrodh eaed5b3c9e refactor(artist): improve hide artist button
- Hide button only shows when content filtering is enabled
- Use custom blind-eye.svg icon
- Remove border for cleaner look
- Banner also conditional on filtering being enabled

cc
2026-02-04 14:58:06 -06:00
vicrodh 8ef38c67e0 feat(dac-wizard): redesign welcome step and fix stepper navigation
Welcome step changes:
- Add comprehensive disclaimer with bullet points
- Add system requirements caveats (custom configs, manual mods, etc.)
- Add recovery information
- Update translations for EN/ES/FR/DE

Bug fixes:
- Fix stepper not updating when navigating backwards
  (current step now always shows as 'active')

UI changes:
- Replace Wand2 icon with gandalf.svg for DAC wizard button
2026-02-03 02:59:34 -06:00
vicrodh 2fe0efc3d4 Fix vinyl rotation: 33⅓ RPM, concentric, no Y-axis movement
- Set rotation speed to 33.333 RPM (0.0582 rad/frame at 60fps)
- Remove Y-axis parallax from vinyl position (stays centered)
- Remove Y parallax from shader for perfectly concentric rotation
- Add mipmaps and trilinear filtering for anti-aliasing
- Enable anisotropic filtering when available
2026-02-01 14:22:56 -06:00
vicrodh 68b863ea64 Extreme horizontal parallax and use PNG texture
- Use PNG instead of SVG for better WebGL compatibility
- Extreme horizontal parallax: cover 200px, vinyl 120px
- Reduced vertical parallax for subtle depth
- Shader parallax: 0.15 horizontal, 0.05 vertical
- Disc appears to slide out of sleeve with minimal mouse movement
2026-02-01 14:14:02 -06:00
vicrodh 6265e685ea Update logo and regenerate all app icons
- Updated qbz-logo.svg and qbz-logo.png
- Added qbz-vinyl-v3.svg for VinylPanel
- Regenerated all Tauri icons from new logo
- Updated Android icons and favicon
2026-02-01 14:09:57 -06:00
vicrodh 600a33026a feat(immersive): add infinite play button to player controls 2026-02-01 08:44:20 -06:00
vicrodh ed5e7d13cf Fix radio glyph z-index on collage overlay 2026-02-01 07:50:24 -06:00
vicrodh 2c389408d0 Add maximize/restore/minimize buttons and QualityBadge placement
Window controls:
- Maximize button shows restore icon when maximized
- Add minimize button
- Button order: Fullscreen | Maximize/Restore | Minimize | Exit | Close

QualityBadge placement:
- Coverflow: below album name
- Split views (Lyrics/TrackInfo/Suggestions/Queue): below album name
- Added album name display in split view

Layout improvements:
- Panel section max-height 80vh
- Lyrics scrollbar only visible on hover
- Content vertically centered with artwork
2026-02-01 07:44:18 -06:00
vicrodh e1cd13bd19 Add expandable window controls and fullscreen support
- Add expandable window controls in header (hover to expand)
  - Fullscreen toggle (F11)
  - Exit immersive (Esc)
  - Close app
- Move Repeat button to left group: Fav | Shuffle | Repeat
- Remove QualityBadge from player controls
- Add F11 keyboard shortcut for fullscreen toggle
- Use Tauri window API for fullscreen functionality
2026-02-01 07:22:03 -06:00
vicrodh 14f0cae1c1 feat(suggestions): major UX overhaul with popular tracks fallback
Backend:
- Add get_artist_tracks command for fetching artist's popular tracks

Frontend:
- Fallback to artist's popular tracks when tracks_appears_on is sparse
- Remove card hover movement, only image moves up on hover
- Add hover overlay with (add to queue) (play) (play next) buttons
- Use playlist.svg icon for playlist cards and glyph
- Radio glyph shown by default, replaced by action buttons on hover
- Fix icon sizes: QBZ (22px) vs Qobuz (18px) for visual balance
- Track playlist.svg asset
2026-01-31 14:48:26 -06:00
vicrodh 96b0d12bfe style(LocalLibrary): homogenize filter dropdown and artist alpha-index
- Reduce filter panel text sizes from 13px to 12px for consistency
- Update artist alpha-index to use same styling as albums/tracks tabs
- Replace boxed buttons with clean text-only alpha letters
2026-01-29 21:36:16 -06:00
vicrodh af55c9a0fa chore: update android icons in static folder (UserCard, AboutModal) 2026-01-29 08:57:03 -06:00
vicrodh 56faddf2dc chore: update app logo to v3
New logo design with vinyl/gear motif, replacing old GPT-generated logo.
Updated all icon sizes for Tauri, Windows Store, favicon, and static assets.
2026-01-29 01:22:05 -06:00
vicrodh 5b380ba7da Fix sticky header gap and scrollbar layout shift
- Change overflow-y to scroll to always reserve scrollbar space
- Fix sticky header top position to -24px to eliminate gap with window edge
- Add proper padding-top compensation when scrolled
2026-01-28 18:31:04 -06:00
vicrodh e8f0c96ccc feat(library): add source badge to album cards in Local Library
Albums now show a small badge indicating their source:
- HardDrive icon for local files (source='user')
- Qobuz logo for offline cached content (source='qobuz_download')

Badge appears in bottom-right corner of album artwork.
2026-01-28 02:40:00 -06:00
vicrodh 92d601a35b feat(ui): add LocalLibrary metadata editor modal
cx
2026-01-26 13:25:00 -06:00
vicrodh 7ee12ea1b2 feat(cast): show cast badge and DLNA/Cast icon in AudioOutputBadges
- Add cast-aware badge that shows protocol name (DLNA/CAST/AIR)
- Show protocol-specific SVG icons in tooltip (dlna.svg, cast_audio.svg)
- Hide DAC passthrough and exclusive mode badges when casting
- Stop hardware polling when casting to avoid misleading info
- Add purple theme styling for cast badge consistent with cast UI

cpvsc
2026-01-26 10:16:39 -06:00
vicrodh 8271cb2436 fix(musicbrainz): don't separate members by ended status
- All band members go to single 'Members' list
- Show ended status with muted color
- Tooltip shows roles + period (e.g. 'guitar (1981 - 2003)')
- Remove separate 'Former Members' section

cc
2026-01-25 20:38:44 -06:00
vicrodh 75060305f3 Disable performer search links until MusicBrainz integration
Keep the onPerformerSearch infrastructure in TrackInfoModal and
AlbumCreditsModal but don't pass the prop. Performer names are
now plain text. Re-enable when MusicBrainz allows precise lookups.

Also fixes: sticky tabs in AlbumCreditsModal now work correctly.
2026-01-25 04:28:37 -06:00