feat(slint): playlist detail view
First piece of the playlist module: a detail view at the AlbumView /
MixView level, reusing the shared TrackRow (show-artwork + show-album +
context menu, so Add to playlist / Go to album / etc. work in it).
- PlaylistState + crate::playlist controller (get_playlist -> header
metadata + TrackItem rows; cached track list backs play-all /
per-track play; artwork jobs resolve row covers + the header cover).
- PlaylistView.slint: cover + "Playlist" label + name + description +
"owner - N tracks - duration" info line + circular actions (Play
all, Shuffle, Favorite) over a column-headed track list.
- ContentView.playlist + NavEntry::Playlist (back/forward history) +
navigate_playlist; the Favorites > Playlists card now opens it.
- media-action: playlist play-all / shuffle / favorite (add/remove
favorite) + per-track play-from-here.
cc
This commit is contained in:
8 files changed
+607
-5
No files matched your search
@@ -196,7 +196,23 @@ export global AlbumActions {
|
||||
}
|
||||
|
||||
// Which content view the shell shows.
|
||||
export enum ContentView { home, album, artist, settings, search, musician, label, location, favorites, mix }
|
||||
export enum ContentView { home, album, artist, settings, search, musician, label, location, favorites, mix, playlist }
|
||||
|
||||
// Playlist detail screen state. Rows reuse the shared TrackRow
|
||||
// (show-artwork + show-album); populated by crate::playlist.
|
||||
export global PlaylistState {
|
||||
in property <string> id;
|
||||
in property <string> name;
|
||||
in property <string> owner;
|
||||
in property <string> description;
|
||||
in property <int> track-count: 0;
|
||||
in property <string> total-duration;
|
||||
in property <string> cover-url;
|
||||
in property <image> cover;
|
||||
in property <bool> is-favorite: false;
|
||||
in property <[TrackItem]> tracks: [];
|
||||
in property <bool> loading: false;
|
||||
}
|
||||
|
||||
// Settings screen state. Audio and Playback preferences are loaded from
|
||||
// the persistence stores by the Rust settings controller and pushed here;
|
||||
|
||||
Reference in new issue
Block a user