mirror of
https://gitlab.com/SIGBUS/nyaa.git
synced 2024-12-21 17:00:00 +00:00
parent
e545f8ae19
commit
4fe0ff5b1a
|
@ -17,7 +17,7 @@ from sqlalchemy.ext.hybrid import hybrid_property
|
|||
from sqlalchemy_fulltext import FullText
|
||||
from sqlalchemy_utils import ChoiceType, EmailType, PasswordType
|
||||
|
||||
from nyaa.extensions import cache, config, db
|
||||
from nyaa.extensions import config, db
|
||||
from nyaa.torrents import create_magnet
|
||||
|
||||
app = flask.current_app
|
||||
|
@ -250,7 +250,6 @@ class TorrentBase(DeclarativeHelperBase):
|
|||
return self.info_hash.hex()
|
||||
|
||||
@property
|
||||
@cache.memoize(timeout=3600)
|
||||
def magnet_uri(self):
|
||||
return create_magnet(self)
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import functools
|
||||
import os
|
||||
from urllib.parse import quote, urlencode
|
||||
|
||||
|
@ -75,29 +76,34 @@ def get_default_trackers():
|
|||
return list(trackers)
|
||||
|
||||
|
||||
def create_magnet(torrent, max_trackers=5, trackers=None):
|
||||
@functools.lru_cache(maxsize=1024*4)
|
||||
def _create_magnet(display_name, info_hash, max_trackers=5, trackers=None):
|
||||
# Unless specified, we just use default trackers
|
||||
if trackers is None:
|
||||
trackers = get_default_trackers()
|
||||
|
||||
magnet_parts = [
|
||||
('dn', torrent.display_name)
|
||||
('dn', display_name)
|
||||
]
|
||||
magnet_parts.extend(
|
||||
('tr', tracker_url)
|
||||
for tracker_url in trackers[:max_trackers]
|
||||
)
|
||||
|
||||
return ''.join([
|
||||
'magnet:?xt=urn:btih:', info_hash,
|
||||
'&', urlencode(magnet_parts, quote_via=quote)
|
||||
])
|
||||
|
||||
|
||||
def create_magnet(torrent):
|
||||
# Since we accept both models.Torrents and ES objects,
|
||||
# we need to make sure the info_hash is a hex string
|
||||
info_hash = torrent.info_hash
|
||||
if isinstance(info_hash, (bytes, bytearray)):
|
||||
info_hash = info_hash.hex()
|
||||
|
||||
return ''.join([
|
||||
'magnet:?xt=urn:btih:', info_hash,
|
||||
'&', urlencode(magnet_parts, quote_via=quote)
|
||||
])
|
||||
return _create_magnet(torrent.display_name, info_hash)
|
||||
|
||||
|
||||
def create_default_metadata_base(torrent, trackers=None, webseeds=None):
|
||||
|
|
Loading…
Reference in a new issue