6f789687e4c32320956532ceb480300416f3aafd
"Keep offline" on a playlist's More sheet: every streamed row fetched into the stream cache in the background and pinned there, so the whole list plays with the app shut — in a car, in a pocket — the way a downloaded playlist does in any other player. Not the library: "Download all tracks" files rows as albums, which is Save; this keeps the playlist a playlist of streamed rows that are simply already here. One pass at a time, one row at a time: the remembered peer file first, else the resolver's ladder over the network, then the same preload_stream the player uses for the next track, polled until whole, then pinned in the stream-source mirror — and the cache pruner leaves a pinned file alone, or the retention window would quietly undo the switch. The row being played right now is skipped (a second transfer of a file a peer is already streaming to us deadlocks both). The fetch rides the downloads notice in the shade, which is also what keeps the process alive once the app leaves the screen; Android 12+ lets that service start only from the foreground, so a pass that begins on screen keeps going in a pocket. The list lives in config.json (`offline_playlists`); the header says "Kept offline · N of M here" once a pass has looked. Verified on the phone: the shade read "Keeping 29 tracks offline", eleven rows were done in the first forty seconds, and the car's playlist row went from "8 of 40 here" to "10 of 40 here" two minutes later.
Languages
Rust
48.3%
Svelte
38.1%
JavaScript
13.4%
CSS
0.2%