1a2de0e738
Slice 3 of the smooth-loading pass. The three _likedTracksProvider / _likedAlbumsProvider / _likedArtistsProvider entries on the Library screen migrate from FutureProvider+REST to StreamProvider+cacheFirst. Reads now flow from cached_likes joined against the metadata tables SyncController already keeps fresh; LikesController's optimistic drift write makes toggling a like re-emit these streams instantly without a REST round-trip. Cold-cache fallback hits /api/likes/* when drift is empty (fresh install pre-first-sync). SWR refresh on each visit catches likes from other devices that haven't propagated via library_changes yet. The original FutureProvider versions fetched the first 50 rows. Drift returns everything cached_likes knows about — for typical libraries that's the full liked list. Pagination can come back when liked lists are big enough to matter. Like/unlike SSE invalidation paths preserved so cross-device updates still feel real-time, even when the sender's library_changes hasn't landed here yet.