mirror of
https://github.com/meisnate12/Plex-Meta-Manager
synced 2024-11-22 20:43:07 +00:00
parent
3b8cbb6596
commit
4bd9e1481e
4 changed files with 89 additions and 37 deletions
|
@ -1216,40 +1216,49 @@ class CollectionBuilder:
|
|||
path = os.path.join(ad, f"{name_mapping}")
|
||||
if not os.path.isdir(path):
|
||||
continue
|
||||
matches = glob.glob(os.path.join(ad, f"{name_mapping}", "poster.*"))
|
||||
if self.library.asset_folders:
|
||||
poster_path = os.path.join(ad, f"{name_mapping}", "poster.*")
|
||||
else:
|
||||
poster_path = os.path.join(ad, f"{name_mapping}.*")
|
||||
matches = glob.glob(poster_path)
|
||||
if len(matches) > 0:
|
||||
for match in matches:
|
||||
self.posters["asset_directory"] = os.path.abspath(match)
|
||||
matches = glob.glob(os.path.join(ad, f"{name_mapping}", "background.*"))
|
||||
if len(matches) > 0:
|
||||
for match in matches:
|
||||
self.backgrounds["asset_directory"] = os.path.abspath(match)
|
||||
dirs = [folder for folder in os.listdir(path) if os.path.isdir(os.path.join(path, folder))]
|
||||
if len(dirs) > 0:
|
||||
for item in collection.items():
|
||||
folder = os.path.basename(os.path.dirname(item.locations[0]) if self.library.is_movie else item.locations[0])
|
||||
if folder in dirs:
|
||||
matches = glob.glob(os.path.join(path, folder, "poster.*"))
|
||||
poster_path = os.path.abspath(matches[0]) if len(matches) > 0 else None
|
||||
matches = glob.glob(os.path.join(path, folder, "background.*"))
|
||||
background_path = os.path.abspath(matches[0]) if len(matches) > 0 else None
|
||||
if poster_path:
|
||||
item.uploadPoster(filepath=poster_path)
|
||||
logger.info(f"Detail: asset_directory updated {item.title}'s poster to [file] {poster_path}")
|
||||
if background_path:
|
||||
item.uploadArt(filepath=background_path)
|
||||
logger.info(f"Detail: asset_directory updated {item.title}'s background to [file] {background_path}")
|
||||
if poster_path is None and background_path is None:
|
||||
logger.warning(f"No Files Found: {os.path.join(path, folder)}")
|
||||
if self.library.is_show:
|
||||
for season in item.seasons():
|
||||
matches = glob.glob(os.path.join(path, folder, f"Season{'0' if season.seasonNumber < 10 else ''}{season.seasonNumber}.*"))
|
||||
if len(matches) > 0:
|
||||
season_path = os.path.abspath(matches[0])
|
||||
season.uploadPoster(filepath=season_path)
|
||||
logger.info(f"Detail: asset_directory updated {item.title} Season {season.seasonNumber}'s poster to [file] {season_path}")
|
||||
else:
|
||||
logger.warning(f"No Folder: {os.path.join(path, folder)}")
|
||||
self.posters["asset_directory"] = os.path.abspath(matches[0])
|
||||
if self.library.asset_folders:
|
||||
matches = glob.glob(os.path.join(ad, f"{name_mapping}", "background.*"))
|
||||
if len(matches) > 0:
|
||||
self.backgrounds["asset_directory"] = os.path.abspath(matches[0])
|
||||
dirs = [folder for folder in os.listdir(path) if os.path.isdir(os.path.join(path, folder))]
|
||||
if len(dirs) > 0:
|
||||
for item in collection.items():
|
||||
folder = os.path.basename(os.path.dirname(item.locations[0]) if self.library.is_movie else item.locations[0])
|
||||
if folder in dirs:
|
||||
matches = glob.glob(os.path.join(path, folder, "poster.*"))
|
||||
poster_path = os.path.abspath(matches[0]) if len(matches) > 0 else None
|
||||
matches = glob.glob(os.path.join(path, folder, "background.*"))
|
||||
background_path = os.path.abspath(matches[0]) if len(matches) > 0 else None
|
||||
if poster_path:
|
||||
item.uploadPoster(filepath=poster_path)
|
||||
logger.info(f"Detail: asset_directory updated {item.title}'s poster to [file] {poster_path}")
|
||||
if background_path:
|
||||
item.uploadArt(filepath=background_path)
|
||||
logger.info(f"Detail: asset_directory updated {item.title}'s background to [file] {background_path}")
|
||||
if poster_path is None and background_path is None:
|
||||
logger.warning(f"No Files Found: {os.path.join(path, folder)}")
|
||||
if self.library.is_show:
|
||||
for season in item.seasons():
|
||||
matches = glob.glob(os.path.join(path, folder, f"Season{'0' if season.seasonNumber < 10 else ''}{season.seasonNumber}.*"))
|
||||
if len(matches) > 0:
|
||||
season_path = os.path.abspath(matches[0])
|
||||
season.uploadPoster(filepath=season_path)
|
||||
logger.info(f"Detail: asset_directory updated {item.title} Season {season.seasonNumber}'s poster to [file] {season_path}")
|
||||
for episode in season.episodes():
|
||||
matches = glob.glob(os.path.join(path, folder, f"{episode.seasonEpisode.upper()}.*"))
|
||||
if len(matches) > 0:
|
||||
episode_path = os.path.abspath(matches[0])
|
||||
episode.uploadPoster(filepath=episode_path)
|
||||
logger.info(f"Detail: asset_directory updated {item.title} {episode.seasonEpisode.upper()}'s poster to [file] {episode_path}")
|
||||
else:
|
||||
logger.warning(f"No Folder: {os.path.join(path, folder)}")
|
||||
|
||||
def set_image(image_method, images, is_background=False):
|
||||
message = f"{'background' if is_background else 'poster'} to [{'File' if image_method in image_file_details else 'URL'}] {images[image_method]}"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import logging, os, re, requests, time
|
||||
import glob, logging, os, re, requests, time
|
||||
from modules import util
|
||||
from modules.anidb import AniDBAPI
|
||||
from modules.anilist import AniListAPI
|
||||
|
@ -187,6 +187,8 @@ class Config:
|
|||
else:
|
||||
self.Cache = None
|
||||
self.general["asset_directory"] = check_for_attribute(self.data, "asset_directory", parent="settings", var_type="list_path", default=[os.path.join(default_dir, "assets")])
|
||||
self.general["asset_folders"] = check_for_attribute(self.data, "asset_folders", parent="settings", var_type="bool", default=True)
|
||||
self.general["assets_for_all"] = check_for_attribute(self.data, "assets_for_all", parent="settings", var_type="bool", default=False)
|
||||
self.general["sync_mode"] = check_for_attribute(self.data, "sync_mode", parent="settings", default="append", test_list=sync_modes)
|
||||
self.general["run_again_delay"] = check_for_attribute(self.data, "run_again_delay", parent="settings", var_type="int", default=0)
|
||||
self.general["show_unmanaged"] = check_for_attribute(self.data, "show_unmanaged", parent="settings", var_type="bool", default=True)
|
||||
|
@ -324,6 +326,16 @@ class Config:
|
|||
if params["asset_directory"] is None:
|
||||
logger.warning("Config Warning: Assets will not be used asset_directory attribute must be set under config or under this specific Library")
|
||||
|
||||
if lib and "settings" in lib and lib["settings"] and "asset_folders" in lib["settings"]:
|
||||
params["asset_folders"] = check_for_attribute(lib, "asset_folders", parent="settings", var_type="bool", default=self.general["asset_folders"], do_print=False, save=False)
|
||||
else:
|
||||
params["asset_folders"] = check_for_attribute(lib, "asset_folders", var_type="bool", default=self.general["asset_folders"], do_print=False, save=False)
|
||||
|
||||
if lib and "settings" in lib and lib["settings"] and "assets_for_all" in lib["settings"]:
|
||||
params["assets_for_all"] = check_for_attribute(lib, "assets_for_all", parent="settings", var_type="bool", default=self.general["assets_for_all"], do_print=False, save=False)
|
||||
else:
|
||||
params["assets_for_all"] = check_for_attribute(lib, "assets_for_all", var_type="bool", default=self.general["assets_for_all"], do_print=False, save=False)
|
||||
|
||||
if lib and "settings" in lib and lib["settings"] and "sync_mode" in lib["settings"]:
|
||||
params["sync_mode"] = check_for_attribute(lib, "sync_mode", parent="settings", test_list=sync_modes, default=self.general["sync_mode"], do_print=False, save=False)
|
||||
else:
|
||||
|
@ -534,6 +546,37 @@ class Config:
|
|||
|
||||
builder.update_details(plex_collection)
|
||||
|
||||
if library.assets_for_all:
|
||||
for item in library.get_all():
|
||||
folder = os.path.basename(os.path.dirname(item.locations[0]) if library.is_movie else item.locations[0])
|
||||
for ad in library.asset_directory:
|
||||
if library.asset_folders:
|
||||
poster_path = os.path.join(ad, folder, "poster.*")
|
||||
else:
|
||||
poster_path = os.path.join(ad, f"{folder}.*")
|
||||
matches = glob.glob(poster_path)
|
||||
if len(matches) > 0:
|
||||
item.uploadPoster(filepath=os.path.abspath(matches[0]))
|
||||
logger.info(f"Detail: asset_directory updated {item.title}'s poster to [file] {os.path.abspath(matches[0])}")
|
||||
if library.asset_folders:
|
||||
matches = glob.glob(os.path.join(ad, folder, "background.*"))
|
||||
if len(matches) > 0:
|
||||
item.uploadArt(filepath=os.path.abspath(matches[0]))
|
||||
logger.info(f"Detail: asset_directory updated {item.title}'s background to [file] {os.path.abspath(matches[0])}")
|
||||
if library.is_show:
|
||||
for season in item.seasons():
|
||||
matches = glob.glob(os.path.join(ad, folder, f"Season{'0' if season.seasonNumber < 10 else ''}{season.seasonNumber}.*"))
|
||||
if len(matches) > 0:
|
||||
season_path = os.path.abspath(matches[0])
|
||||
season.uploadPoster(filepath=season_path)
|
||||
logger.info(f"Detail: asset_directory updated {item.title} Season {season.seasonNumber}'s poster to [file] {season_path}")
|
||||
for episode in season.episodes():
|
||||
matches = glob.glob(os.path.join(ad, folder, f"{episode.seasonEpisode.upper()}.*"))
|
||||
if len(matches) > 0:
|
||||
episode_path = os.path.abspath(matches[0])
|
||||
episode.uploadPoster(filepath=episode_path)
|
||||
logger.info(f"Detail: asset_directory updated {item.title} {episode.seasonEpisode.upper()}'s poster to [file] {episode_path}")
|
||||
|
||||
if builder.run_again and (len(builder.missing_movies) > 0 or len(builder.missing_shows) > 0):
|
||||
library.run_again.append(builder)
|
||||
|
||||
|
|
|
@ -189,6 +189,8 @@ class PlexAPI:
|
|||
self.missing_path = os.path.join(os.path.dirname(os.path.abspath(params["metadata_path"])), f"{os.path.splitext(os.path.basename(params['metadata_path']))[0]}_missing.yml")
|
||||
self.metadata_path = params["metadata_path"]
|
||||
self.asset_directory = params["asset_directory"]
|
||||
self.asset_folders = params["asset_folders"]
|
||||
self.assets_for_all = params["assets_for_all"]
|
||||
self.sync_mode = params["sync_mode"]
|
||||
self.show_unmanaged = params["show_unmanaged"]
|
||||
self.show_filtered = params["show_filtered"]
|
||||
|
@ -505,9 +507,7 @@ class PlexAPI:
|
|||
else:
|
||||
item.edit(**edits)
|
||||
item.reload()
|
||||
logger.debug(f"Details After Update: {advanced} {edits}")
|
||||
if advanced and "languageOverride" in edits:
|
||||
logger.debug("Item Refreshed")
|
||||
self.refresh_item(item.ratingKey)
|
||||
logger.info(f"{item_type}: {name}{' Advanced' if advanced else ''} Details Update Successful")
|
||||
except BadRequest:
|
||||
|
|
|
@ -89,7 +89,7 @@ util.centered("| |_) | |/ _ \\ \\/ / | |\\/| |/ _ \\ __/ _` | | |\\/| |/ _` | '_
|
|||
util.centered("| __/| | __/> < | | | | __/ || (_| | | | | | (_| | | | | (_| | (_| | __/ | ")
|
||||
util.centered("|_| |_|\\___/_/\\_\\ |_| |_|\\___|\\__\\__,_| |_| |_|\\__,_|_| |_|\\__,_|\\__, |\\___|_| ")
|
||||
util.centered(" |___/ ")
|
||||
util.centered(" Version: 1.7.2-Beta8 ")
|
||||
util.centered(" Version: 1.7.2-Beta9 ")
|
||||
util.separator()
|
||||
|
||||
if my_tests:
|
||||
|
|
Loading…
Reference in a new issue