Repository navigation
feat(playlists): genre and decade mixes - #841
Merged
Merged
Conversation
Two generated families beside Daily Mix and On Repeat: one mix per genre and per decade the user listens to most (90-day listening, then size), each 50 tracks scored on plays plus a per-day jitter, three per artist. Names come translated from the frontend; rows that no longer qualify are swept. The user's own rule-based playlists leave Made for you, and the playlist header names each family.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Two new generated playlist families, next to Daily Mix and On Repeat: one mix per genre and one per decade the user listens to most. Both live in the new core module
smart_playlists/themed.rs.listened_msover 90 days; when listening ties, the larger one in the library wins. A library with no history yet still gets mixes. A seed needs 25 available tracks by 4 artists, otherwise the "mix" would be one album on repeat. A year outside 1–9999 belongs to no decade, as in the Years tab.ln(1 + plays)plus a jitter in[0, 1). The jitter is seeded from the family, the seed and the day:GenreMix { genre_id }/DecadeMix { decade }and upserted throughupsert_smart_playlist.LIKEneedle is the rule JSON minus its opening brace, so genre 1 cannot match genre 12. Neither variant has aslotfield, so Daily Mix's"slot":Ndeletes cannot catch them.regenerate_all_smart_playlistsnow takesMixLabels: the name and description templates, translated by the frontend, with{name}/{decade}left for the backend to fill in. Keys are added to all 17 locales.smartFamilyStyle).is_smart, no longer appear in "Made for you".A fix found on the way.
top_artists_with_bpmstill readdeezer_artist, renamedmetadata_artistin20260427000000. The query failed, the error was swallowed, and no Daily Mix ever got its artist pictures as a cover.Docs:
smart-playlists.mdhas a new section and an updated regen flow, and two stale lines are fixed (sidebar ordering, the regen call).Testing
cargo clippy --workspace --all-targets -- -D warnings,cargo fmt --check.cargo test -p waveflow-core --features sqlite themed:bun run typecheck,bun run lint.Summary by CodeRabbit