mirror of
https://github.com/meisnate12/Plex-Meta-Manager
synced 2024-11-10 06:54:21 +00:00
[126] fix downloading image sets
This commit is contained in:
parent
48696d0ebf
commit
e889f4ab9b
6 changed files with 40 additions and 86 deletions
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
1.18.3-develop125
|
1.18.3-develop126
|
||||||
|
|
|
@ -1259,7 +1259,8 @@ class MetadataFile(DataFile):
|
||||||
if not files:
|
if not files:
|
||||||
raise Failed(f"{self.type_str} Error: No Path Found for image_set")
|
raise Failed(f"{self.type_str} Error: No Path Found for image_set")
|
||||||
file_type, set_file, _, _ = files[0]
|
file_type, set_file, _, _ = files[0]
|
||||||
temp_data = self.load_file(file_type, set_file, images=True, folder=f"{'movies' if self.library.is_movie else 'shows'}-sets/")
|
folder_name = os.path.splitext(os.path.basename(set_file))[0]
|
||||||
|
temp_data = self.load_file(file_type, set_file, images=True, folder=f"{folder_name}-sets/")
|
||||||
if "set" not in temp_data:
|
if "set" not in temp_data:
|
||||||
raise Failed('Image Set Error: Image sets must use the base attribute "set"')
|
raise Failed('Image Set Error: Image sets must use the base attribute "set"')
|
||||||
if not isinstance(temp_data, dict):
|
if not isinstance(temp_data, dict):
|
||||||
|
|
|
@ -104,38 +104,35 @@ class Overlays:
|
||||||
else:
|
else:
|
||||||
applied_names.append(over_name)
|
applied_names.append(over_name)
|
||||||
|
|
||||||
change_reason = ""
|
overlay_change = "" if has_overlay else "No Overlay Label"
|
||||||
overlay_change = False if has_overlay else True
|
|
||||||
if not overlay_change:
|
if not overlay_change:
|
||||||
for oc in overlay_compare:
|
for oc in overlay_compare:
|
||||||
if oc not in compare_names:
|
if oc not in compare_names:
|
||||||
change_reason = f"{oc} not in {compare_names}"
|
overlay_change = f"{oc} not in {compare_names}"
|
||||||
overlay_change = True
|
|
||||||
|
|
||||||
if not overlay_change:
|
if not overlay_change:
|
||||||
for compare_name, original_name in compare_names.items():
|
for compare_name, original_name in compare_names.items():
|
||||||
if compare_name not in overlay_compare or properties[original_name].updated:
|
if compare_name not in overlay_compare or properties[original_name].updated:
|
||||||
change_reason = f"{compare_name} not in {overlay_compare} or {properties[original_name].updated}"
|
overlay_change = f"{compare_name} not in {overlay_compare} or {properties[original_name].updated}"
|
||||||
overlay_change = True
|
|
||||||
|
|
||||||
if self.config.Cache:
|
if self.config.Cache:
|
||||||
for over_name in over_names:
|
for over_name in over_names:
|
||||||
current_overlay = properties[over_name]
|
if properties[over_name].name.startswith("text"):
|
||||||
if current_overlay.name.startswith("text"):
|
|
||||||
for cache_key, cache_value in self.config.Cache.query_overlay_special_text(item.ratingKey).items():
|
for cache_key, cache_value in self.config.Cache.query_overlay_special_text(item.ratingKey).items():
|
||||||
actual = plex.attribute_translation[cache_key] if cache_key in plex.attribute_translation else cache_key
|
actual = plex.attribute_translation[cache_key] if cache_key in plex.attribute_translation else cache_key
|
||||||
if cache_value is None or not hasattr(item, actual) or getattr(item, actual) is None:
|
if not hasattr(item, actual):
|
||||||
|
continue
|
||||||
|
actual_value = getattr(item, actual)
|
||||||
|
if cache_value is None or actual_value is None:
|
||||||
continue
|
continue
|
||||||
if cache_key in overlay.float_vars:
|
if cache_key in overlay.float_vars:
|
||||||
cache_value = float(cache_value)
|
cache_value = float(cache_value)
|
||||||
if cache_key in overlay.int_vars:
|
if cache_key in overlay.int_vars:
|
||||||
cache_value = int(cache_value)
|
cache_value = int(cache_value)
|
||||||
|
|
||||||
if cache_key in overlay.date_vars:
|
if cache_key in overlay.date_vars:
|
||||||
if getattr(item, actual).strftime("%Y-%m-%d") != cache_value:
|
actual_value = actual_value.strftime("%Y-%m-%d")
|
||||||
overlay_change = True
|
if actual_value != cache_value:
|
||||||
elif getattr(item, actual) != cache_value:
|
overlay_change = f"Special Text Changed from {cache_value} to {actual_value}"
|
||||||
overlay_change = True
|
|
||||||
try:
|
try:
|
||||||
poster, background, item_dir, name = self.library.find_item_assets(item)
|
poster, background, item_dir, name = self.library.find_item_assets(item)
|
||||||
if not poster and self.library.assets_for_all:
|
if not poster and self.library.assets_for_all:
|
||||||
|
@ -153,7 +150,6 @@ class Overlays:
|
||||||
logger.warning(e)
|
logger.warning(e)
|
||||||
|
|
||||||
has_original = None
|
has_original = None
|
||||||
changed_image = False
|
|
||||||
new_backup = None
|
new_backup = None
|
||||||
if poster:
|
if poster:
|
||||||
if image_compare and str(poster.compare) != str(image_compare):
|
if image_compare and str(poster.compare) != str(image_compare):
|
||||||
|
@ -182,7 +178,6 @@ class Overlays:
|
||||||
new_backup = item.posterUrl
|
new_backup = item.posterUrl
|
||||||
logger.info(f"\n{item_title}")
|
logger.info(f"\n{item_title}")
|
||||||
if new_backup:
|
if new_backup:
|
||||||
changed_image = True
|
|
||||||
try:
|
try:
|
||||||
has_original = self.library.check_image_for_overlay(new_backup, os.path.join(self.library.overlay_backup, f"{item.ratingKey}"))
|
has_original = self.library.check_image_for_overlay(new_backup, os.path.join(self.library.overlay_backup, f"{item.ratingKey}"))
|
||||||
except Failed as e:
|
except Failed as e:
|
||||||
|
@ -190,12 +185,12 @@ class Overlays:
|
||||||
poster_compare = None
|
poster_compare = None
|
||||||
if poster is None and has_original is None:
|
if poster is None and has_original is None:
|
||||||
logger.error(f" Overlay Error: No poster found")
|
logger.error(f" Overlay Error: No poster found")
|
||||||
elif self.library.reapply_overlays or changed_image or overlay_change:
|
elif self.library.reapply_overlays or new_backup or overlay_change:
|
||||||
try:
|
try:
|
||||||
if not self.library.reapply_overlays and changed_image:
|
if not self.library.reapply_overlays and new_backup:
|
||||||
logger.trace(" Overlay applied because new image was detected")
|
logger.trace(" Overlay Reason: New image detected")
|
||||||
elif not self.library.reapply_overlays and overlay_change:
|
elif not self.library.reapply_overlays and overlay_change:
|
||||||
logger.trace(f" Overlay applied because overlay changed {change_reason}")
|
logger.trace(f" Overlay Reason: Overlay changed {overlay_change}")
|
||||||
canvas_width, canvas_height = overlay.get_canvas_size(item)
|
canvas_width, canvas_height = overlay.get_canvas_size(item)
|
||||||
with Image.open(poster.location if poster else has_original) as new_poster:
|
with Image.open(poster.location if poster else has_original) as new_poster:
|
||||||
exif_tags = new_poster.getexif()
|
exif_tags = new_poster.getexif()
|
||||||
|
|
|
@ -199,65 +199,23 @@ def pick_image(title, images, prioritize_assets, download_url_assets, item_dir,
|
||||||
logger.debug(f"{len(images)} {image_type}{'s' if len(images) > 1 else ''} found:")
|
logger.debug(f"{len(images)} {image_type}{'s' if len(images) > 1 else ''} found:")
|
||||||
for i in images:
|
for i in images:
|
||||||
logger.debug(f"Method: {i} {image_type.capitalize()}: {images[i]}")
|
logger.debug(f"Method: {i} {image_type.capitalize()}: {images[i]}")
|
||||||
is_url = True
|
|
||||||
final_attr = None
|
|
||||||
if prioritize_assets and "asset_directory" in images:
|
if prioritize_assets and "asset_directory" in images:
|
||||||
return images["asset_directory"]
|
return images["asset_directory"]
|
||||||
elif "image_set" in images:
|
if download_url_assets and item_dir and ("image_set" in images or f"url_{image_type}" in images):
|
||||||
final_attr = "image_set"
|
if "asset_directory" in images:
|
||||||
elif f"url_{image_type}" in images:
|
return images["asset_directory"]
|
||||||
if download_url_assets and item_dir:
|
else:
|
||||||
if "asset_directory" in images:
|
try:
|
||||||
return images["asset_directory"]
|
return download_image(title, images[f"url_{image_type}"], item_dir, image_name)
|
||||||
else:
|
except Failed as e:
|
||||||
try:
|
logger.error(e)
|
||||||
return download_image(title, images[f"url_{image_type}"], item_dir, image_name)
|
for attr in ["image_set", f"url_{image_type}", f"file_{image_type}", f"tmdb_{image_type}", "tmdb_profile",
|
||||||
except Failed as e:
|
"tmdb_list_poster", "tvdb_list_poster", f"tvdb_{image_type}", "asset_directory", "tmdb_person",
|
||||||
logger.error(e)
|
"tmdb_collection_details", "tmdb_actor_details", "tmdb_crew_details", "tmdb_director_details",
|
||||||
final_attr = f"url_{image_type}"
|
"tmdb_producer_details", "tmdb_writer_details", "tmdb_movie_details", "tmdb_list_details",
|
||||||
elif f"file_{image_type}" in images:
|
"tvdb_list_details", "tvdb_movie_details", "tvdb_show_details", "tmdb_show_details"]:
|
||||||
final_attr = f"file_{image_type}"
|
if attr in images:
|
||||||
is_url = False
|
return images[attr] if attr == "asset_directory" else ImageData(attr, images[attr], is_poster=is_poster, is_url=attr != f"file_{image_type}")
|
||||||
elif f"tmdb_{image_type}" in images:
|
|
||||||
final_attr = f"tmdb_{image_type}"
|
|
||||||
elif "tmdb_profile" in images:
|
|
||||||
final_attr = "tmdb_profile"
|
|
||||||
elif "tmdb_list_poster" in images:
|
|
||||||
final_attr = "tmdb_list_poster"
|
|
||||||
elif "tvdb_list_poster" in images:
|
|
||||||
final_attr = "tvdb_list_poster"
|
|
||||||
elif f"tvdb_{image_type}" in images:
|
|
||||||
final_attr = f"tvdb_{image_type}"
|
|
||||||
elif "asset_directory" in images:
|
|
||||||
return images["asset_directory"]
|
|
||||||
elif "tmdb_person" in images:
|
|
||||||
final_attr = "tmdb_person"
|
|
||||||
elif "tmdb_collection_details" in images:
|
|
||||||
final_attr = "tmdb_collection_details"
|
|
||||||
elif "tmdb_actor_details" in images:
|
|
||||||
final_attr = "tmdb_actor_details"
|
|
||||||
elif "tmdb_crew_details" in images:
|
|
||||||
final_attr = "tmdb_crew_details"
|
|
||||||
elif "tmdb_director_details" in images:
|
|
||||||
final_attr = "tmdb_director_details"
|
|
||||||
elif "tmdb_producer_details" in images:
|
|
||||||
final_attr = "tmdb_producer_details"
|
|
||||||
elif "tmdb_writer_details" in images:
|
|
||||||
final_attr = "tmdb_writer_details"
|
|
||||||
elif "tmdb_movie_details" in images:
|
|
||||||
final_attr = "tmdb_movie_details"
|
|
||||||
elif "tmdb_list_details" in images:
|
|
||||||
final_attr = "tmdb_list_details"
|
|
||||||
elif "tvdb_list_details" in images:
|
|
||||||
final_attr = "tvdb_list_details"
|
|
||||||
elif "tvdb_movie_details" in images:
|
|
||||||
final_attr = "tvdb_movie_details"
|
|
||||||
elif "tvdb_show_details" in images:
|
|
||||||
final_attr = "tvdb_show_details"
|
|
||||||
elif "tmdb_show_details" in images:
|
|
||||||
final_attr = "tmdb_show_details"
|
|
||||||
if final_attr:
|
|
||||||
return ImageData(final_attr, images[final_attr], is_poster=is_poster, is_url=is_url)
|
|
||||||
|
|
||||||
def add_dict_list(keys, value, dict_map):
|
def add_dict_list(keys, value, dict_map):
|
||||||
for key in keys:
|
for key in keys:
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
import argparse, os, platform, psutil, sys, time, uuid
|
import argparse, os, platform, sys, time, uuid
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from concurrent.futures import ProcessPoolExecutor
|
from concurrent.futures import ProcessPoolExecutor
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from modules.logs import MyLogger
|
from modules.logs import MyLogger
|
||||||
|
|
||||||
|
if sys.version_info[0] != 3 or sys.version_info[1] < 7:
|
||||||
|
print("Version Error: Version: %s.%s.%s incompatible please use Python 3.7+" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import plexapi, requests, schedule
|
import plexapi, psutil, requests, schedule
|
||||||
from PIL import ImageFile
|
from PIL import ImageFile
|
||||||
from plexapi import server
|
from plexapi import server
|
||||||
from plexapi.exceptions import NotFound
|
from plexapi.exceptions import NotFound
|
||||||
|
@ -14,10 +18,6 @@ except (ModuleNotFoundError, ImportError):
|
||||||
print("Requirements Error: Requirements are not installed")
|
print("Requirements Error: Requirements are not installed")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
if sys.version_info[0] != 3 or sys.version_info[1] < 7:
|
|
||||||
print("Version Error: Version: %s.%s.%s incompatible please use Python 3.7+" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("-db", "--debug", dest="debug", help="Run with Debug Logs Reporting to the Command Window", action="store_true", default=False)
|
parser.add_argument("-db", "--debug", dest="debug", help="Run with Debug Logs Reporting to the Command Window", action="store_true", default=False)
|
||||||
parser.add_argument("-tr", "--trace", dest="trace", help="Run with extra Trace Debug Logs", action="store_true", default=False)
|
parser.add_argument("-tr", "--trace", dest="trace", help="Run with extra Trace Debug Logs", action="store_true", default=False)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
PlexAPI==4.13.2
|
PlexAPI==4.13.4
|
||||||
tmdbapis==1.1.0
|
tmdbapis==1.1.0
|
||||||
arrapi==1.4.2
|
arrapi==1.4.2
|
||||||
lxml==4.9.2
|
lxml==4.9.2
|
||||||
|
|
Loading…
Reference in a new issue