Commit Graph
7005 Commits
Author SHA1 Message Date
vicrodh 0acfb5343b fix(cast): keep Chromecast session alive 2026-01-12 14:26:12 -06:00
vicrodh 7287da5b27 docs: update README and add AUR automation
- Add installation instructions (AUR, Flatpak, AppImage)
- Document all API keys (Last.fm, Discogs, Spotify, Tidal)
- Add playlist import feature documentation
- Update project structure
- Add PKGBUILD for qbz-bin AUR package
- Add workflow to auto-update AUR on release
- Update .env.example with Spotify/Tidal variables
2026-01-12 14:23:16 -06:00
vicrodh 1b6c895f62 fix(cast): route playback controls to cast devices 2026-01-12 14:14:32 -06:00
vicrodh 39f6907fc1 fix(cast): use target-local IP for media server 2026-01-12 13:56:33 -06:00
vicrodh 39acb0b59e fix(flatpak): use GNOME SDK 48 with manual Node/Rust install
- Switch to GNOME SDK 48 which includes webkit2gtk-4.1
- Install Node.js 20 LTS directly from tarball (no SDK extension needed)
- Install Rust via rustup for latest stable version
- Add flatpak build directories to .gitignore
2026-01-12 13:21:28 -06:00
vicrodh c762e91437 fix(player): avoid symphonia track borrow 2026-01-12 13:14:10 -06:00
vicrodh be28ab1396 fix(library): allow local artwork paths 2026-01-12 13:05:04 -06:00
vicrodh 3f13212978 fix(player): decode alac via symphonia 2026-01-12 13:04:45 -06:00
vicrodh 0c456d4ae3 fix(player): avoid moved mp4 hint 2026-01-12 12:44:37 -06:00
vicrodh 32ac732b7d fix(flatpak): use rustup to install latest Rust in SDK 23.08
SDK 24.08 doesn't have javascriptcoregtk-4.1 (uses webkit 6.0).
SDK 23.08 has Rust 1.81 which doesn't support edition2024.
Solution: use SDK 23.08 with webkit2gtk 4.1 but install Rust via rustup.
2026-01-12 12:40:03 -06:00
vicrodh 6adb979e3d fix(flatpak): upgrade to SDK 24.08 for Rust 2024 edition support
The zbus 5.x crate requires Rust edition2024 which needs Rust 1.85+.
SDK 23.08 only has Rust 1.81. Upgrade to 24.08 which has a newer Rust.
Also upgrade node extension from node20 to node22.
2026-01-12 12:31:41 -06:00
vicrodh 9bcc4e2888 fix(asset): allow home paths for artwork 2026-01-12 12:30:37 -06:00
vicrodh a6e7a0ca6a fix(player): add mp4 decode fallback 2026-01-12 12:30:23 -06:00
vicrodh 7f3055ca02 fix(flatpak): use cargo build instead of tauri CLI
The flatpak SDK's tauri-cli version doesn't support --bundles none.
Use cargo build --release directly to build only the binary.
2026-01-12 12:25:36 -06:00
vicrodh 520370eedc fix(flatpak): remove invalid --allow-network flag from workflow
Network access is now enabled via build-args in the flatpak manifest.
2026-01-12 12:19:18 -06:00
vicrodh 5383a5fcee fix(flatpak): enable network access during build
Add build-args with --share=network to allow npm ci to fetch packages
during flatpak build process.
2026-01-12 12:15:14 -06:00
vicrodh 4229c5385a fix(flatpak): enable network access for npm during build 2026-01-12 12:04:04 -06:00
vicrodh d2b219ea1d fix: CI workflow failures
Linux workflow:
- Remove xdg-portal feature from tauri-plugin-dialog to fix ashpd/zbus version incompatibility
- The ashpd 0.11.0 crate has breaking changes with zbus 5.x

