From 46afeff95c8d64d586c567b87c7161d5f87a6b94 Mon Sep 17 00:00:00 2001
From: JonnyWong16 <JonnyWong16@users.noreply.github.com>
Date: Fri, 4 Feb 2022 11:58:13 -0800
Subject: [PATCH] Faster lock/unlock with library `lockAllField` and
 `unlockAllField`

---
 utility/lock_unlock_poster_art.py | 44 +++++++++++++++++++++----------
 1 file changed, 30 insertions(+), 14 deletions(-)

diff --git a/utility/lock_unlock_poster_art.py b/utility/lock_unlock_poster_art.py
index 501260f..24bafe1 100644
--- a/utility/lock_unlock_poster_art.py
+++ b/utility/lock_unlock_poster_art.py
@@ -37,27 +37,32 @@ PLEX_TOKEN = os.getenv('PLEX_TOKEN', PLEX_TOKEN)
 
 
 def lock_unlock(plex, rating_key=None, libraries=None, lock=None, unlock=None):
-    if rating_key:
-        lock_unlock_items([plex.fetchItem(rating_key)], lock, unlock)
-
     if libraries is None:
         libraries = []
-
-    for lib in libraries:
-        library = plex.library.section(lib)
-        lock_unlock_items(library.all(), lock, unlock)
-        if library.TYPE == 'show':
-            lock_unlock_items(library.all(libtype='season'), lock, unlock)
-        elif library.TYPE == 'artist':
-            lock_unlock_items(library.all(libtype='album'), lock, unlock)
-
-
-def lock_unlock_items(items, lock, unlock):
     if lock is None:
         lock = []
     if unlock is None:
         unlock = []
 
+    if rating_key:
+        item = plex.fetchItem(rating_key)
+        lock_unlock_items([item], lock, unlock)
+        if item.type == 'show':
+            lock_unlock_items(item.seasons(), lock, unlock)
+        elif item.type == 'artist':
+            lock_unlock_items(item.albums(), lock, unlock)
+
+    else:
+        for lib in libraries:
+            library = plex.library.section(lib)
+            lock_unlock_library(library, lock, unlock)
+            if library.type == 'show':
+                lock_unlock_library(library, lock, unlock, libtype='season')
+            elif library.type == 'artist':
+                lock_unlock_library(library, lock, unlock, libtype='album')
+
+
+def lock_unlock_items(items, lock, unlock):
     for item in items:
         if 'poster' in lock:
             item.lockPoster()
@@ -69,6 +74,17 @@ def lock_unlock_items(items, lock, unlock):
             item.unlockArt()
 
 
+def lock_unlock_library(library, lock, unlock, libtype=None):
+    if 'poster' in lock:
+        library.lockAllField('thumb', libtype=libtype)
+    if 'art' in lock:
+        library.lockAllField('art', libtype=libtype)
+    if 'poster' in unlock:
+        library.unlockAllField('thumb', libtype=libtype)
+    if 'art' in unlock:
+        library.unlockAllField('art', libtype=libtype)
+
+
 if __name__ == "__main__":
     plex = PlexServer(PLEX_URL, PLEX_TOKEN)
     sections = [library.title for library in plex.library.sections()]