fix(plex): a collection created on Plex keeps its editable row when the refresh read fails

The rollback dropped the new row: the next sync recreated it read-only, out of every 'add to' list, and the duplicate-name check let a retry make a second same-named collection on Plex.
This commit is contained in:
2026-10-08 21:18:48 +02:00
parent 0fce732497
commit 48bd038c5f
2 changed files with 21 additions and 1 deletions
+10 -1
View File
@@ -454,16 +454,25 @@ def create_collection(
raise not_found("library")
_reject_duplicate_name(db, lib.id, title)
wrote = False
new_rk = ""
try:
with PlexClient(db) as plex:
# A show collection is made as one (Plex type 2): as a movie one it stayed empty.
new = plex.create_collection(lib.plex_key, title, seed, 2 if seed_show else 1)
wrote = True
col = plex_sync.resync_collection(db, plex, lib, str(new.get("ratingKey")))
new_rk = str(new.get("ratingKey") or "")
col = plex_sync.resync_collection(db, plex, lib, new_rk)
col.editable = True
db.commit()
except (PlexError, PlexNotConfigured) as e:
db.rollback()
if wrote and new_rk:
# It is on Plex now, and only the follow-up read failed. Its row is kept, editable: the
# full sync preserves `editable` but creates a missing row read-only, so the collection
# would drop out of every "add to" list; and the duplicate-name check reads these rows,
# so a retry of the same name would make a second one on Plex.
db.add(PlexCollection(rating_key=new_rk, library_id=lib.id, title=title, editable=True))
db.commit()
raise _write_or_pending_error(wrote, e) from e
return _collection_card(col)