Potential fix (to be tested) by refreshing queue before pulling it

This commit is contained in:
Benjamin Harder
2023-10-13 17:24:17 +02:00
parent 6779960e41
commit 53c7be0b31
4 changed files with 28 additions and 7 deletions

View File

@@ -1,7 +1,7 @@
# Cleans the download queue
import logging, verboselogs
logger = verboselogs.VerboseLogger(__name__)
from src.utils.rest import (rest_get, rest_delete)
from src.utils.rest import (rest_get, rest_delete, rest_post)
import json
from src.utils.nest_functions import (add_keys_nested_dict, nested_get)
import sys, os
@@ -12,6 +12,7 @@ class Deleted_Downloads:
self.dict = dict
async def get_queue(BASE_URL, API_KEY, params = {}):
await rest_post(url=BASE_URL+'/command', json={'name': 'RefreshMonitoredDownloads'}, headers={'X-Api-Key': API_KEY})
totalRecords = (await rest_get(f'{BASE_URL}/queue', API_KEY, params))['totalRecords']
if totalRecords == 0:
return None
@@ -53,6 +54,23 @@ async def remove_stalled(settings_dict, radarr_or_sonarr, BASE_URL, API_KEY, del
await check_permitted_attempts(settings_dict, stalledItems, 'stalled', True, deleted_downloads, BASE_URL, API_KEY, defective_tracker)
return len(stalledItems)
async def test_remove_ALL(settings_dict, radarr_or_sonarr, BASE_URL, API_KEY, deleted_downloads, defective_tracker):
# Detects stalled and triggers repeat check and subsequent delete. Adds to blocklist
queue = await get_queue(BASE_URL, API_KEY)
if not queue: return 0
logger.debug('remove_stalled_test/queue: %s', str(queue))
if settings_dict['QBITTORRENT_URL']:
protected_dowloadItems = await rest_get(settings_dict['QBITTORRENT_URL']+'/torrents/info',params={'tag': settings_dict['NO_STALLED_REMOVAL_QBIT_TAG']}, cookies=settings_dict['QBIT_COOKIE'] )
protected_downloadIDs = [str.upper(item['hash']) for item in protected_dowloadItems]
else:
protected_downloadIDs = []
stalledItems = []
for queueItem in queue['records']:
stalledItems.append(queueItem)
await check_permitted_attempts(settings_dict, stalledItems, 'stalled', True, deleted_downloads, BASE_URL, API_KEY, defective_tracker)
return len(stalledItems)
async def remove_metadata_missing(settings_dict, radarr_or_sonarr, BASE_URL, API_KEY, deleted_downloads, defective_tracker):
# Detects downloads stuck downloading meta data and triggers repeat check and subsequent delete. Adds to blocklist
queue = await get_queue(BASE_URL, API_KEY)
@@ -106,7 +124,6 @@ async def check_permitted_attempts(settings_dict, current_defective_items, failT
current_defective = {}
for queueItem in current_defective_items:
current_defective[queueItem['id']] = {'title': queueItem['title'],'downloadId': queueItem['downloadId']}
logger.debug('check_permitted_attempts/deleted_downloads: %s', str(deleted_downloads))
logger.debug('check_permitted_attempts/current_defective: %s', str(current_defective))
# 2. Check if those that were previously defective are no longer defective -> those are recovered
try:
@@ -137,7 +154,7 @@ async def remove_download(settings_dict, BASE_URL, API_KEY, queueId, queueTitle,
logger.debug('remove_download/deleted_downloads.dict IN: %s' + str(deleted_downloads.dict))
if downloadId not in deleted_downloads.dict:
logger.info('>>> Removing %s download: %s', failType, queueTitle)
if not settings_dict['TEST_RUN']: await rest_delete(f'{BASE_URL}/queue/{queueId}', API_KEY, {'removeFromClient': 'true', 'blocklist': blocklist})
if not settings_dict['TEST_RUN']: await rest_delete(f'{BASE_URL}/queue/{queueId}', API_KEY, {'removeFromClient': True, 'blocklist': blocklist})
deleted_downloads.dict.append(downloadId)
logger.debug('remove_download/deleted_downloads.dict OUT: %s' + str(deleted_downloads.dict))
@@ -166,6 +183,9 @@ async def queue_cleaner(settings_dict, radarr_or_sonarr, defective_tracker):
deleted_downloads = Deleted_Downloads([])
items_detected = 0
#items_detected += await test_remove_ALL( settings_dict, radarr_or_sonarr, BASE_URL, API_KEY, deleted_downloads, defective_tracker)
if settings_dict['REMOVE_FAILED']:
items_detected += await remove_failed( settings_dict, radarr_or_sonarr, BASE_URL, API_KEY, deleted_downloads)