Flatpak workflow:
- Use build-options.append-path instead of shell export to properly set PATH for SDK extensions
- This ensures npm/rust binaries are available in all build commands
2026-01-12 11:55:04 -06:00
vicrodh eefec87d91 feat: add API Keys settings section for user-provided credentials
- Add api_keys module with store for user-provided credentials (Spotify, Tidal, Discogs)
- Add commands to get/set/clear credentials for each provider
- Update providers to check user credentials first (priority: user > embedded > env)
- Add collapsible API Keys section to SettingsView
- Show status badges (Active, Custom, Not configured) for each provider
- Store user credentials in localStorage with backend sync
2026-01-12 11:52:18 -06:00
vicrodh 3e58803962 feat(build): embed API credentials at compile time
- Add option_env! for Discogs, Spotify, Tidal credentials
- Credentials embedded in binary during CI build
- Falls back to runtime env vars for development/user override
- Add secrets to GitHub Actions workflows for Linux and Flatpak builds
- Fix Linux build: add libasound2-dev, libssl-dev
- Fix Flatpak build: use --user flag for flatpak operations
2026-01-12 11:38:11 -06:00
vicrodh a591579c23 fix(ci): add libasound2-dev and libssl-dev for Linux build
alsa-sys crate requires ALSA development headers.
openssl-sys may need SSL headers too.
2026-01-12 11:24:09 -06:00
vicrodh 1b42ce0751 fix(ci): use --user flag for flatpak operations in CI
GitHub Actions runners don't allow system-wide flatpak operations.
Use --user flag for remote-add, install, and flatpak-builder.
2026-01-12 11:19:40 -06:00
vicrodh b8dac90c2a chore(release): sync version from tag 2026-01-12 11:14:15 -06:00
vicrodh 5eac9676de chore(packaging): add linux workflows and manifests 2026-01-12 11:14:15 -06:00
vicrodh ac35875351 docs: update roadmap and readme for casting completion
- Mark DLNA/Chromecast casting as complete in ROADMAP
- Note AirPlay as deferred (no Rust RAOP library)
- Add Network Casting section to README features
- Add cast/ module to project structure
- Update v1.0 launch status: all 6 items complete
2026-01-12 11:13:45 -06:00
vicrodh 7503ba4730 fix(settings): add scrollbar to SettingsView
- Add height: 100% and overflow-y: auto for scrolling
- Add consistent scrollbar styling
- Add proper padding for scrollbar area
2026-01-12 11:05:09 -06:00
vicrodh 21582315cc feat: wire save queue as playlist, disable AirPlay backend
- Add handleSaveQueueAsPlaylist() to collect queue track IDs
- Wire QueuePanel "Save as Playlist" button to open playlist modal
- Comment out AirPlay commands in lib.rs (RAOP not implemented)
- Comment out AirPlay state initialization
- Move documentation files to qbz-nix-docs/ directory

AirPlay research concluded no viable Rust RAOP library exists.
Feature deferred until custom implementation or library emerges.
See qbz-nix-docs/AIRPLAY_IMPLEMENTATION_STATUS.md for details.
2026-01-12 11:00:02 -06:00
vicrodh 9fda678b61 feat(artist): add live albums section 2026-01-12 10:52:00 -06:00
vicrodh 97193c8ce2 Hide AirPlay from UI until RAOP streaming is implemented
- Remove AirPlay tab from CastPicker (keep code for future)
- Disable AirPlay discovery/polling to reduce network traffic
- Add comprehensive technical brief at docs/AIRPLAY_IMPLEMENTATION_STATUS.md
  documenting what's complete, what's missing, and potential solutions

AirPlay discovery code is preserved and working - only the UI and
network calls are disabled. Can be re-enabled once RAOP sender is implemented.
2026-01-12 10:31:06 -06:00
vicrodh 1ed09acda3 chore(release): sync version from tag 2026-01-12 10:16:06 -06:00
vicrodh 1ac6d15551 Implement Chromecast frontend and DLNA AVTransport casting
Frontend:
- Add castStore for managing cast state (connect, disconnect, play, pause, etc)
- Update CastPicker to use castStore, show connected device banner with disconnect
- Wire isCastConnected to NowPlayingBar and ExpandedPlayer for visual indicator
- Modify playbackService to cast when connected instead of local playback

DLNA Backend:
- Implement full AVTransport SOAP client with:
  - SetAVTransportURI with DIDL-Lite metadata
  - Play, Pause, Stop, Seek actions
  - RenderingControl SetVolume
