mirror of
https://github.com/ManiMatter/decluttarr.git
synced 2026-04-21 00:05:35 +02:00
90 lines
4.6 KiB
Python
90 lines
4.6 KiB
Python
# Cleans the download queue
|
|
import logging, verboselogs
|
|
logger = verboselogs.VerboseLogger(__name__)
|
|
from src.utils.shared import (errorDetails, get_queue)
|
|
from src.jobs.remove_failed import remove_failed
|
|
from src.jobs.remove_failed_imports import remove_failed_imports
|
|
from src.jobs.remove_metadata_missing import remove_metadata_missing
|
|
from src.jobs.remove_missing_files import remove_missing_files
|
|
from src.jobs.remove_orphans import remove_orphans
|
|
from src.jobs.remove_slow import remove_slow
|
|
from src.jobs.remove_stalled import remove_stalled
|
|
from src.jobs.remove_unmonitored import remove_unmonitored
|
|
from src.utils.trackers import Deleted_Downloads
|
|
|
|
async def queueCleaner(settingsDict, arr_type, defective_tracker, download_sizes_tracker, protectedDownloadIDs, privateDowloadIDs):
|
|
# Read out correct instance depending on radarr/sonarr flag
|
|
run_dict = {}
|
|
if arr_type == 'RADARR':
|
|
BASE_URL = settingsDict['RADARR_URL']
|
|
API_KEY = settingsDict['RADARR_KEY']
|
|
NAME = settingsDict['RADARR_NAME']
|
|
full_queue_param = 'includeUnknownMovieItems'
|
|
elif arr_type == 'SONARR':
|
|
BASE_URL = settingsDict['SONARR_URL']
|
|
API_KEY = settingsDict['SONARR_KEY']
|
|
NAME = settingsDict['SONARR_NAME']
|
|
full_queue_param = 'includeUnknownSeriesItems'
|
|
elif arr_type == 'LIDARR':
|
|
BASE_URL = settingsDict['LIDARR_URL']
|
|
API_KEY = settingsDict['LIDARR_KEY']
|
|
NAME = settingsDict['LIDARR_NAME']
|
|
full_queue_param = 'includeUnknownArtistItems'
|
|
elif arr_type == 'READARR':
|
|
BASE_URL = settingsDict['READARR_URL']
|
|
API_KEY = settingsDict['READARR_KEY']
|
|
NAME = settingsDict['READARR_NAME']
|
|
full_queue_param = 'includeUnknownAuthorItems'
|
|
elif arr_type == 'WHISPARR':
|
|
BASE_URL = settingsDict['WHISPARR_URL']
|
|
API_KEY = settingsDict['WHISPARR_KEY']
|
|
NAME = settingsDict['WHISPARR_NAME']
|
|
full_queue_param = 'includeUnknownSeriesItems'
|
|
else:
|
|
logger.error('Unknown arr_type specified, exiting: %s', str(arr_type))
|
|
sys.exit()
|
|
|
|
# Cleans up the downloads queue
|
|
logger.verbose('Cleaning queue on %s:', NAME)
|
|
|
|
full_queue = await get_queue(BASE_URL, API_KEY, params = {full_queue_param: True})
|
|
if not full_queue:
|
|
logger.verbose('>>> Queue is empty.')
|
|
return
|
|
else:
|
|
logger.debug('queueCleaner/full_queue at start:')
|
|
logger.debug(full_queue)
|
|
|
|
deleted_downloads = Deleted_Downloads([])
|
|
items_detected = 0
|
|
try:
|
|
if settingsDict['REMOVE_FAILED']:
|
|
items_detected += await remove_failed( settingsDict, BASE_URL, API_KEY, NAME, deleted_downloads, defective_tracker, protectedDownloadIDs, privateDowloadIDs)
|
|
|
|
if settingsDict['REMOVE_FAILED_IMPORTS']:
|
|
items_detected += await remove_failed_imports( settingsDict, BASE_URL, API_KEY, NAME, deleted_downloads, defective_tracker, protectedDownloadIDs, privateDowloadIDs)
|
|
|
|
if settingsDict['REMOVE_METADATA_MISSING']:
|
|
items_detected += await remove_metadata_missing( settingsDict, BASE_URL, API_KEY, NAME, deleted_downloads, defective_tracker, protectedDownloadIDs, privateDowloadIDs)
|
|
|
|
if settingsDict['REMOVE_MISSING_FILES']:
|
|
items_detected += await remove_missing_files( settingsDict, BASE_URL, API_KEY, NAME, deleted_downloads, defective_tracker, protectedDownloadIDs, privateDowloadIDs)
|
|
|
|
if settingsDict['REMOVE_ORPHANS']:
|
|
items_detected += await remove_orphans( settingsDict, BASE_URL, API_KEY, NAME, deleted_downloads, defective_tracker, protectedDownloadIDs, privateDowloadIDs, full_queue_param)
|
|
|
|
if settingsDict['REMOVE_SLOW']:
|
|
items_detected += await remove_slow( settingsDict, BASE_URL, API_KEY, NAME, deleted_downloads, defective_tracker, protectedDownloadIDs, privateDowloadIDs, download_sizes_tracker)
|
|
|
|
if settingsDict['REMOVE_STALLED']:
|
|
items_detected += await remove_stalled( settingsDict, BASE_URL, API_KEY, NAME, deleted_downloads, defective_tracker, protectedDownloadIDs, privateDowloadIDs)
|
|
|
|
if settingsDict['REMOVE_UNMONITORED']:
|
|
items_detected += await remove_unmonitored( settingsDict, BASE_URL, API_KEY, NAME, deleted_downloads, defective_tracker, protectedDownloadIDs, privateDowloadIDs, arr_type)
|
|
|
|
if items_detected == 0:
|
|
logger.verbose('>>> Queue is clean.')
|
|
except Exception as error:
|
|
errorDetails(NAME, error)
|
|
return
|