sidebar and artist pipeline: one list in the rail, recents anchored to ids, and popular takes its own lane
This commit is contained in:
1 parent
606250c361
commit
eba29824c9
12 files changed
+1595
-281
No files matched your search
+24
-1
@@ -67,7 +67,25 @@ export const playerControl = (action, value, rate) =>
|
||||
export const waveform = (path, buckets) => invoke("waveform", { path, buckets });
|
||||
export const libraryAlbums = () => invoke("library_albums");
|
||||
export const albumTracks = (albumId) => invoke("album_tracks", { albumId });
|
||||
export const recordPlay = (artist, title) => invoke("record_play", { artist, title });
|
||||
// `path` anchors the play to a library album via tracks.path (UNIQUE). Without
|
||||
// it the row still records, but with no album — so it cannot appear in recents.
|
||||
// `cat` carries catalog identity for a STREAMED play, which never touches the
|
||||
// local library: { albumId, albumTitle, albumArtist, coverUrl }.
|
||||
export const recordPlay = (artist, title, path, cat = {}) =>
|
||||
invoke("record_play", {
|
||||
artist,
|
||||
title,
|
||||
path: path ?? null,
|
||||
catalogAlbumId: cat.albumId != null ? String(cat.albumId) : null,
|
||||
albumTitle: cat.albumTitle ?? null,
|
||||
albumArtist: cat.albumArtist ?? null,
|
||||
coverUrl: cat.coverUrl ?? null,
|
||||
});
|
||||
// Destructive, not undoable: wipes `plays` only. Returns rows removed.
|
||||
export const clearPlayHistory = () => invoke("clear_play_history");
|
||||
export const playRowCount = () => invoke("play_row_count");
|
||||
export const recentAlbums = (limit, minSecs) =>
|
||||
invoke("recent_albums", { limit: limit ?? null, minSecs: minSecs ?? null });
|
||||
export const addPlaySeconds = (playId, secs) => invoke("add_play_seconds", { playId, secs });
|
||||
export const artistPlayStats = (artist) => invoke("artist_play_stats", { artist });
|
||||
// The WebView blocks target="_blank"; external links open via the backend.
|
||||
@@ -110,6 +128,11 @@ export const catalogArtistHeroSeed = (artistId) =>
|
||||
invoke("catalog_artist_hero_seed", { artistId });
|
||||
export const catalogArtistOverview = (artistId) =>
|
||||
checkedArtistPayload("catalog_artist_overview", artistId);
|
||||
// Popular's fast lane: the Last.fm-ordered rows with listener counts, waiting
|
||||
// on nothing but the linked MBID and one Last.fm call. Patched over the
|
||||
// overview's budgeted (cold: unranked) list; the full page still lands last.
|
||||
export const catalogArtistPopular = (artistId) =>
|
||||
invoke("catalog_artist_popular", { artistId });
|
||||
export const pickArtistHero = (artistId) => invoke("pick_artist_hero", { artistId });
|
||||
export const clearArtistHero = (artistId) => invoke("clear_artist_hero", { artistId });
|
||||
export const catalogRelated = (artistId) => invoke("catalog_related", { artistId });
|
||||
|
||||
Reference in new issue
Block a user