sane-bt-search: implement --h265 flag

This commit is contained in:
Colin 2023-07-22 21:56:00 +00:00
parent c862b559e7
commit b6a878757c

View File

@ -153,6 +153,12 @@ class Torrent:
def is_manga(self, default: bool = False) -> bool: def is_manga(self, default: bool = False) -> bool:
return is_cat(self.categories, MANGA_CATS, default) return is_cat(self.categories, MANGA_CATS, default)
def is_h265(self) -> bool:
meta = self.title.lower()
return "h265" in meta \
or "x265" in meta \
or "HEVC" in meta
class Client: class Client:
def __init__(self): def __init__(self):
self.apikey = open("/run/secrets/jackett_apikey").read().strip() self.apikey = open("/run/secrets/jackett_apikey").read().strip()
@ -176,12 +182,14 @@ class Client:
return sorted(torrents, reverse=True) return sorted(torrents, reverse=True)
def filter_results(results: list[Torrent], full: bool, top: int, manga: bool) -> list[Torrent]: def filter_results(results: list[Torrent], full: bool, top: int, manga: bool, h265: bool) -> list[Torrent]:
""" """
take the complete query and filter further based on CLI options take the complete query and filter further based on CLI options
""" """
if manga: if manga:
results = [t for t in results if t.is_manga(default=True)] results = [t for t in results if t.is_manga(default=True)]
if h265:
results = [t for t in results if t.is_h265()]
if not full: if not full:
results = results[:top] results = results[:top]
return results return results
@ -195,6 +203,7 @@ def parse_args(args: list[str]) -> dict:
top="5", top="5",
verbose=False, verbose=False,
manga=False, manga=False,
h265=False,
) )
while args: while args:
arg = args[0] arg = args[0]
@ -222,6 +231,7 @@ def main(args: list[str]):
top = int(options.pop("top")) top = int(options.pop("top"))
verbose = options.pop("verbose") verbose = options.pop("verbose")
manga = options.pop("manga") manga = options.pop("manga")
h265 = options.pop("h265")
if options != {}: if options != {}:
raise BadCliArgs(f"unexpected options: {options}") raise BadCliArgs(f"unexpected options: {options}")
@ -236,7 +246,7 @@ def main(args: list[str]):
results = client.query(query) results = client.query(query)
num_results = len(results) num_results = len(results)
results = filter_results(results, full, top, manga) results = filter_results(results, full, top, manga, h265)
if json: if json:
dumpable = [t.to_dict() for t in results] dumpable = [t.to_dict() for t in results]