sane-bt-search: calculate bitmagnet URI by using the InfoHash field instead of parsing MagnetUri
This commit is contained in:
@@ -199,6 +199,7 @@ class Torrent:
|
|||||||
size: int
|
size: int
|
||||||
tracker: Tracker
|
tracker: Tracker
|
||||||
title: str
|
title: str
|
||||||
|
info_hash: str | None
|
||||||
magnet: str | None
|
magnet: str | None
|
||||||
http_dl_uri: str | None # probably a .torrent file but it COULD be a referral to a magnet:// URI
|
http_dl_uri: str | None # probably a .torrent file but it COULD be a referral to a magnet:// URI
|
||||||
tracker_uri: str | None
|
tracker_uri: str | None
|
||||||
@@ -225,8 +226,19 @@ class Torrent:
|
|||||||
def from_dict(d: dict) -> 'Torrent':
|
def from_dict(d: dict) -> 'Torrent':
|
||||||
logger.debug(f"Torrent.from_dict: fields: { ' '.join(d.keys()) }")
|
logger.debug(f"Torrent.from_dict: fields: { ' '.join(d.keys()) }")
|
||||||
for k, v in d.items():
|
for k, v in d.items():
|
||||||
if k not in ("CategoryDesc", "Seeders", "PublishDate", "Size", "Tracker", "Title", "MagnetUri", "Guid", "Link", "Details") and \
|
if k not in (
|
||||||
v != None and v != "" and v != [] and v != {}:
|
"CategoryDesc",
|
||||||
|
"Details",
|
||||||
|
"Guid",
|
||||||
|
"InfoHash",
|
||||||
|
"Link",
|
||||||
|
"MagnetUri",
|
||||||
|
"PublishDate",
|
||||||
|
"Seeders",
|
||||||
|
"Size",
|
||||||
|
"Title",
|
||||||
|
"Tracker",
|
||||||
|
) and v != None and v != "" and v != [] and v != {}:
|
||||||
logger.debug(f" {k} = {v}")
|
logger.debug(f" {k} = {v}")
|
||||||
|
|
||||||
seeders = d.get("Seeders")
|
seeders = d.get("Seeders")
|
||||||
@@ -234,6 +246,7 @@ class Torrent:
|
|||||||
size = d.get("Size")
|
size = d.get("Size")
|
||||||
tracker = d.get("Tracker")
|
tracker = d.get("Tracker")
|
||||||
title = d.get("Title")
|
title = d.get("Title")
|
||||||
|
info_hash = d.get("InfoHash")
|
||||||
magnet = d.get("MagnetUri") or d.get("Guid")
|
magnet = d.get("MagnetUri") or d.get("Guid")
|
||||||
http_dl_uri = d.get("Link")
|
http_dl_uri = d.get("Link")
|
||||||
tracker_uri = d.get("Details")
|
tracker_uri = d.get("Details")
|
||||||
@@ -255,13 +268,24 @@ class Torrent:
|
|||||||
tracker_uri = tracker_uri.replace('https://bakabt.me//', 'https://bakabt.me/')
|
tracker_uri = tracker_uri.replace('https://bakabt.me//', 'https://bakabt.me/')
|
||||||
# quirk: bitmagnet doesn't populate the torrent page, except as a link to the website homepage.
|
# quirk: bitmagnet doesn't populate the torrent page, except as a link to the website homepage.
|
||||||
# TODO: fix and upstream this into either Jackett or Bitmagnet
|
# TODO: fix and upstream this into either Jackett or Bitmagnet
|
||||||
|
# also fix bitmagnet seeders count while here
|
||||||
if tracker_uri == 'http://10.0.1.6:3333/':
|
if tracker_uri == 'http://10.0.1.6:3333/':
|
||||||
infohash = magnet.replace('magnet:?xt=urn:btih:', '').split('&')[0]
|
tracker_uri = f"https://bitmagnet.uninsane.org/webui/torrents/permalink/{info_hash}"
|
||||||
tracker_uri = f"https://bitmagnet.uninsane.org/webui/torrents/permalink/{infohash}"
|
|
||||||
|
|
||||||
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):
|
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)
|
pub_date = parse_time(pub_date)
|
||||||
return Torrent(seeders, pub_date, size, Tracker.by_name(tracker), title, magnet, http_dl_uri, tracker_uri, categories=categories)
|
return Torrent(
|
||||||
|
seeders=seeders,
|
||||||
|
pub_date=pub_date,
|
||||||
|
size=size,
|
||||||
|
tracker=Tracker.by_name(tracker),
|
||||||
|
title=title,
|
||||||
|
info_hash=info_hash,
|
||||||
|
magnet=magnet,
|
||||||
|
http_dl_uri=http_dl_uri,
|
||||||
|
tracker_uri=tracker_uri,
|
||||||
|
categories=categories,
|
||||||
|
)
|
||||||
|
|
||||||
def to_dict(self) -> dict:
|
def to_dict(self) -> dict:
|
||||||
# N.B.: not all fields: needs to be kept in sync with consumers like mx-sanebot
|
# N.B.: not all fields: needs to be kept in sync with consumers like mx-sanebot
|
||||||
@@ -338,6 +362,7 @@ def main(args: list[str]):
|
|||||||
parser.add_argument('--sort-by', default=SortMethod.Balanced, type=SortMethod, help='how to rank matches (seeders, tracker)')
|
parser.add_argument('--sort-by', default=SortMethod.Balanced, type=SortMethod, help='how to rank matches (seeders, tracker)')
|
||||||
parser.add_argument('--json', action='store_true', help='output results in json')
|
parser.add_argument('--json', action='store_true', help='output results in json')
|
||||||
# TODO: add `choices`, populated from the API name of each KNOWN_TRACKERS.
|
# TODO: add `choices`, populated from the API name of each KNOWN_TRACKERS.
|
||||||
|
# (i.e. 'TrackerId' instead of 'Tracker' field)
|
||||||
parser.add_argument('--tracker', type=str, action='append', help='query only this tracker(s) e.g. "bitmagnet" or "bakabt"')
|
parser.add_argument('--tracker', type=str, action='append', help='query only this tracker(s) e.g. "bitmagnet" or "bakabt"')
|
||||||
parser.add_argument('--verbose', action='store_true')
|
parser.add_argument('--verbose', action='store_true')
|
||||||
parser.add_argument('--book', action='store_true', help='show only book (ebook or audiobook) results')
|
parser.add_argument('--book', action='store_true', help='show only book (ebook or audiobook) results')
|
||||||
|
Reference in New Issue
Block a user