diff --git a/src/jobs/remove_failed_imports.py b/src/jobs/remove_failed_imports.py index bc26e73..dc2a7cf 100644 --- a/src/jobs/remove_failed_imports.py +++ b/src/jobs/remove_failed_imports.py @@ -20,19 +20,31 @@ async def remove_failed_imports(settingsDict, BASE_URL, API_KEY, NAME, deleted_d if queueItem['status'] == 'completed' \ and queueItem['trackedDownloadStatus'] == 'warning' \ - and (queueItem['trackedDownloadState'] == 'importPending' or queueItem['trackedDownloadState'] == 'importFailed' or queueItem['trackedDownloadState'] == 'importBlocked'): - + and queueItem['trackedDownloadState'] in {'importPending', 'importFailed', 'importBlocked'}: + + # Find messages that find specified pattern and put them into a "removal_message" that will be displayed in the logger when removing the affected item + removal_messages = ['Tracked Download State: ' + queueItem['trackedDownloadState']] for statusMessage in queueItem['statusMessages']: - if not settingsDict['FAILED_IMPORT_MESSAGE_PATTERNS'] or any(any(pattern in message for pattern in settingsDict['FAILED_IMPORT_MESSAGE_PATTERNS']) for message in statusMessage.get('messages', [])): - affectedItems.append(queueItem) + if not settingsDict['FAILED_IMPORT_MESSAGE_PATTERNS']: # No patterns defined - including all status messages in the removal_messages + removal_messages.append ('Status Messages (All):') + removal_messages.extend(f"- {msg}" for msg in statusMessage.get('messages', [])) break + removal_messages.append ('Status Messages (matching specified patterns):') + messages = statusMessage.get('messages', []) + for message in messages: + if any(pattern in message for pattern in settingsDict['FAILED_IMPORT_MESSAGE_PATTERNS']): + removal_messages.append(f"- {message}") + + queueItem['removal_messages'] = removal_messages + affectedItems.append(queueItem) + affectedItems = await execute_checks(settingsDict, affectedItems, failType, BASE_URL, API_KEY, NAME, deleted_downloads, defective_tracker, privateDowloadIDs, protectedDownloadIDs, addToBlocklist = True, doPrivateTrackerCheck = False, doProtectedDownloadCheck = True, doPermittedAttemptsCheck = False, - extraParameters = ['keepTorrentForPrivateTrackers'] + extraParameters = {'keepTorrentForPrivateTrackers': True} ) return len(affectedItems) except Exception as error: diff --git a/src/utils/shared.py b/src/utils/shared.py index aca8f12..b3b7d42 100644 --- a/src/utils/shared.py +++ b/src/utils/shared.py @@ -78,9 +78,10 @@ async def execute_checks(settingsDict, affectedItems, failType, BASE_URL, API_KE for affectedItem in affectedItems: # Checks whether when removing the queue item from the *arr app the torrent should be kept removeFromClient = True - if 'keepTorrentForPrivateTrackers' in extraParameters: + if extraParameters.get('keepTorrentForPrivateTrackers', False): if settingsDict['IGNORE_PRIVATE_TRACKERS'] and affectedItem['downloadId'] in privateDowloadIDs: removeFromClient = False + # Removes the queue item await remove_download(settingsDict, BASE_URL, API_KEY, affectedItem, failType, addToBlocklist, deleted_downloads, removeFromClient) # Exit Logs @@ -133,10 +134,19 @@ async def remove_download(settingsDict, BASE_URL, API_KEY, affectedItem, failTyp # Removes downloads and creates log entry logger.debug('remove_download/deleted_downloads.dict IN: %s', str(deleted_downloads.dict)) if affectedItem['downloadId'] not in deleted_downloads.dict: + # "schizophrenic" removal: + # Yes, the failed imports are removed from the -arr apps (so the removal kicks still in) + # But in the torrent client they are kept if removeFromClient: logger.info('>>> Removing %s download: %s', failType, affectedItem['title']) else: - logger.info('>>> Removing %s download (without removing torrent): %s', failType, affectedItem['title']) + logger.info('>>> Removing %s download (without removing from torrent client): %s', failType, affectedItem['title']) + + # Print out detailed removal messages (if any were added in the jobs) + if removal_messages in affectedItem: + for removal_message in affectedItem.removal_messages: + logger.info(removal_message) + if not settingsDict['TEST_RUN']: await rest_delete(f'{BASE_URL}/queue/{affectedItem["id"]}', API_KEY, {'removeFromClient': removeFromClient, 'blocklist': addToBlocklist}) deleted_downloads.dict.append(affectedItem['downloadId'])