1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
#
# Copyright (C) 2011 Nick Lanham <nick@afternight.org>
#
# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with
# the additional special exception to link portions of this program with the OpenSSL library.
# See LICENSE for more details.
#
import logging
import deluge.common
from deluge.ui.client import client
from deluge.ui.console.widgets.popup import InputPopup, SelectablePopup
log = logging.getLogger(__name__)
def report_add_status(torrentlist, succ_cnt, fail_cnt, fail_msgs):
if fail_cnt == 0:
torrentlist.report_message(
'Torrents Added', '{!success!}Successfully added %d torrent(s)' % succ_cnt
)
else:
msg = (
'{!error!}Failed to add the following %d torrent(s):\n {!input!}' % fail_cnt
) + '\n '.join(fail_msgs)
if succ_cnt != 0:
msg += '\n \n{!success!}Successfully added %d torrent(s)' % succ_cnt
torrentlist.report_message('Torrent Add Report', msg)
def show_torrent_add_popup(torrentlist):
def do_add_from_url(data=None, **kwargs):
torrentlist.pop_popup()
if not data or kwargs.get('close', False):
return
def fail_cb(msg, url):
log.debug('failed to add torrent: %s: %s', url, msg)
error_msg = f'{{!input!}} * {url}: {{!error!}}{msg}'
report_add_status(torrentlist, 0, 1, [error_msg])
def success_cb(tid, url):
if tid:
log.debug('added torrent: %s (%s)', url, tid)
report_add_status(torrentlist, 1, 0, [])
else:
fail_cb('Already in session (probably)', url)
url = data['url']['value']
if not url:
return
t_options = {
'download_location': data['path']['value'],
'add_paused': data['add_paused']['value'],
}
if deluge.common.is_magnet(url):
client.core.add_torrent_magnet(url, t_options).addCallback(
success_cb, url
).addErrback(fail_cb, url)
elif deluge.common.is_url(url):
client.core.add_torrent_url(url, t_options).addCallback(
success_cb, url
).addErrback(fail_cb, url)
else:
torrentlist.report_message(
'Error', '{!error!}Invalid URL or magnet link: %s' % url
)
return
log.debug(
'Adding Torrent(s): %s (dl path: %s) (paused: %d)',
url,
data['path']['value'],
data['add_paused']['value'],
)
def show_add_url_popup():
add_paused = 1 if 'add_paused' in torrentlist.coreconfig else 0
popup = InputPopup(
torrentlist, 'Add Torrent (Esc to cancel)', close_cb=do_add_from_url
)
popup.add_text_input('url', 'Enter torrent URL or Magnet link:')
popup.add_text_input(
'path',
'Enter save path:',
torrentlist.coreconfig.get('download_location', ''),
complete=True,
)
popup.add_select_input(
'add_paused', 'Add Paused:', ['Yes', 'No'], [True, False], add_paused
)
torrentlist.push_popup(popup)
def option_chosen(selected, *args, **kwargs):
if not selected or selected == 'cancel':
torrentlist.pop_popup()
return
if selected == 'file':
torrentlist.consoleui.set_mode('AddTorrents')
elif selected == 'url':
show_add_url_popup()
popup = SelectablePopup(torrentlist, 'Add torrent', option_chosen)
popup.add_line('file', '- From _File(s)', use_underline=True)
popup.add_line('url', '- From _URL or Magnet', use_underline=True)
popup.add_line('cancel', '- _Cancel', use_underline=True)
torrentlist.push_popup(popup, clear=True)
|