Persist organize_by_playlist from Download Missing batches and modal
wishlist adds, save organize toggles to mirrored playlists, resolve
per-track playlist folders on wishlist requeue, skip re-downloads when
a file already exists (case-insensitive), and treat same-folder casing
variants as duplicates in the duplicate cleaner.
Co-authored-by: Cursor <cursoragent@cursor.com>
- add neutral wishlist payload helpers while keeping legacy Spotify aliases
- route wishlist removal and classification through generic track data
- keep API and service compatibility for existing callers
- remove the redundant wishlist-service injection from the runtime wrappers
- keep the package owning its own singleton service access
- simplify the route runtime API and update the wishlist tests to match
- add direct service and presence coverage
- pin resolver, processing, route, and payload edge cases
- keep wishlist package extraction safe for future refactors
- extract the remaining wishlist endpoint behavior from web_server.py into core/wishlist/routes.py
- keep web_server.py as a thin Flask adapter around the new route helpers
- add tests that cover wishlist counts, stats, track listing, clear/remove flows, cycle updates, and album-track adds