Fixed studio bug caused by new Stash version change.

This commit is contained in:
David Maisonave
2024-11-06 03:23:06 -05:00
parent daa2c7990c
commit 15adc60c3b
3 changed files with 79 additions and 12 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.
# ############################################################################################################

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.
# ############################################################################################################

View File

@@ -78,10 +78,12 @@ try:
if stash.JSON_INPUT['args']['hookContext']['input']:
if stash.JSON_INPUT['args']['hookContext']['input'] == None:
doNothing = True
stash.Log("input = None")
else:
inputToUpdateScenePost = True # This avoids calling rename logic twice
except:
pass
stash.Warn("Exception thrown")
if dry_run:
stash.Log("Dry run mode is enabled.")
@@ -182,21 +184,22 @@ def form_filename(original_file_stem, scene_details):
stash.Log(f"Skipping tag not in whitelist: {tag_name}")
stash.Trace(f"(tag_keys_added={tag_keys_added})")
stash.Trace(f"scene_details = {scene_details}")
for key in fieldKeyList:
if key == 'studio':
if stash.pluginSettings["studioAppend"]:
studio_name = scene_details.get('studio', {})
studio_name = scene_details.get('code', {})
stash.Trace(f"(studio_name={studio_name})")
if studio_name:
studio_name = scene_details.get('studio', {}).get('name', '')
stash.Trace(f"(studio_name={studio_name})")
if studio_name:
studio_name += POSTFIX_STYLES.get('studio')
if include_keyField_if_in_name or studio_name.lower() not in title.lower():
if WRAPPER_STYLES.get('studio'):
filename_parts.append(f"{WRAPPER_STYLES['studio'][0]}{studio_name}{WRAPPER_STYLES['studio'][1]}")
else:
filename_parts.append(studio_name)
studio_name += POSTFIX_STYLES.get('studio')
if include_keyField_if_in_name or studio_name.lower() not in title.lower():
if WRAPPER_STYLES.get('studio'):
filename_parts.append(f"{WRAPPER_STYLES['studio'][0]}{studio_name}{WRAPPER_STYLES['studio'][1]}")
else:
filename_parts.append(studio_name)
else:
stash.Trace("Skipping studio because of user setting studioAppend disabled.")
elif key == 'title':
if title: # This value has already been fetch in start of function because it needs to be defined before tags and performers
title += POSTFIX_STYLES.get('title')
@@ -310,7 +313,9 @@ def rename_scene(scene_id):
maxScanCountForUpdate = 10
if scene_details['title'] == None or scene_details['title'] == "":
if renameEvenIfTitleEmpty == False:
stash.Log("Nothing to do because title is empty.")
return None
stash.Warn("Title is empty.")
maxScanCountDefault = 1
maxScanCountForUpdate = 1
if not os.path.isfile(original_file_path) and not taskqueue.clearDupTagsJobOnTaskQueue() and not taskqueue.deleteTaggedScenesJobOnTaskQueue() and not taskqueue.tooManyScanOnTaskQueue(maxScanCountDefault):
@@ -340,7 +345,7 @@ def rename_scene(scene_id):
new_filename = truncated_filename + '_' + hash_suffix + Path(original_file_path).suffix
newFilenameWithExt = new_filename + Path(original_file_path).suffix
new_file_path = f"{original_parent_directory}{os.sep}{new_filename}{Path(original_file_name).suffix}"
stash.Trace(f"(original_file_name={original_file_name})(new_file_path={new_file_path})")
stash.Trace(f"(original_file_name={original_file_name}) (newFilenameWithExt={newFilenameWithExt})(new_file_path={new_file_path}) (FileID={scene_details['files'][0]['id']})")
if original_file_name == newFilenameWithExt or original_file_name == new_filename:
stash.Log(f"Nothing to do, because new file name matches original file name: (newFilenameWithExt={newFilenameWithExt})")
return None
@@ -375,7 +380,9 @@ def rename_scene(scene_id):
# ToDo: Add delay rename here
raise
if not taskqueue.tooManyScanOnTaskQueue(maxScanCountForUpdate):
if stash.renameFileNameInDB(scene_details['files'][0]['id'], original_file_name, newFilenameWithExt):
stash.Trace("DB rename success")
elif not taskqueue.tooManyScanOnTaskQueue(maxScanCountForUpdate):
stash.Trace(f"Calling [metadata_scan] for path {original_parent_directory.resolve().as_posix()}")
stash.metadata_scan(paths=[original_parent_directory.resolve().as_posix()])
time.sleep(POST_SCAN_DELAY) # After a scan, need a few seconds delay before fetching data.