diff options
Diffstat (limited to 'deluge/core/core.py')
-rw-r--r-- | deluge/core/core.py | 76 |
1 files changed, 46 insertions, 30 deletions
diff --git a/deluge/core/core.py b/deluge/core/core.py index 198410e..e2130f5 100644 --- a/deluge/core/core.py +++ b/deluge/core/core.py @@ -12,17 +12,16 @@ import logging import os import shutil import tempfile -import threading 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 import deluge.component as component -from deluge import path_chooser_common +from deluge import metafile, path_chooser_common from deluge._libtorrent import LT_VERSION, lt from deluge.configmanager import ConfigManager, get_config_dir from deluge.core.alertmanager import AlertManager @@ -992,30 +991,33 @@ 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, + torrent_format=metafile.TorrentFormat.V1, ): + if isinstance(torrent_format, str): + torrent_format = metafile.TorrentFormat(torrent_format) + log.debug('creating torrent..') - threading.Thread( - target=self._create_torrent_thread, - args=( - path, - tracker, - piece_length, - comment, - target, - webseeds, - private, - created_by, - trackers, - add_to_session, - ), - ).start() + return threads.deferToThread( + self._create_torrent_thread, + path, + tracker, + piece_length, + comment=comment, + target=target, + webseeds=webseeds, + private=private, + created_by=created_by, + trackers=trackers, + add_to_session=add_to_session, + torrent_format=torrent_format, + ) def _create_torrent_thread( self, @@ -1029,27 +1031,41 @@ class Core(component.Component): created_by, trackers, add_to_session, + torrent_format, ): 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, + torrent_format=torrent_format, ) + + 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) + + filedump = b64encode(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) + self.add_torrent_file(filename, filedump, options) + return filename, filedump @export def upload_plugin(self, filename: str, filedump: Union[str, bytes]) -> None: |