[101] fix positional overlays

This commit is contained in:
meisnate12 2022-05-16 09:25:51 -04:00
parent de737d9aca
commit 6754e798b5
6 changed files with 25 additions and 26 deletions

View file

@ -1 +1 @@
1.16.5-develop100
1.16.5-develop101

View file

@ -221,7 +221,7 @@ class CollectionBuilder:
logger.debug("")
logger.debug("Validating Method: allowed_library_types")
if not self.data[methods["allowed_library_types"]]:
raise Failed(f"{self.Type} Error: allowed_library_types attribute is blank")
raise NotScheduled(f"Skipped because allowed_library_types has no library types")
logger.debug(f"Value: {data[methods['allowed_library_types']]}")
found_type = False
for library_type in util.get_list(self.data[methods["allowed_library_types"]], lower=True):
@ -446,24 +446,22 @@ class CollectionBuilder:
elif self.library.is_show: self.collection_level = "show"
elif self.library.is_music: self.collection_level = "artist"
else: self.collection_level = "movie"
if "collection_level" in methods and not self.playlist:
if "collection_level" in methods and not self.library.is_movie and not self.playlist:
logger.debug("")
logger.debug("Validating Method: collection_level")
if self.library.is_movie:
raise Failed(f"{self.Type} Error: collection_level attribute only works for show and music libraries")
elif self.data[methods["collection_level"]] is None:
level = self.data[methods["collection_level"]]
if level is None:
raise Failed(f"{self.Type} Error: collection_level attribute is blank")
else:
logger.debug(f"Value: {self.data[methods['collection_level']]}")
if (self.library.is_show and self.data[methods["collection_level"]].lower() in plex.collection_level_show_options) or \
(self.library.is_music and self.data[methods["collection_level"]].lower() in plex.collection_level_music_options):
self.collection_level = self.data[methods["collection_level"]].lower()
logger.debug(f"Value: {level}")
level = level.lower()
if (self.library.is_show and level in plex.collection_level_show_options) or (self.library.is_music and level in plex.collection_level_music_options):
self.collection_level = level
elif (self.library.is_show and level != "show") or (self.library.is_music and level != "artist"):
if self.library.is_show:
options = "\n\tseason (Collection at the Season Level)\n\tepisode (Collection at the Episode Level)"
else:
if self.library.is_show:
options = "\n\tseason (Collection at the Season Level)\n\tepisode (Collection at the Episode Level)"
else:
options = "\n\talbum (Collection at the Album Level)\n\ttrack (Collection at the Track Level)"
raise Failed(f"{self.Type} Error: {self.data[methods['collection_level']]} collection_level invalid{options}")
options = "\n\talbum (Collection at the Album Level)\n\ttrack (Collection at the Track Level)"
raise Failed(f"{self.Type} Error: {self.data[methods['collection_level']]} collection_level invalid{options}")
self.parts_collection = self.collection_level in plex.collection_level_options
if "tmdb_person" in methods:

View file

@ -18,7 +18,6 @@ class Library(ABC):
self.Notifiarr = None
self.collections = []
self.metadatas = []
self.overlays = []
self.metadata_files = []
self.overlay_files = []
self.movie_map = {}
@ -133,9 +132,7 @@ class Library(ABC):
if not operations_only and not collection_only:
for file_type, overlay_file, temp_vars, asset_directory in self.overlay_path:
try:
over_obj = OverlayFile(self.config, self, file_type, overlay_file, temp_vars, asset_directory)
self.overlays.extend([o.lower() for o in over_obj.overlays])
self.overlay_files.append(over_obj)
self.overlay_files.append(OverlayFile(self.config, self, file_type, overlay_file, temp_vars, asset_directory))
except Failed as e:
logger.error(e)

View file

@ -1174,7 +1174,7 @@ class OverlayFile(DataFile):
logger.info("")
logger.info(f"Loading Overlay {file_type}: {path}")
data = self.load_file(self.type, self.path)
self.overlays = get_dict("overlays", data, self.library.overlays)
self.overlays = get_dict("overlays", data)
self.templates = get_dict("templates", data)
self.external_templates(data)
if not self.overlays:

View file

@ -6,7 +6,7 @@ from modules.util import Failed, NotScheduled
from plexapi.audio import Album
from plexapi.exceptions import BadRequest
from plexapi.video import Movie, Show, Season, Episode
from PIL import Image, ImageDraw, ImageFilter, ImageFont
from PIL import Image, ImageDraw, ImageFilter
logger = util.logger
@ -178,7 +178,7 @@ class Overlays:
overlay = properties[over_name]
text = over_name[5:-1]
if text in [f"{a}{s}" for a in ["audience_rating", "critic_rating", "user_rating"] for s in ["", "%"]]:
per = text[:-1] == "%"
per = text.endswith("%")
rating_type = text[:-1] if per else text
actual = plex.attribute_translation[rating_type]

View file

@ -884,6 +884,8 @@ class Overlay:
elif self.horizontal_align == "center" and per and (x_off > 50 or x_off < -50):
raise Failed(f"{error} between -50% and 50%")
self.horizontal_offset = f"{x_off}%" if per else x_off
if self.horizontal_offset is None and self.horizontal_align == "center":
self.horizontal_offset = 0
self.vertical_offset = None
if "vertical_offset" in self.data and self.data["vertical_offset"] is not None:
@ -903,8 +905,10 @@ class Overlay:
elif self.vertical_align == "center" and per and (y_off > 50 or y_off < -50):
raise Failed(f"{error} between -50% and 50%")
self.vertical_offset = f"{y_off}%" if per else y_off
if self.vertical_offset is None and self.vertical_align == "center":
self.vertical_offset = 0
if ("horizontal_offset" in self.data or "vertical_offset" in self.data) and (self.horizontal_offset is None or self.vertical_offset is None):
if (self.horizontal_offset is not None or self.vertical_offset is not None) and (self.horizontal_offset is None or self.vertical_offset is None):
raise Failed(f"Overlay Error: overlay horizontal_offset and overlay vertical_offset must be used together")
def get_and_save_image(image_url):
@ -1019,11 +1023,11 @@ class Overlay:
width, height = self.image.size
def get_cord(value, image_value, over_value, align):
value = image_value * 0.01 * int(value[:-1]) if str(value).endswith("%") else value
value = int(image_value * 0.01 * int(value[:-1])) if str(value).endswith("%") else value
if align in ["right", "bottom"]:
return image_value - over_value - value
elif align == "center":
return (image_value / 2) - (over_value / 2) + value
return int(image_value / 2) - int(over_value / 2) + value
else:
return value