diff --git a/VERSION b/VERSION index 4b3f9466..00af9aa0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.16.5-develop100 +1.16.5-develop101 diff --git a/modules/builder.py b/modules/builder.py index a442145b..d271f2dc 100644 --- a/modules/builder.py +++ b/modules/builder.py @@ -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: diff --git a/modules/library.py b/modules/library.py index d4c2cb4a..206a2774 100644 --- a/modules/library.py +++ b/modules/library.py @@ -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) diff --git a/modules/meta.py b/modules/meta.py index d614ebc0..cdfa93c0 100644 --- a/modules/meta.py +++ b/modules/meta.py @@ -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: diff --git a/modules/overlays.py b/modules/overlays.py index 31506442..1217435b 100644 --- a/modules/overlays.py +++ b/modules/overlays.py @@ -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] diff --git a/modules/util.py b/modules/util.py index 4d26b7be..768ac9f3 100644 --- a/modules/util.py +++ b/modules/util.py @@ -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