fix(playlists): overlapping writes, and what the second review found

A read from before a write no longer brings a row back: a write calls off the
read on its way, what lands while one is out stays off the screen, and the last
write out does the refresh. A failure puts back its own rows, an accepted reorder
brings back none, and an Undo reads past the cache. A list the cache has dropped
is read before a removal, so its Undo has places.

undo-move refuses the same list twice, positions cannot repeat, and undo-move
and the Plex key bodies refuse a body without their videos. Focus goes to the
header's box when the last shown row or Save this order goes.
This commit is contained in:
2026-11-02 22:15:13 +01:00
parent 195b5f3917
commit b636ef38bc
12 changed files with 578 additions and 71 deletions
+3 -1
View File
@@ -183,7 +183,9 @@ def playlist_remove_item(
class PlexItemKeysIn(BaseModel):
item_rating_keys: list[str] = []
# Required: with a default, a misnamed key answered 200 having acted on no item, and a reorder
# took it for an empty order.
item_rating_keys: list[str]
class PlexItemAddBulkIn(PlexItemKeysIn):