mirror of
https://github.com/meisnate12/Plex-Meta-Manager
synced 2024-11-10 06:54:21 +00:00
[87] update metadata editions
This commit is contained in:
parent
c2d6aab2ca
commit
da018ec90f
3 changed files with 44 additions and 61 deletions
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
1.18.3-develop86
|
1.18.3-develop87
|
||||||
|
|
|
@ -1103,39 +1103,10 @@ class MetadataFile(DataFile):
|
||||||
methods = {mm.lower(): mm for mm in meta}
|
methods = {mm.lower(): mm for mm in meta}
|
||||||
|
|
||||||
logger.info("")
|
logger.info("")
|
||||||
logger.separator(f"{mapping_name} Metadata", space=False, border=False)
|
logger.separator(f"{mapping_name} Metadata")
|
||||||
logger.info("")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
item = None
|
|
||||||
if (isinstance(mapping_name, int) or mapping_name.startswith("tt")) and not self.library.is_music:
|
|
||||||
if isinstance(mapping_name, int):
|
|
||||||
id_type = "TMDb" if self.library.is_movie else "TVDb"
|
|
||||||
else:
|
|
||||||
id_type = "IMDb"
|
|
||||||
logger.separator(f"{id_type} ID: {mapping_name} Metadata", space=False, border=False)
|
|
||||||
logger.info("")
|
|
||||||
item = []
|
|
||||||
if self.library.is_movie and mapping_name in self.library.movie_map:
|
|
||||||
for item_id in self.library.movie_map[mapping_name]:
|
|
||||||
item.append(self.library.fetchItem(item_id))
|
|
||||||
elif self.library.is_show and mapping_name in self.library.show_map:
|
|
||||||
for item_id in self.library.show_map[mapping_name]:
|
|
||||||
item.append(self.library.fetchItem(item_id))
|
|
||||||
elif mapping_name in self.library.imdb_map:
|
|
||||||
for item_id in self.library.imdb_map[mapping_name]:
|
|
||||||
item.append(self.library.fetchItem(item_id))
|
|
||||||
else:
|
|
||||||
logger.error(f"Metadata Error: {id_type} ID not mapped")
|
|
||||||
continue
|
|
||||||
title = None
|
|
||||||
else:
|
|
||||||
logger.separator(f"{mapping_name} Metadata", space=False, border=False)
|
|
||||||
logger.info("")
|
|
||||||
title = mapping_name
|
|
||||||
|
|
||||||
if "template" in methods:
|
if "template" in methods:
|
||||||
|
logger.debug("")
|
||||||
logger.separator(f"Building Definition From Templates", space=False, border=False)
|
logger.separator(f"Building Definition From Templates", space=False, border=False)
|
||||||
logger.debug("")
|
logger.debug("")
|
||||||
named_templates = []
|
named_templates = []
|
||||||
|
@ -1148,7 +1119,6 @@ class MetadataFile(DataFile):
|
||||||
raise Failed(f"Metadata Error: template sub-attribute name cannot be blank")
|
raise Failed(f"Metadata Error: template sub-attribute name cannot be blank")
|
||||||
named_templates.append(original_variables["name"])
|
named_templates.append(original_variables["name"])
|
||||||
logger.debug(f"Templates Called: {', '.join(named_templates)}")
|
logger.debug(f"Templates Called: {', '.join(named_templates)}")
|
||||||
logger.debug("")
|
|
||||||
new_variables = {}
|
new_variables = {}
|
||||||
if "variables" in methods:
|
if "variables" in methods:
|
||||||
logger.debug("")
|
logger.debug("")
|
||||||
|
@ -1191,6 +1161,7 @@ class MetadataFile(DataFile):
|
||||||
if not mapping_id and (isinstance(mapping_name, int) or mapping_name.startswith("tt")) and not self.library.is_music:
|
if not mapping_id and (isinstance(mapping_name, int) or mapping_name.startswith("tt")) and not self.library.is_music:
|
||||||
mapping_id = mapping_name
|
mapping_id = mapping_name
|
||||||
|
|
||||||
|
item = []
|
||||||
if not mapping_id:
|
if not mapping_id:
|
||||||
title = mapping_name
|
title = mapping_name
|
||||||
else:
|
else:
|
||||||
|
@ -1198,8 +1169,8 @@ class MetadataFile(DataFile):
|
||||||
id_type = "IMDb"
|
id_type = "IMDb"
|
||||||
else:
|
else:
|
||||||
id_type = "TMDb" if self.library.is_movie else "TVDb"
|
id_type = "TMDb" if self.library.is_movie else "TVDb"
|
||||||
|
logger.info("")
|
||||||
logger.info(f"{id_type} ID Mapping: {mapping_id}")
|
logger.info(f"{id_type} ID Mapping: {mapping_id}")
|
||||||
item = []
|
|
||||||
if self.library.is_movie and mapping_name in self.library.movie_map:
|
if self.library.is_movie and mapping_name in self.library.movie_map:
|
||||||
for item_id in self.library.movie_map[mapping_name]:
|
for item_id in self.library.movie_map[mapping_name]:
|
||||||
item.append(self.library.fetchItem(item_id))
|
item.append(self.library.fetchItem(item_id))
|
||||||
|
@ -1220,19 +1191,16 @@ class MetadataFile(DataFile):
|
||||||
else:
|
else:
|
||||||
title = meta[methods["title"]]
|
title = meta[methods["title"]]
|
||||||
|
|
||||||
edition_titles = []
|
|
||||||
blank_edition = False
|
blank_edition = False
|
||||||
if "edition_filter" in methods and self.library.is_movie:
|
edition_titles = []
|
||||||
if not meta[methods["edition_filter"]]:
|
|
||||||
blank_edition = True
|
|
||||||
else:
|
|
||||||
edition_titles = util.get_list(meta[methods["edition_filter"]])
|
|
||||||
|
|
||||||
edition_contains = None
|
|
||||||
if "edition_contains" in methods and self.library.is_movie:
|
|
||||||
edition_contains = util.get_list(meta[methods["edition_contains"]])
|
|
||||||
if not edition_contains:
|
|
||||||
edition_contains = []
|
edition_contains = []
|
||||||
|
if self.library.is_movie:
|
||||||
|
if "blank_edition" in methods:
|
||||||
|
blank_edition = util.parse("Metadata", "blank_edition", meta, datatype="bool", methods=methods, default=False)
|
||||||
|
if "edition_filter" in methods:
|
||||||
|
edition_titles = util.parse("Metadata", "edition_filter", meta, datatype="strlist", methods=methods)
|
||||||
|
if "edition_contains" in methods:
|
||||||
|
edition_contains = util.parse("Metadata", "edition_contains", meta, datatype="strlist", methods=methods)
|
||||||
|
|
||||||
if not item:
|
if not item:
|
||||||
year = None
|
year = None
|
||||||
|
@ -1247,22 +1215,16 @@ class MetadataFile(DataFile):
|
||||||
pass
|
pass
|
||||||
if year is None:
|
if year is None:
|
||||||
raise Failed(f"Metadata Error: year attribute must be an integer between 1800 and {next_year}")
|
raise Failed(f"Metadata Error: year attribute must be an integer between 1800 and {next_year}")
|
||||||
if blank_edition and not edition_contains:
|
item = self.library.search_item(title, year=year)
|
||||||
edition_title = ""
|
|
||||||
elif len(edition_titles) == 1 and not edition_contains:
|
|
||||||
edition_title = edition_titles[0]
|
|
||||||
else:
|
|
||||||
edition_title = None
|
|
||||||
item = self.library.search_item(title, year=year, edition=edition_title)
|
|
||||||
|
|
||||||
if not item and "alt_title" in methods:
|
if not item and "alt_title" in methods:
|
||||||
if meta[methods["alt_title"]] is None:
|
if meta[methods["alt_title"]] is None:
|
||||||
logger.error("Metadata Error: alt_title attribute is blank")
|
logger.error("Metadata Error: alt_title attribute is blank")
|
||||||
else:
|
else:
|
||||||
alt_title = meta[methods["alt_title"]]
|
alt_title = meta[methods["alt_title"]]
|
||||||
item = self.library.search_item(alt_title, year=year, edition=edition_title)
|
item = self.library.search_item(alt_title, year=year)
|
||||||
if not item:
|
if not item:
|
||||||
item = self.library.search_item(alt_title, edition=edition_title)
|
item = self.library.search_item(alt_title)
|
||||||
|
|
||||||
if not item:
|
if not item:
|
||||||
logger.error(f"Skipping {mapping_name}: Item {title} not found")
|
logger.error(f"Skipping {mapping_name}: Item {title} not found")
|
||||||
|
@ -1271,15 +1233,36 @@ class MetadataFile(DataFile):
|
||||||
item = [item]
|
item = [item]
|
||||||
if blank_edition or edition_titles or edition_contains:
|
if blank_edition or edition_titles or edition_contains:
|
||||||
new_item = []
|
new_item = []
|
||||||
|
logger.trace("")
|
||||||
|
logger.trace("Edition Filtering: ")
|
||||||
for i in item:
|
for i in item:
|
||||||
if (blank_edition and not i.editionTitle) \
|
check = i.editionTitle if i.editionTitle else ""
|
||||||
or (edition_titles and i.editionTitle in edition_titles) \
|
if blank_edition and not check:
|
||||||
or (edition_contains and any([r in i.editionTitle for r in edition_contains])):
|
logger.trace(f" Found {i.title} with no Edition")
|
||||||
new_item.append(i)
|
new_item.append(i)
|
||||||
|
elif edition_titles and check in edition_titles:
|
||||||
|
logger.trace(f" Found {i.title} with Edition: {check}")
|
||||||
|
new_item.append(i)
|
||||||
|
else:
|
||||||
|
found = False
|
||||||
|
if edition_contains:
|
||||||
|
for ec in edition_contains:
|
||||||
|
if ec in check:
|
||||||
|
found = True
|
||||||
|
logger.trace(f" Found {i.title} with Edition: {check} containing {ec}")
|
||||||
|
new_item.append(i)
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
if check:
|
||||||
|
logger.trace(f" {i.title} with Edition: {check} ignored")
|
||||||
|
else:
|
||||||
|
logger.trace(f" {i.title} with no Edition ignored")
|
||||||
|
item = new_item
|
||||||
for i in item:
|
for i in item:
|
||||||
try:
|
try:
|
||||||
|
logger.info("")
|
||||||
logger.separator(f"Updating {i.title}", space=False, border=False)
|
logger.separator(f"Updating {i.title}", space=False, border=False)
|
||||||
|
logger.info("")
|
||||||
self.update_metadata_item(i, title, mapping_name, meta, methods)
|
self.update_metadata_item(i, title, mapping_name, meta, methods)
|
||||||
except Failed as e:
|
except Failed as e:
|
||||||
logger.error(e)
|
logger.error(e)
|
||||||
|
|
|
@ -804,9 +804,9 @@ def parse(error, attribute, data, datatype=None, methods=None, parent=None, defa
|
||||||
return value
|
return value
|
||||||
elif isinstance(value, (int, float)):
|
elif isinstance(value, (int, float)):
|
||||||
return value > 0
|
return value > 0
|
||||||
elif str(value).lower() in ["t", "true"]:
|
elif str(value).lower() in ["t", "true", "y", "yes"]:
|
||||||
return True
|
return True
|
||||||
elif str(value).lower() in ["f", "false"]:
|
elif str(value).lower() in ["f", "false", "n", "no"]:
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
message = f"{display} must be either true or false"
|
message = f"{display} must be either true or false"
|
||||||
|
|
Loading…
Reference in a new issue