diff --git a/deluge/core/core.py b/deluge/core/core.py index 198410e31..c7428baa2 100644 --- a/deluge/core/core.py +++ b/deluge/core/core.py @@ -17,7 +17,7 @@ from base64 import b64decode, b64encode from typing import Any, Dict, List, Optional, Tuple, Union from urllib.request import URLError, urlopen -from twisted.internet import defer, reactor, task +from twisted.internet import defer, reactor, task, threads from twisted.web.client import Agent, readBody import deluge.common @@ -992,13 +992,13 @@ class Core(component.Component): path, tracker, piece_length, - comment, - target, - webseeds, - private, - created_by, - trackers, - add_to_session, + comment=None, + target=None, + webseeds=None, + private=False, + created_by=None, + trackers=None, + add_to_session=False, ): log.debug('creating torrent..') threading.Thread( @@ -1032,24 +1032,35 @@ class Core(component.Component): ): from deluge import metafile - metafile.make_meta_file( + filecontent = metafile.make_meta_file_content( path, tracker, piece_length, comment=comment, - target=target, webseeds=webseeds, private=private, created_by=created_by, trackers=trackers, ) + + write_file = False + if target or not add_to_session: + write_file = True + + if not target: + target = metafile.default_meta_file_path(path) + filename = os.path.split(target)[-1] + + if write_file: + with open(target, 'wb') as _file: + _file.write(filecontent) + log.debug('torrent created!') if add_to_session: options = {} options['download_location'] = os.path.split(path)[0] - with open(target, 'rb') as _file: - filedump = b64encode(_file.read()) - self.add_torrent_file(os.path.split(target)[1], filedump, options) + filedump = b64encode(filecontent) + self.add_torrent_file(filename, filedump, options) @export def upload_plugin(self, filename: str, filedump: Union[str, bytes]) -> None: diff --git a/deluge/metafile.py b/deluge/metafile.py index cd6545a75..906cc81e3 100644 --- a/deluge/metafile.py +++ b/deluge/metafile.py @@ -51,7 +51,7 @@ class RemoteFileProgress: ) -def make_meta_file( +def make_meta_file_content( path, url, piece_length, @@ -60,7 +60,6 @@ def make_meta_file( comment=None, safe=None, content_type=None, - target=None, webseeds=None, name=None, private=False, @@ -70,14 +69,6 @@ def make_meta_file( data = {'creation date': int(gmtime())} if url: data['announce'] = url.strip() - a, b = os.path.split(path) - if not target: - if b == '': - f = a + '.torrent' - else: - f = os.path.join(a, b + '.torrent') - else: - f = target if progress is None: progress = dummy @@ -121,8 +112,55 @@ def make_meta_file( data['announce-list'] = trackers data['encoding'] = 'UTF-8' - with open(f, 'wb') as file_: - file_.write(bencode(utf8_encode_structure(data))) + return bencode(utf8_encode_structure(data)) + + +def default_meta_file_path(content_path): + a, b = os.path.split(content_path) + if b == '': + f = a + '.torrent' + else: + f = os.path.join(a, b + '.torrent') + return f + + +def make_meta_file( + path, + url, + piece_length, + progress=None, + title=None, + comment=None, + safe=None, + content_type=None, + target=None, + webseeds=None, + name=None, + private=False, + created_by=None, + trackers=None, +): + if not target: + target = default_meta_file_path(path) + + file_content = make_meta_file_content( + path, + url, + piece_length, + progress=progress, + title=title, + comment=comment, + safe=safe, + content_type=content_type, + webseeds=webseeds, + name=name, + private=private, + created_by=created_by, + trackers=trackers, + ) + + with open(target, 'wb') as file_: + file_.write(file_content) def calcsize(path):