commits
Replace previous_index with current_scrobble_track and a
scrobbled_tracks HashSet. Monitor playback progress and spawn a scrobble
when elapsed/length >= 40% (and length > 30s). Use cloned track IDs to
avoid duplicate scrobbles and reset monitoring on track change or when
no track is playing. Clean up ffi import grouping.
Place the generated DMG in the repository root so the release upload
step can find it at the expected path. Also commit an updated Xcode user
interface state file
Prefix the Rockbox DMG filename with macos/ so it's uploaded under a
macos directory in the release assets.
Also commit the modified Xcode UserInterfaceState.xcuserstate workspace
user state file (IDE settings)
Create 'clear' CLI subcommand to remove Rockbox playlist and resume
files in ~/.config/rockbox.org (.playlist_control,
.playlist_control.old, .resume.cfg, .resume.cfg.new). Also apply
formatting and minor refactors to generated gRPC client/server code in
cli/src/api/*.
Integrate MPRemoteCommandCenter via a new MediaControlsManager. Wire
PlayerState to handle play/pause/next/previous/seek commands and call
updateNowPlayingInfo on track or playback status changes. Add async
artwork loading for Now Playing metadata. Include updated Xcode user
interface state.
Make media controls a standalone crate at crates/controls and exclude it
from the workspace. Remove the macOS-only path dependency from the CLI
and replace platform-specific start logic with a unified rockboxd spawn;
add a small binary to run the media controls.
This reverts commit 623342fef63c6defe33560db6ed65f4a8af77492.
feat: Add SwiftUI app for macos
Change package file from rockbox-installer-${ARCH}.pkg to
rockbox-${VERSION}-${ARCH}.pkg. Also update Xcode user interface state
metadata (IDE workspace user data).
Add packaging/macos/build-pkg.sh to stage /usr/local/{bin,lib,share},
set ARCH and VERSION, and create rockbox-installer-${ARCH}.pkg via
pkgbuild. Also add *.pkg to .gitignore to avoid committing built
packages.
Update workspace crates (graphql, rpc, search) and Cargo.lock to reflect
tantivy 0.25.0. Update related dependencies in the lockfile, including
upgrades and additions such as thiserror, rustc-hash, fs4,
serde/{derive,core,json}, downcast-rs, bon/bon-macros, itertools, and
hyperloglogplus.
Implement SettingsService gRPC helpers: fetchGlobalSettings,
updatePlaylistShuffle, updateRepeatMode.
Extend PlayerState to track shuffle and repeat, add toggle handlers and
fetchSettings, and start fetching settings on app launch.
Add hover states for shuffle and repeat in the controls view.
Remove duplicated context menu entries so each track row offers only the
relevant navigation action (album or artist) rather than both.
Add artistID property to Album and pass it through album views
(AlbumsGridView, AlbumCardView, ArtistDetailView). Wire up
NavigationManager to include artistID when creating Album models and add
a "Go to Artist" menu item in AlbumCardView that calls
navigation.goToArtist(byId:)
Wire NavigationManager into the App and inject it into views; replace
local selectedAlbum/selectedArtist state with the centralized
NavigationManager. Add albumID and artistID to Song, update
PlayerState.currentTrack, and propagate IDs through Album/Artist/Song
views. Remove large commented sample data block.
Add PlayerState as an EnvironmentObject to AlbumHeaderView and
FileRowView and call await player.fetchQueue() after play/insert
operations. Refactor FileRowView into smaller subviews, improve the
context menu and hover behavior, and add basic error alerts.
Implement clearPlaylist gRPC client and PlayerState.clearQueue which
calls it and refreshes the queue. Update history computation and
playlistLength assignment when loading the playlist. Add Clear button to
QueueView with hover state.
Add PlayerState environment object to AlbumCardView and call
player.fetchQueue() after play/insert tasks to keep the playback queue
state in sync
Add a macOS QueueView, CachedAsyncImage component and integrate a
showQueue binding/inspector into player controls and ContentView. Add
Swift gRPC helpers for streaming/starting playlists.
Regenerate tonic-generated Rust clients (formatting and trait bound
wrapping) and fix artist name capitalization in the metadata updater.
Adjust album grid item minimum width. Add Queue UI, image cache, and
playlist helpers
Delete macOS PlayButtons.swift SwiftUI view and update Xcode user
interface state file
Integrates play/shuffle actions into Songs and Likes views via a
toolbar, including a song count and toolbar background. LikesListView
gains a loading state and now renders a header + song rows; both views
call the async play endpoints and surface gRPC errors in an alert.
Apply .padding(.top, 15) to album and artist title texts. Show the
artist's genre when available in ArtistHeaderView. Add
isHoveringPlayButton state and onHover handlers to album and artist card
views, using Color(hex: "fe09a3") as the hover fill and a 0.15s
easeInOut animation.
Replace previous_index with current_scrobble_track and a
scrobbled_tracks HashSet. Monitor playback progress and spawn a scrobble
when elapsed/length >= 40% (and length > 30s). Use cloned track IDs to
avoid duplicate scrobbles and reset monitoring on track change or when
no track is playing. Clean up ffi import grouping.
Wire NavigationManager into the App and inject it into views; replace
local selectedAlbum/selectedArtist state with the centralized
NavigationManager. Add albumID and artistID to Song, update
PlayerState.currentTrack, and propagate IDs through Album/Artist/Song
views. Remove large commented sample data block.
Add a macOS QueueView, CachedAsyncImage component and integrate a
showQueue binding/inspector into player controls and ContentView. Add
Swift gRPC helpers for streaming/starting playlists.
Regenerate tonic-generated Rust clients (formatting and trait bound
wrapping) and fix artist name capitalization in the metadata updater.
Adjust album grid item minimum width. Add Queue UI, image cache, and
playlist helpers