sane-bt-search: include non-magnet results
This commit is contained in:
parent
ecaab07bce
commit
86b15d381f
1
TODO.md
1
TODO.md
|
@ -54,7 +54,6 @@
|
|||
- all orientations *except* upside down are supported
|
||||
- sxmo: launch with auto-rotation enabled
|
||||
- sane-bt-search: show details like 5.1 vs stereo, h264 vs h265
|
||||
- sane-bt-search: include .torrent results (rewrite the URL?)
|
||||
|
||||
### perf
|
||||
- why does nixos-rebuild switch take 5 minutes when net is flakey?
|
||||
|
|
|
@ -10,6 +10,7 @@ returns select results and magnet links
|
|||
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
import logging
|
||||
import json
|
||||
import natsort
|
||||
import requests
|
||||
|
@ -23,6 +24,8 @@ ENDPOINTS = dict(
|
|||
|
||||
epoch = datetime(1970, 1, 1)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def try_parse_time(t: str):
|
||||
try:
|
||||
return datetime.fromisoformat(t)
|
||||
|
@ -44,10 +47,15 @@ class Torrent:
|
|||
size: int
|
||||
tracker: str
|
||||
title: str
|
||||
magnet: str
|
||||
magnet: "Optional[str]"
|
||||
http_dl_uri: "Optional[str]" # probably a .torrent file but it COULD be a referral to a magnet:// URI
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"{self.seeders}[S]\t{self.pub_date}\t{self.mib}M\t{self.tracker}\t{self.title}\t{self.magnet}"
|
||||
return f"{self.seeders}[S]\t{self.pub_date}\t{self.mib}M\t{self.tracker}\t{self.title}\t{self.dl_uri}"
|
||||
|
||||
@property
|
||||
def dl_uri(self) -> str:
|
||||
return self.magnet or self.http_dl_uri
|
||||
|
||||
@property
|
||||
def mib(self) -> int:
|
||||
|
@ -55,15 +63,32 @@ class Torrent:
|
|||
|
||||
@staticmethod
|
||||
def from_dict(d: dict) -> 'Torrent':
|
||||
logger.debug(f"Torrent.from_dict: fields: { ' '.join(d.keys()) }")
|
||||
for k, v in d.items():
|
||||
if k not in ("Seeders", "PublishDate", "Size", "Tracker", "Title", "MagnetUri", "Guid", "Link") and \
|
||||
v != None and v != "" and v != [] and v != {}:
|
||||
logger.debug(f" {k} = {v}")
|
||||
|
||||
seeders = d.get("Seeders")
|
||||
pub_date = d.get("PublishDate")
|
||||
size = d.get("Size")
|
||||
tracker = d.get("Tracker")
|
||||
title = d.get("Title")
|
||||
magnet = d.get("MagnetUri")
|
||||
if seeders is not None and pub_date is not None and title is not None and magnet is not None:
|
||||
magnet = d.get("MagnetUri") or d.get("Guid")
|
||||
http_dl_uri = d.get("Link")
|
||||
|
||||
if magnet and not magnet.startswith("magnet:"):
|
||||
logger.info(f"invalid magnet: {magnet}")
|
||||
magnet = None
|
||||
|
||||
# jackett returns bad DL URIs because it doesn't know its public URI
|
||||
firewalled_host = "http://10.0.1.6:9117/"
|
||||
if http_dl_uri and http_dl_uri.startswith(firewalled_host):
|
||||
http_dl_uri = SERVICE + "/" + http_dl_uri[len(firewalled_host):]
|
||||
|
||||
if seeders is not None and pub_date is not None and title is not None and (magnet is not None or http_dl_uri is not None):
|
||||
pub_date = parse_time(pub_date)
|
||||
return Torrent(seeders, pub_date, size, tracker, title, magnet)
|
||||
return Torrent(seeders, pub_date, size, tracker, title, magnet, http_dl_uri)
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
return dict(
|
||||
|
@ -99,9 +124,11 @@ class Client:
|
|||
|
||||
def parse_args(args: list) -> dict:
|
||||
options = dict(
|
||||
top="5",
|
||||
full=False,
|
||||
query="",
|
||||
json=False,
|
||||
verbose=False,
|
||||
)
|
||||
while args:
|
||||
arg = args[0]
|
||||
|
@ -119,9 +146,14 @@ def parse_args(args: list) -> dict:
|
|||
return options
|
||||
|
||||
def main(args: list):
|
||||
logging.basicConfig()
|
||||
options = parse_args(args)
|
||||
|
||||
if options["verbose"]:
|
||||
logging.getLogger().setLevel(logging.DEBUG)
|
||||
|
||||
query = options["query"]
|
||||
num_listings = 100 if options["full"] else 5
|
||||
num_listings = 1000 if options["full"] else int(options["top"])
|
||||
client = Client()
|
||||
res = client.query(query)
|
||||
if options["json"]:
|
||||
|
|
Loading…
Reference in New Issue
Block a user