Fixed other fields which were broken by changes in latest version of Stash

This commit is contained in:
David Maisonave
2024-11-06 05:01:26 -05:00
parent 4db1753e06
commit 9e6b0c21ad
5 changed files with 102 additions and 30 deletions

View File

@@ -802,6 +802,36 @@ class StashPluginHelper(StashInterface):
else:
self.Log(f"Skipping Job ID({jobDetails['id']}); description={jobDetails['description']}; {jobDetails})")
def toJson(self, data, replaceSingleQuote=False):
if replaceSingleQuote:
data = data.replace("'", '"')
data = data.replace("\\", "\\\\")
data = data.replace("\\\\\\\\", "\\\\")
return json.loads(data)
def isCorrectDbVersion(self, verNumber = 68):
results = self.sql_query("select version from schema_migrations")
# self.Log(results)
if len(results['rows']) == 0 or len(results['rows'][0]) == 0:
return False
return int(results['rows'][0][0]) == verNumber
def renameFileNameInDB(self, fileId, oldName, newName):
if self.isCorrectDbVersion():
query = f'update files set basename = "{newName}" where basename = "{oldName}" and id = {fileId};'
self.Trace(f"Executing query ({query})")
results = self.sql_commit(query)
if 'rows_affected' in results and results['rows_affected'] == 1:
return True
return False
def getFileNameFromDB(self, id):
results = self.sql_query(f'select basename from files where id = {id};')
self.Trace(f"results = ({results})")
if len(results['rows']) == 0 or len(results['rows'][0]) == 0:
return None
return results['rows'][0][0]
# ############################################################################################################
# Functions which are candidates to be added to parent class use snake_case naming convention.
# ############################################################################################################
@@ -926,7 +956,7 @@ class mergeMetadata: # A class to merge scene metadata from source scene to dest
self.mergeItems('tags', 'tag_ids', [], excludeName=self.excludeMergeTags)
self.mergeItems('performers', 'performer_ids', [])
self.mergeItems('galleries', 'gallery_ids', [])
# ToDo: Need to find out why the following line no longer works in new Stash version
# Looks like movies has been removed from new Stash version
# self.mergeItems('movies', 'movies', [])
self.mergeItems('urls', listToAdd=self.destData['urls'], NotStartWith=self.stash.STASH_URL)
self.mergeItem('studio', 'studio_id', 'id')

View File

@@ -956,7 +956,7 @@ class mergeMetadata: # A class to merge scene metadata from source scene to dest
self.mergeItems('tags', 'tag_ids', [], excludeName=self.excludeMergeTags)
self.mergeItems('performers', 'performer_ids', [])
self.mergeItems('galleries', 'gallery_ids', [])
# ToDo: Need to find out why the following line no longer works in new Stash version
# Looks like movies has been removed from new Stash version
# self.mergeItems('movies', 'movies', [])
self.mergeItems('urls', listToAdd=self.destData['urls'], NotStartWith=self.stash.STASH_URL)
self.mergeItem('studio', 'studio_id', 'id')

View File

