mirror of
https://github.com/StuffAnThings/qbit_manage.git
synced 2025-10-10 14:00:12 +08:00
bug fix: remove unregistered torrents
better handling of unregistered torrents by matching full word
This commit is contained in:
parent
add5ed05b2
commit
2e03283465
3 changed files with 27 additions and 12 deletions
1
.flake8
1
.flake8
|
@ -8,4 +8,5 @@ ignore =
|
||||||
E272, # E272 Multiple spaces before keyword
|
E272, # E272 Multiple spaces before keyword
|
||||||
C901 # C901 Function is too complex
|
C901 # C901 Function is too complex
|
||||||
E722 # E722 Do not use bare except, specify exception instead
|
E722 # E722 Do not use bare except, specify exception instead
|
||||||
|
W503 # W503 Line break occurred before a binary operator
|
||||||
max-line-length = 200
|
max-line-length = 200
|
|
@ -1,7 +1,7 @@
|
||||||
import logging, os, sys
|
import logging, os, sys
|
||||||
from qbittorrentapi import Client, Version, LoginFailed, APIConnectionError, NotFound404Error, Conflict409Error
|
from qbittorrentapi import Client, Version, LoginFailed, APIConnectionError, NotFound404Error, Conflict409Error
|
||||||
from modules import util
|
from modules import util
|
||||||
from modules.util import Failed, print_line, print_multiline, separator
|
from modules.util import Failed, print_line, print_multiline, separator, list_in_text
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from fnmatch import fnmatch
|
from fnmatch import fnmatch
|
||||||
|
@ -113,12 +113,12 @@ class Qbt:
|
||||||
if x.url.startswith('http'):
|
if x.url.startswith('http'):
|
||||||
status = x.status
|
status = x.status
|
||||||
msg = x.msg.upper()
|
msg = x.msg.upper()
|
||||||
exception = ["DOWN", "UNREACHABLE", "BAD GATEWAY", "TRACKER UNAVAILABLE"]
|
exception = set(["DOWN", "UNREACHABLE", "BAD GATEWAY", "TRACKER UNAVAILABLE"])
|
||||||
if x.status == 2:
|
if x.status == 2:
|
||||||
working_tracker = True
|
working_tracker = True
|
||||||
break
|
break
|
||||||
# Add any potential unregistered torrents to a list
|
# Add any potential unregistered torrents to a list
|
||||||
if x.status == 4 and all(x not in msg for x in exception):
|
if x.status == 4 and not list_in_text(msg, exception):
|
||||||
issue['potential'] = True
|
issue['potential'] = True
|
||||||
issue['msg'] = msg
|
issue['msg'] = msg
|
||||||
issue['status'] = status
|
issue['status'] = status
|
||||||
|
@ -469,7 +469,7 @@ class Qbt:
|
||||||
if cfg_rem_unregistered or cfg_tag_error:
|
if cfg_rem_unregistered or cfg_tag_error:
|
||||||
if cfg_tag_error: separator("Tagging Torrents with Tracker Errors", space=False, border=False)
|
if cfg_tag_error: separator("Tagging Torrents with Tracker Errors", space=False, border=False)
|
||||||
elif cfg_rem_unregistered: separator("Removing Unregistered Torrents", space=False, border=False)
|
elif cfg_rem_unregistered: separator("Removing Unregistered Torrents", space=False, border=False)
|
||||||
unreg_msgs = [
|
unreg_msgs = set([
|
||||||
'UNREGISTERED',
|
'UNREGISTERED',
|
||||||
'TORRENT NOT FOUND',
|
'TORRENT NOT FOUND',
|
||||||
'TORRENT IS NOT FOUND',
|
'TORRENT IS NOT FOUND',
|
||||||
|
@ -480,13 +480,14 @@ class Qbt:
|
||||||
'RETITLED',
|
'RETITLED',
|
||||||
'TRUNCATED',
|
'TRUNCATED',
|
||||||
'TORRENT IS NOT AUTHORIZED FOR USE ON THIS TRACKER'
|
'TORRENT IS NOT AUTHORIZED FOR USE ON THIS TRACKER'
|
||||||
]
|
])
|
||||||
ignore_msgs = [
|
ignore_msgs = set([
|
||||||
'YOU HAVE REACHED THE CLIENT LIMIT FOR THIS TORRENT',
|
'YOU HAVE REACHED THE CLIENT LIMIT FOR THIS TORRENT',
|
||||||
'MISSING PASSKEY',
|
'MISSING PASSKEY',
|
||||||
'MISSING INFO_HASH',
|
'MISSING INFO_HASH',
|
||||||
'PASSKEY IS INVALID'
|
'PASSKEY IS INVALID',
|
||||||
]
|
'INVALID PASSKEY'
|
||||||
|
])
|
||||||
for torrent in self.torrentvalid:
|
for torrent in self.torrentvalid:
|
||||||
check_tags = util.get_list(torrent.tags)
|
check_tags = util.get_list(torrent.tags)
|
||||||
# Remove any error torrents Tags that are no longer unreachable.
|
# Remove any error torrents Tags that are no longer unreachable.
|
||||||
|
@ -528,16 +529,16 @@ class Qbt:
|
||||||
tag_tracker_error()
|
tag_tracker_error()
|
||||||
if cfg_rem_unregistered:
|
if cfg_rem_unregistered:
|
||||||
# Tag any error torrents that are not unregistered
|
# Tag any error torrents that are not unregistered
|
||||||
if not any(m in msg_up for m in unreg_msgs) and x.status == 4 and tag_error not in check_tags:
|
if not list_in_text(msg_up, unreg_msgs) and x.status == 4 and tag_error not in check_tags:
|
||||||
# Check for unregistered torrents using BHD API if the tracker is BHD
|
# Check for unregistered torrents using BHD API if the tracker is BHD
|
||||||
if 'tracker.beyond-hd.me' in tracker['url'] and self.config.BeyondHD is not None and all(x not in msg_up for x in ignore_msgs):
|
if 'tracker.beyond-hd.me' in tracker['url'] and self.config.BeyondHD is not None and not list_in_text(msg_up, ignore_msgs):
|
||||||
json = {"info_hash": torrent.hash}
|
json = {"info_hash": torrent.hash}
|
||||||
response = self.config.BeyondHD.search(json)
|
response = self.config.BeyondHD.search(json)
|
||||||
if response['total_results'] <= 1:
|
if response['total_results'] <= 1:
|
||||||
del_unregistered()
|
del_unregistered()
|
||||||
break
|
break
|
||||||
tag_tracker_error()
|
tag_tracker_error()
|
||||||
if any(m in msg_up for m in unreg_msgs) and x.status == 4:
|
if list_in_text(msg_up, unreg_msgs) and x.status == 4:
|
||||||
del_unregistered()
|
del_unregistered()
|
||||||
break
|
break
|
||||||
except NotFound404Error:
|
except NotFound404Error:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import logging, os, shutil, traceback, time, signal, json
|
import logging, os, shutil, traceback, time, signal, json, re
|
||||||
from logging.handlers import RotatingFileHandler
|
from logging.handlers import RotatingFileHandler
|
||||||
from ruamel import yaml
|
from ruamel import yaml
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
@ -189,6 +189,19 @@ def add_dict_list(keys, value, dict_map):
|
||||||
dict_map[key] = [value]
|
dict_map[key] = [value]
|
||||||
|
|
||||||
|
|
||||||
|
def list_in_text(text, search_list, all=False):
|
||||||
|
length = len(search_list)
|
||||||
|
num = 0
|
||||||
|
pattern = re.compile(r'\b'
|
||||||
|
+ r'\b|\b'.join(re.escape(x) for x in search_list)
|
||||||
|
+ r'\b')
|
||||||
|
for t in set(pattern.findall(text)):
|
||||||
|
num += 1
|
||||||
|
if not all: return True
|
||||||
|
if(num == length and all): return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def print_line(lines, loglevel='INFO'):
|
def print_line(lines, loglevel='INFO'):
|
||||||
logger.log(getattr(logging, loglevel.upper()), str(lines))
|
logger.log(getattr(logging, loglevel.upper()), str(lines))
|
||||||
return [str(lines)]
|
return [str(lines)]
|
||||||
|
|
Loading…
Add table
Reference in a new issue