Resume a figure after a library rescan
play_figure resumed only when the player's playlist *was* the figure's playlist object. rescan_library rebuilds every Playlist, so after the refresh button - or the podcast poller landing a new episode, every few hours on its own - putting a figure back started it over. Playlist is a frozen dataclass: compare by value. The album picker's "keep what is already playing" check had the same identity comparison and restarted the album after a rescan; it compares by value too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -126,6 +126,22 @@ async def test_putting_the_same_figure_back_resumes_where_it_left_off(
|
||||
mouse.check("track", "1")
|
||||
|
||||
|
||||
async def test_resuming_survives_a_library_rescan(
|
||||
mouse: SimulatorDriver, sim: Simulation
|
||||
) -> None:
|
||||
"""A rescan rebuilds every Playlist object; resuming must not depend on identity."""
|
||||
await mouse.place("fuchs")
|
||||
await mouse.wait(TRACK_SECONDS + 1)
|
||||
mouse.check("track", "1")
|
||||
|
||||
await mouse.remove()
|
||||
await sim.app.rescan_library()
|
||||
await mouse.place("fuchs")
|
||||
|
||||
mouse.check("playing", "true")
|
||||
mouse.check("track", "1")
|
||||
|
||||
|
||||
async def test_a_different_figure_starts_from_the_top(mouse: SimulatorDriver) -> None:
|
||||
await mouse.place("fuchs")
|
||||
await mouse.wait(TRACK_SECONDS + 1)
|
||||
|
||||
Reference in New Issue
Block a user