@@ -1,4 +1,4 @@
# RenameFile: Ver 0.5.3 (By David Maisonave)
# RenameFile: Ver 0.5.4 (By David Maisonave)
RenameFile is a [Stash](https://github.com/stashapp/stash) plugin.
- The plugin allows user to rename one scene at a time by editing the **[Title]** field and then clicking **[Save]**.

View File

@@ -143,14 +143,57 @@ def should_exclude_path(scene_details):
return True
return False
include_keyField_if_in_name = stash.pluginSettings["z_keyFIeldsIncludeInFileName"]
excludeIgnoreAutoTags = config["excludeIgnoreAutoTags"]
def getPerformers(scene, title):
title = title.lower()
results = ""
for performer in scene['performers']:
name = stash.find_performer(performer['id'])['name']
stash.Trace(f"performer = {name}")
if not include_keyField_if_in_name:
if name.lower() in title:
stash.Trace(f"Skipping performer name '{name}' because already in title: '{title}'")
continue
results += f"{name}, "
return results.strip(", ")
def getGalleries(scene, title):
results = ""
for gallery in scene['galleries']:
name = stash.find_gallery(gallery['id'])['title']
stash.Trace(f"gallery = {name}")
if not include_keyField_if_in_name:
if name.lower() in title:
stash.Trace(f"Skipping gallery name '{name}' because already in title: '{title}'")
continue
results += f"{name}, "
return results.strip(", ")
def getTags(scene, title):
title = title.lower()
results = ""
for tag in scene['tags']:
tag_details = stash.find_tag(int(tag['id']))
name = tag_details['name']
stash.Trace(f"tag = {name}")
if excludeIgnoreAutoTags == True and tag_details['ignore_auto_tag'] == True:
stash.Trace(f"Skipping tag name '{name}' because ignore_auto_tag is True.")
continue
if not include_keyField_if_in_name:
if name.lower() in title:
stash.Trace(f"Skipping tag name '{name}' because already in title: '{title}'")
continue
results += f"{name}, "
return results.strip(", ")
# Function to form the new filename based on scene details and user settings
def form_filename(original_file_stem, scene_details):
filename_parts = []
tag_keys_added = 0
default_title = ''
if_notitle_use_org_filename = config["if_notitle_use_org_filename"]
excludeIgnoreAutoTags = config["excludeIgnoreAutoTags"]
include_keyField_if_in_name = stash.pluginSettings["z_keyFIeldsIncludeInFileName"]
if if_notitle_use_org_filename:
default_title = original_file_stem
# ...................
@@ -209,16 +252,14 @@ def form_filename(original_file_stem, scene_details):
filename_parts.append(title)
elif key == 'performers':
if stash.pluginSettings["performerAppend"]:
performers = '-'.join([performer.get('name', '') for performer in scene_details.get('performers', [])])
if performers:
performers = getPerformers(scene_details, title)
if performers != "":
performers += POSTFIX_STYLES.get('performers')
stash.Trace(f"(include_keyField_if_in_name={include_keyField_if_in_name})")
if include_keyField_if_in_name or performers.lower() not in title.lower():
stash.Trace(f"(performers={performers})")
if WRAPPER_STYLES.get('performers'):
filename_parts.append(f"{WRAPPER_STYLES['performers'][0]}{performers}{WRAPPER_STYLES['performers'][1]}")
else:
filename_parts.append(performers)
stash.Trace(f"(performers={performers})")
if WRAPPER_STYLES.get('performers'):
filename_parts.append(f"{WRAPPER_STYLES['performers'][0]}{performers}{WRAPPER_STYLES['performers'][1]}")
else:
filename_parts.append(performers)
elif key == 'date':
scene_date = scene_details.get('date', '')
if scene_date:
@@ -269,23 +310,24 @@ def form_filename(original_file_stem, scene_details):
if frame_rate not in title:
filename_parts.append(frame_rate)
elif key == 'galleries':
galleries = [gallery.get('title', '') for gallery in scene_details.get('galleries', [])]
for gallery_name in galleries:
stash.Trace(f"(include_keyField_if_in_name={include_keyField_if_in_name}) (gallery_name={gallery_name})")
if include_keyField_if_in_name or gallery_name.lower() not in title.lower():
gallery_name += POSTFIX_STYLES.get('galleries')
if WRAPPER_STYLES.get('galleries'):
filename_parts.append(f"{WRAPPER_STYLES['galleries'][0]}{gallery_name}{WRAPPER_STYLES['galleries'][1]}")
else:
filename_parts.append(gallery_name)
stash.Trace(f"(gallery_name={gallery_name})")
galleries = getGalleries(scene_details, title)
if galleries != "":
galleries += POSTFIX_STYLES.get('galleries')
if WRAPPER_STYLES.get('galleries'):
filename_parts.append(f"{WRAPPER_STYLES['galleries'][0]}{galleries}{WRAPPER_STYLES['galleries'][1]}")
else:
filename_parts.append(galleries)
stash.Trace(f"(galleries={galleries})")
elif key == 'tags':
if stash.pluginSettings["tagAppend"]:
for tag in scene_details['tags']:
stash.Trace(f"(include_keyField_if_in_name={include_keyField_if_in_name}) (tag_name={tag['name']}; ignore_auto_tag={tag['ignore_auto_tag']})")
if (excludeIgnoreAutoTags == False or tag['ignore_auto_tag'] == False) and (include_keyField_if_in_name or tag['name'].lower() not in title.lower()):
add_tag(tag['name'] + POSTFIX_STYLES.get('tag'))
stash.Trace(f"(tag_name={tag['name']})")
tags = getTags(scene_details, title)
if tags != "":
tags += POSTFIX_STYLES.get('tag')
if WRAPPER_STYLES.get('tag'):
filename_parts.append(f"{WRAPPER_STYLES['tag'][0]}{tags}{WRAPPER_STYLES['tag'][1]}")
else:
filename_parts.append(tags)
stash.Trace(f"(tags={tags})")
stash.Trace(f"(filename_parts={filename_parts})")
new_filename = separator.join(filename_parts).replace(double_separator, separator)

View File

@@ -1,6 +1,6 @@
name: RenameFile
description: Renames video (scene) file names when the user edits the [Title] field located in the scene [Edit] tab.
version: 0.5.3
version: 0.5.4
url: https://github.com/David-Maisonave/Axter-Stash/tree/main/plugins/RenameFile
settings:
performerAppend: