mirror of
https://github.com/stashapp/CommunityScripts.git
synced 2026-04-12 19:41:51 -05:00
[nfoSceneParser] new config options (#586)
This commit is contained in:
@@ -10,6 +10,11 @@ dry_mode = False
|
||||
# ! Not yet implemented. Currently, only "with files" is supported
|
||||
nfo_location = "with files"
|
||||
|
||||
# By default the plugin will look for an nfo based on file name:
|
||||
# "Movie Title (2023).nfo"
|
||||
# If you want to use a custom file name eg. "movie.nfo", set it here.
|
||||
custom_nfo_name = ""
|
||||
|
||||
# If True, will never update already "organized" scenes.
|
||||
skip_organized = True
|
||||
|
||||
@@ -41,6 +46,15 @@ create_missing_studios = True
|
||||
create_missing_tags = True
|
||||
create_missing_movies = True
|
||||
|
||||
# Choose which field should be parsed into user rating
|
||||
# and if it should be multiplied by a factor.
|
||||
user_rating_field = "userrating"
|
||||
user_rating_multiplier = 1
|
||||
|
||||
# Let you decide from where genres should be loaded from.
|
||||
# Possible values: "tags", "genres", "both"
|
||||
load_tags_from = "both"
|
||||
|
||||
###############################################################################
|
||||
# Do not change config below unless you are absolutely sure of what you do...
|
||||
###############################################################################
|
||||
|
||||
@@ -16,13 +16,16 @@ class NfoParser(AbstractParser):
|
||||
self._defaults = defaults
|
||||
# Finds nfo file
|
||||
self._nfo_file = None
|
||||
dir_path = os.path.dirname(scene_path)
|
||||
if config.nfo_location.lower() == "with files":
|
||||
if folder_mode:
|
||||
# look in current dir & parents for a folder.nfo file...
|
||||
dir_path = os.path.dirname(scene_path)
|
||||
self._nfo_file = self._find_in_parents(dir_path, "folder.nfo")
|
||||
else:
|
||||
self._nfo_file = os.path.splitext(scene_path)[0] + ".nfo"
|
||||
if len(getattr(config, "custom_nfo_name", "")) > 0:
|
||||
self._nfo_file = os.path.join(dir_path, config.custom_nfo_name)
|
||||
else:
|
||||
self._nfo_file = os.path.splitext(scene_path)[0] + ".nfo"
|
||||
# else:
|
||||
# TODO: support dedicated dir instead of "with files" (compatibility with nfo exporters)
|
||||
self._nfo_root = None
|
||||
@@ -56,7 +59,7 @@ class NfoParser(AbstractParser):
|
||||
# Not found? Look tor folder image...
|
||||
path_dir = os.path.dirname(self._nfo_file)
|
||||
folder_files = sorted(glob.glob(f"{glob.escape(path_dir)}{os.path.sep}*.*"))
|
||||
folder_pattern = re.compile("^.*(landscape\\d{0,2}|thumb\\d{0,2}|poster\\d{0,2}|cover\\d{0,2})\\.(jpe?g|png|webp)$", re.I)
|
||||
folder_pattern = re.compile("^.*(landscape\\d{0,2}|thumb\\d{0,2}|poster\\d{0,2}|folder\\d{0,2}|cover\\d{0,2})\\.(jpe?g|png|webp)$", re.I)
|
||||
result = self.__match_image_files(folder_files, folder_pattern)
|
||||
return result
|
||||
|
||||
@@ -103,7 +106,8 @@ class NfoParser(AbstractParser):
|
||||
return file_images
|
||||
|
||||
def __extract_nfo_rating(self):
|
||||
user_rating = round(float(self._nfo_root.findtext("userrating") or 0))
|
||||
multiplier = getattr(config, "user_rating_multiplier", 1)
|
||||
user_rating = round(float(self._nfo_root.findtext(getattr(config, "user_rating_field", "userrating")) or 0) * multiplier)
|
||||
if user_rating > 0:
|
||||
return user_rating
|
||||
# <rating> is converted to a scale of 5 if needed
|
||||
@@ -124,17 +128,20 @@ class NfoParser(AbstractParser):
|
||||
return self._nfo_root.findtext("premiered") or year
|
||||
|
||||
def __extract_nfo_tags(self):
|
||||
source = getattr(config, "load_tags_from", "both").lower()
|
||||
file_tags = []
|
||||
# from nfo <tag>
|
||||
tags = self._nfo_root.findall("tag")
|
||||
for tag in tags:
|
||||
if tag.text:
|
||||
file_tags.append(tag.text)
|
||||
# from nfo <genre>
|
||||
genres = self._nfo_root.findall("genre")
|
||||
for genre in genres:
|
||||
if genre.text:
|
||||
file_tags.append(genre.text)
|
||||
if source in ["tags", "both"]:
|
||||
# from nfo <tag>
|
||||
tags = self._nfo_root.findall("tag")
|
||||
for tag in tags:
|
||||
if tag.text:
|
||||
file_tags.append(tag.text)
|
||||
if source in ["genres", "both"]:
|
||||
# from nfo <genre>
|
||||
genres = self._nfo_root.findall("genre")
|
||||
for genre in genres:
|
||||
if genre.text:
|
||||
file_tags.append(genre.text)
|
||||
return list(set(file_tags))
|
||||
|
||||
def __extract_nfo_actors(self):
|
||||
@@ -147,6 +154,8 @@ class NfoParser(AbstractParser):
|
||||
|
||||
def parse(self):
|
||||
if not self._nfo_file or not os.path.exists(self._nfo_file):
|
||||
if self._nfo_file:
|
||||
log.LogDebug(f"The NFO file \"{os.path.split(self._nfo_file)[1]}\" was not found")
|
||||
return {}
|
||||
log.LogDebug("Parsing '{}'".format(self._nfo_file))
|
||||
# Parse NFO xml content
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: nfoSceneParser
|
||||
description: Fills scene data from NFO or filename pattern
|
||||
url: https://github.com/stashapp/CommunityScripts/tree/main/plugins/nfoSceneParser
|
||||
version: 1.3.1
|
||||
version: 1.4.0
|
||||
exec:
|
||||
- python
|
||||
- "{pluginDir}/nfoSceneParser.py"
|
||||
@@ -16,4 +16,4 @@ tasks:
|
||||
description: Reload all scenes that have specific "marker" tag (see plugin's config.py)
|
||||
defaultArgs:
|
||||
mode: reload
|
||||
# Last Updated January 3, 2024
|
||||
# Last Updated June 24, 2025
|
||||
|
||||
@@ -149,6 +149,7 @@ class StashInterface:
|
||||
"date": scene_data["date"],
|
||||
"rating100": scene_data["rating"],
|
||||
"urls": scene_data["urls"],
|
||||
"studio_id": scene_data["studio_id"],
|
||||
"code": scene_data["code"],
|
||||
"performer_ids": scene_data["performer_ids"],
|
||||
"tag_ids": scene_data["tag_ids"],
|
||||
|
||||
Reference in New Issue
Block a user