forked from pietrondo/transmission-telegram
-
Notifications
You must be signed in to change notification settings - Fork 0
/
transmission_broker.py
101 lines (82 loc) · 3.26 KB
/
transmission_broker.py
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
from transmissionrpc import Client
from transmissionrpc import TransmissionError
class NotAuthorizedChatException(Exception):
pass
class TransmissionBroker:
def __init__(self, config, persistence):
self.conn = Client(
config.address,
port=config.port,
user=config.user,
password=config.password
)
self.secret = config.secret
self.persistence = persistence
@staticmethod
def pretty_torrents_list(torrents):
info_list = list()
for torrent in torrents:
info_list.append(
'%s: %s, %s : %d%%' %
(torrent.id, torrent.name, torrent.status, torrent.percentDone * 100)
)
return '\n'.join(info_list)
def retrieve_list(self, chat_id):
torrents = self.conn.get_torrents()
return TransmissionBroker.pretty_torrents_list(torrents)
def add_torrent(self, chat_id, url):
self.conn.add_torrent(url)
def remove_torrent(self, chat_id, torrent_ids):
# Check is not embedded to transmissionrpc module, so we have to do it ourselves
missing_torrents = list()
torrents = self.conn.get_torrents()
for tid in torrent_ids:
id_found = False
for torrent in torrents:
if tid == torrent.id:
id_found = True
break
if not id_found:
missing_torrents.append(tid)
if len(missing_torrents) > 0:
raise TransmissionError('Torrents %s not found' % missing_torrents)
self.conn.remove_torrent(torrent_ids)
def stop_torrent(self, chat_id, torrent_ids):
# Check is not embedded to transmissionrpc module, so we have to do it ourselves
missing_torrents = list()
torrents = self.conn.get_torrents()
for tid in torrent_ids:
id_found = False
for torrent in torrents:
if tid == torrent.id:
id_found = True
break
if not id_found:
missing_torrents.append(tid)
if len(missing_torrents) > 0:
raise TransmissionError('Torrents %s not found' % missing_torrents)
self.conn.stop_torrent(torrent_ids)
def start_torrent(self, chat_id, torrent_ids):
# Check is not embedded to transmissionrpc module, so we have to do it ourselves
missing_torrents = list()
torrents = self.conn.get_torrents()
for tid in torrent_ids:
id_found = False
for torrent in torrents:
if tid == torrent.id:
id_found = True
break
if not id_found:
missing_torrents.append(tid)
if len(missing_torrents) > 0:
raise TransmissionError('Torrents %s not found' % missing_torrents)
self.conn.start_torrent(torrent_ids)
def check_chat_authorization(self, chat_id):
if not self.persistence.check_chat_id(chat_id):
raise NotAuthorizedChatException()
def authorize_chat(self, chat_id, secret):
if self.secret == secret:
self.persistence.add_chat_id(chat_id)
return True
else:
return False