- Add dlna_play_track command that fetches stream, downloads audio, and serves via media server
- Share media server between Chromecast and DLNA
2026-01-12 10:11:09 -06:00
vicrodh 13af89753d chore(packaging): add linux workflows and manifests 2026-01-12 10:09:39 -06:00
vicrodh a4c09041a4 Add ALSA error auto-recovery with startup retry
- Add stream_error flag to SharedState for tracking audio errors
- Add startup retry logic (5 attempts, 500ms delay) for audio init
- Auto-reinit audio device when sink creation fails 3+ times
- Handles PipeWire/ALSA not ready at app launch scenario
2026-01-12 09:42:40 -06:00
vicrodh d515ac905f refactor(miniplayer): remove pin button, shadow, make artwork clickable
- Remove pin button and related code (didn't work properly)
- Remove shadow from miniplayer frame
- Remove padding/border-radius for cleaner look
- Make artwork clickable (for future view mode switching)
- Move drag handler to top-section, artwork has pointer cursor
2026-01-12 09:30:04 -06:00
vicrodh e4483b4afa fix(session): fetch track details on restore for album/artist links
- Fetch full track info from Qobuz API when restoring session
- Populate albumId and artistId for working album/artist links
- Show correct quality badge (bitDepth/sampleRate) instead of placeholder
- Fallback to cached data if API call fails
2026-01-12 09:16:16 -06:00
vicrodh 2c40769c7d fix(miniplayer): size race condition and system title bar on restore
- Add 50ms delay after setMinSize before setSize to prevent race condition
- Remove setDecorations(true) on restore - app uses custom title bar (CSD)
- Keep decorations: false throughout miniplayer mode transitions
2026-01-12 09:09:41 -06:00
vicrodh e93144e5ef feat(toast): buffering toast with shimmer effect, persistent until loaded
- Add 'buffering' toast type that doesn't auto-hide
- Add shimmer animation to "Buffering" text
- Add spinning loader icon for buffering state
- Toast shows "Buffering... [track name]" format
- Dismiss buffering toast when track loads or on error
- Remove callback pattern, use toastStore directly in services

fix(artwork): show empty placeholder when no artwork available

- NowPlayingBar shows empty placeholder instead of Play icon
- Miniplayer shows empty placeholder instead of Play icon
- Prevents showing incorrect CD placeholder on session restore
2026-01-12 09:06:58 -06:00
vicrodh 434f8d8a67 refactor(miniplayer): new layout matching user mockup
- Top section: artwork (square) + track info with restore button
- Track info shows "Artist — Album" format
- Full-width seek bar in middle
- Bottom: media controls left, window controls right (queue, pin)
2026-01-12 08:59:50 -06:00
vicrodh 5ebbcaca0b fix(miniplayer): restore button, resizable window, smaller cover art
- Move drag handler to artwork-section and track-info only, not parent
- Buttons in window-controls and controls-row now receive clicks
- Enable window resizing in miniplayer mode
- Reduce cover art width from 180px to 110px (~60% of original)
2026-01-12 08:49:53 -06:00
vicrodh 0aeb4fbbcc fix: MiniPlayer size 400x200, queue state null check, UI adjustments
- Changed dimensions to 400x200
- Reduced shadow area padding from 8px to 4px
- Added 6px margin around album art
- Fixed TypeError on qState.tracks.length with null checks
- Increased font sizes and control button sizes for larger window
2026-01-12 08:45:57 -06:00
vicrodh b186119221 fix: MiniPlayer size - setMinSize before setSize to bypass 800x600 minimum
- Added core:window:allow-set-min-size permission
- Call setMinSize(300x140) before setSize to allow smaller window
- Restore original minSize (800x600) when exiting miniplayer
- Added more console logs for debugging
2026-01-12 08:40:30 -06:00
vicrodh dc2c4237e6 fix: MiniPlayer button clicks, 300px width, 8px margin, transparency
- Stop event propagation on all buttons to prevent drag capture
- Reduce window size to 300x140px
- Increase margin to 8px
- Enable window transparency in tauri.conf.json
- Compact UI for smaller size (smaller artwork, tighter controls)
2026-01-12 08:36:01 -06:00
vicrodh 2278d9b90e fix: MiniPlayer restore using localStorage and add 4px margin frame
- Use localStorage to persist original window state across navigation
- Add 4px margin frame around the player with rounded corners
- Darker background (#0f0f12) visible in the margin
- Box shadow for depth effect
2026-01-12 08:31:22 -06:00
vicrodh 0146852870 fix: MiniPlayer layout background color 2026-01-12 08:19:41 -06:00
vicrodh 86af410ab0 fix: MiniPlayer restore button, seekbar updates, and UI improvements
- Removed isMiniplayerMode guards that prevented restore
- Added startPolling/stopPolling for seekbar to update properly
- Removed border-radius to fix white corners issue
- Added queue button with track count badge
- Simplified CSS to solid background color
2026-01-12 08:19:27 -06:00
vicrodh 645fe8bb4e fix: Add missing window permissions for MiniPlayer resize operations 2026-01-12 07:51:42 -06:00
vicrodh 6d41741f76 feat: Redesign MiniPlayer to replace main window temporarily
- MiniPlayer now resizes the main window instead of creating a separate floating window
- Cider-inspired UI with large album art, track info, full playback controls
- Progress bar with current/remaining time display
- Shuffle, repeat, volume controls integrated
- Pin/restore buttons to control always-on-top and return to main view
- Fixed tray icon to use transparent PNG from static/icons
2026-01-12 07:28:14 -06:00
vicrodh 0a3ced23bf fix: add webview permissions for MiniPlayer window creation 2026-01-12 07:19:22 -06:00
vicrodh db1baa53ac docs: mark MiniPlayer as completed 2026-01-12 02:26:57 -06:00
vicrodh 79b030f8ee feat: add MiniPlayer floating window
- Create miniplayerService.ts for window management
- Add /miniplayer route with compact player UI
- Sync playback state from main window via events
- MiniPlayer features:
  - Draggable window (decorations disabled)
  - Always-on-top toggle (pin button)
  - Album art, track title, artist
  - Play/Pause, Next, Previous controls
  - Progress bar
  - Close button (hides window)
- Add PictureInPicture2 button to NowPlayingBar
- State synced via emitTo('miniplayer', ...) events
2026-01-12 02:26:29 -06:00