summaryrefslogtreecommitdiffstats
path: root/deluge/core/core.py
diff options
context:
space:
mode:
Diffstat (limited to 'deluge/core/core.py')
-rw-r--r--deluge/core/core.py76
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: