diff --git a/main.py b/main.py index 9500f71..480f6c7 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,9 @@ -########### Import Libraries +# Import Libraries import asyncio import logging, verboselogs logger = verboselogs.VerboseLogger(__name__) import json -########### Import Functions +# Import Functions from config.config import settingsDict from src.utils.loadScripts import * from src.decluttarr import queueCleaner @@ -14,10 +14,10 @@ if settingsDict['SSL_VERIFICATION']==False: import warnings warnings.filterwarnings("ignore", message="Unverified HTTPS request") -########### Enabling Logging # Set up logging setLoggingFormat(settingsDict) +# Set up classes that allow tracking of items from one loop to the next class Defective_Tracker: # Keeps track of which downloads were already caught as stalled previously def __init__(self, dict): @@ -27,9 +27,28 @@ class Download_Sizes_Tracker: def __init__(self, dict): self.dict = dict +# + +async def getProtectedAndPrivateFromQbit(settingsDict): + # Returns two lists containing the hashes of Qbit that are either protected by tag, or are private trackers (if IGNORE_PRIVATE_TRACKERS is true) + protectedDownloadIDs = [] + privateDowloadIDs = [] + if settingsDict['QBITTORRENT_URL']: + # Fetch all torrents + qbitItems = await rest_get(settingsDict['QBITTORRENT_URL']+'/torrents/info',params={}, cookies=settingsDict['QBIT_COOKIE'] ) + logger.debug('main/getProtectedAndPrivateFromQbit/qbitItems: %s', str([{"hash": str.upper(item["hash"]), "name": item["name"], "tags": item["tags"], "is_private": item.get("is_private", None)} for item in qbitItems])) + for qbitItem in qbitItems: + if settingsDict['NO_STALLED_REMOVAL_QBIT_TAG'] in qbitItem.get('tags'): + protectedDownloadIDs.append(str.upper(qbitItem['hash'])) + if settingsDict['IGNORE_PRIVATE_TRACKERS'] and qbitItem.get('is_private', False): + privateDowloadIDs.append(str.upper(qbitItem['hash'])) + logger.debug('main/getProtectedAndPrivateFromQbit/protectedDownloadIDs: %s', str(protectedDownloadIDs)) + logger.debug('main/getProtectedAndPrivateFromQbit/privateDowloadIDs: %s', str(privateDowloadIDs)) + return protectedDownloadIDs, privateDowloadIDs + # Main function async def main(settingsDict): - # Adds to settings Dict the instances that are actually configures +# Adds to settings Dict the instances that are actually configures arrApplications = ['RADARR', 'SONARR', 'LIDARR', 'READARR'] settingsDict['INSTANCES'] = [] for arrApplication in arrApplications: @@ -68,23 +87,8 @@ async def main(settingsDict): while True: logger.verbose('-' * 50) # Cache protected (via Tag) and private torrents - protectedDownloadIDs = [] - privateDowloadIDs = [] - logger.debug('TEST 0') - if settingsDict['QBITTORRENT_URL']: - protectedDowloadItems = await rest_get(settingsDict['QBITTORRENT_URL']+'/torrents/info',params={'tag': settingsDict['NO_STALLED_REMOVAL_QBIT_TAG']}, cookies=settingsDict['QBIT_COOKIE'] ) - logger.debug('TEST1') - protectedDownloadIDs = [str.upper(item['hash']) for item in protectedDowloadItems] - if settingsDict['IGNORE_PRIVATE_TRACKERS']: - logger.debug('TEST2') - privateDowloadItems = await rest_get(settingsDict['QBITTORRENT_URL']+'/torrents/info',params={}, cookies=settingsDict['QBIT_COOKIE'] ) - logger.debug('qbit queue:') - logger.debug(json.dumps(privateDowloadItems,indent=3)) - privateDowloadIDs = [str.upper(item['hash']) for item in privateDowloadItems if item.get('is_private', False)] - - logger.debug('main/protectedDownloadIDs: %s', str(protectedDownloadIDs)) - logger.debug('main/privateDowloadIDs: %s', str(privateDowloadIDs)) - exit() + protectedDownloadIDs, privateDowloadIDs = await getProtectedAndPrivateFromQbit(settingsDict) + # Run script for each instance for instance in settingsDict['INSTANCES']: await queueCleaner(settingsDict, instance, defective_tracker, download_sizes_tracker, protectedDownloadIDs, privateDowloadIDs) diff --git a/src/utils/shared.py b/src/utils/shared.py index 1d2ebf6..2578f00 100644 --- a/src/utils/shared.py +++ b/src/utils/shared.py @@ -79,9 +79,7 @@ async def execute_checks(settingsDict, affectedItems, failType, BASE_URL, API_KE # Checks whether when removing the queue item from the *arr app the torrent should be kept removeFromClient = True if 'keepTorrentForPrivateTrackers' in extraParameters: - logger.debug('OK 1') if settingsDict['IGNORE_PRIVATE_TRACKERS'] and affectedItem['downloadId'] in privateDowloadIDs: - logger.debug('OK 2') removeFromClient = False # Removes the queue item await remove_download(settingsDict, BASE_URL, API_KEY, affectedItem, failType, addToBlocklist, deleted_downloads, removeFromClient)