feat(M002): smart playlists — rule engine, editor UI, sidebar integration
Recovered from orphaned worktree commits (complete-milestone failed to merge). Backend: - Migration 9: is_smart + smart_rules columns on playlists table - smartplaylist package: parameterized WHERE clause builder, field whitelist, genre subquery - playlist.Service: Create/Update/Evaluate/Preview/GetRules smart playlist methods - 65 tests (49 rule engine + 15 service + 1 migration) Frontend: - yj-combobox: reusable typeable dropdown with keyboard nav, ARIA, blur-race fix - smart-playlist-editor: row-based rule builder with live preview - smart-playlist-details: evaluate, refresh, play, shuffle, edit rules - Sidebar: filter icon, Smart badge, create button, routing - Queue snapshot on play/shuffle
This commit is contained in:
@@ -18,6 +18,10 @@ export function CreatePlaylistWithTracks(arg1, arg2) {
|
||||
return window['go']['playlist']['Service']['CreatePlaylistWithTracks'](arg1, arg2);
|
||||
}
|
||||
|
||||
export function CreateSmartPlaylist(arg1, arg2) {
|
||||
return window['go']['playlist']['Service']['CreateSmartPlaylist'](arg1, arg2);
|
||||
}
|
||||
|
||||
export function DeletePlaylist(arg1) {
|
||||
return window['go']['playlist']['Service']['DeletePlaylist'](arg1);
|
||||
}
|
||||
@@ -26,6 +30,10 @@ export function EnsureDefaultPlaylist() {
|
||||
return window['go']['playlist']['Service']['EnsureDefaultPlaylist']();
|
||||
}
|
||||
|
||||
export function EvaluateSmartPlaylist(arg1) {
|
||||
return window['go']['playlist']['Service']['EvaluateSmartPlaylist'](arg1);
|
||||
}
|
||||
|
||||
export function FindDuplicateTracksInPlaylist(arg1, arg2) {
|
||||
return window['go']['playlist']['Service']['FindDuplicateTracksInPlaylist'](arg1, arg2);
|
||||
}
|
||||
@@ -109,3 +117,15 @@ export function SetFavoritesConfig(arg1) {
|
||||
export function ToggleDefaultPlaylistTrack(arg1) {
|
||||
return window['go']['playlist']['Service']['ToggleDefaultPlaylistTrack'](arg1);
|
||||
}
|
||||
|
||||
export function UpdateSmartPlaylistRules(arg1, arg2) {
|
||||
return window['go']['playlist']['Service']['UpdateSmartPlaylistRules'](arg1, arg2);
|
||||
}
|
||||
|
||||
export function GetSmartPlaylistRules(arg1) {
|
||||
return window['go']['playlist']['Service']['GetSmartPlaylistRules'](arg1);
|
||||
}
|
||||
|
||||
export function PreviewSmartPlaylist(arg1) {
|
||||
return window['go']['playlist']['Service']['PreviewSmartPlaylist'](arg1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user