1 from tord
.common
import *
2 from list import Columns
, Column
12 def get_id(self
, hash):
13 if hash not in self
.ids
:
14 self
.ids
[hash] = len(self
.ids
)
15 self
.hashs
[self
.ids
[hash]] = hash
19 def get_hash(self
, id):
23 def get_args(self
, args
):
24 core
, ids
= self
.core
, self
.selected
26 new_core
, new_ids
= args
27 if new_core
: core
= new_core
28 if new_ids
: ids
= new_ids
31 class Torrents(Columns
, Base
):
32 def __init__(self
, core
):
33 Columns
.__init
__(self
)
36 self
.name
= 'Torrents'
39 self
.keys
= ['state', 'download_payload_rate', 'upload_payload_rate', 'progress', 'eta', 'total_wanted', 'num_peers', 'all_time_upload', 'name']
41 self
.add_column('state', Column("Status", fstate
, 7, aright
))
42 self
.add_column('download_payload_rate', Column('D Rate', fspeed
, 7, aright
))
43 self
.add_column('upload_payload_rate', Column('U Rate', fspeed
, 7, aright
))
44 self
.add_column('all_time_upload', Column('U Total', fspeed
, 7, aright
))
45 self
.add_column('all_time_download', Column('D Total', fspeed
, 7, aright
))
46 self
.add_column('progress', Column("Progress", fbar
, 10, aright
))
47 self
.add_column('_progress', Column("Progress", fpcnt
, 8, aright
))
48 self
.add_column('ratio', Column("Ratio", fratio
, 5, aright
))
49 self
.add_column('eta', Column("ETA", ftime
, 7, aright
))
50 self
.add_column('total_wanted', Column("Size", fsize
, 6, aright
))
51 self
.add_column('num_peers', Column("Peers", str, 3, aright
))
52 self
.add_column('name', Column('Name', str, 0, aleft
))
53 self
.add_column('torrent_hash', Column('Hash', str, 0, aleft
))
54 #self.add_column('peers_flags', Column('Flags', str, 0, aright))
55 #self.add_column('peers_ip', Column('Flags', ip, 0, aright))
57 self
.bindings
['b'] = lambda x
,l
: log
.info(core
.get_torrents_status([x
], 'torrent_hash', ['torrent_file']))
58 self
.bindings
['n'] = lambda x
,l
: log
.info(x
)
60 self
.bindings
['f'] = lambda x
,l
: l
.change_view('Files', [x
], x
)
61 self
.bindings
['l'] = lambda x
,l
: l
.change_view('Peers', [x
], x
)
62 self
.bindings
['F'] = lambda x
,l
: l
.change_view('Files', None, x
)
63 self
.bindings
['L'] = lambda x
,l
: l
.change_view('Peers', None, x
)
64 self
.bindings
['y'] = lambda x
,l
: self
.swap_columns('_progress', 'progress') or l
.refresh(reset
=True, sync
=True)
66 self
.bindings
['A'] = lambda x
,l
: core
.set_torrents_state([x
], 'queue_position_top', publish
='update', all
=True)
67 self
.bindings
['Z'] = lambda x
,l
: core
.set_torrents_state([x
], 'queue_position_bottom', publish
='update', all
=True)
68 self
.bindings
['a'] = lambda x
,l
: core
.set_torrents_state([x
], 'queue_position_up', publish
='sort', all
=True)
69 self
.bindings
['z'] = lambda x
,l
: core
.set_torrents_state([x
], 'queue_position_down', publish
='sort', all
=True)
73 self
.bindings
['R'] = lambda x
,l
: core
.set_torrents_state(None, 'resume')
74 self
.bindings
['P'] = lambda x
,l
: core
.set_torrents_state(None, 'pause')
75 self
.bindings
['t'] = lambda x
,l
: core
.set_torrents_state([x
], 'toggle_pause')
77 self
.bindings
['W'] = lambda x
,l
: core
.set_torrents_state(None, 'fastresume_write')
78 self
.bindings
['w'] = lambda x
,l
: core
.set_torrents_state([x
], 'fastresume_write')
80 self
.bindings
['i'] = lambda x
,l
: core
.set_torrents_state([x
], 'force_reannounce')
81 self
.bindings
['h'] = lambda x
,l
: core
.set_torrents_state([x
], 'recheck', publish
='update')
82 self
.bindings
['H'] = lambda x
,l
: core
.set_torrents_state(None, 'force_recheck', publish
='update', all
=True)
84 self
.bindings
['D'] = lambda x
,l
: core
.remove(x
, True)
85 self
.bindings
['d'] = lambda x
,l
: core
.remove(x
)
87 self
.bindings
['x'] = lambda x
,l
: core
.set_torrents_state(None, 'set_sequential_download', publish
='update', msg
=tuple([True]))
88 self
.bindings
['X'] = lambda x
,l
: core
.set_torrents_state(None, 'set_sequential_download', publish
='update', msg
=tuple([False]))
90 self
.bindings
['<'] = lambda x
,l
: core
.set_torrents_state(None, 'toggle_managed', publish
='update', msg
=tuple([True]))
91 self
.bindings
['>'] = lambda x
,l
: core
.set_torrents_state(None, 'toggle_managed', publish
='update', msg
=tuple([False]))
92 self
.bindings
['m'] = lambda x
,l
: core
.set_torrents_state([x
], 'toggle_managed', publish
='update')
94 self
.bindings
['Q'] = lambda x
,l
: core
.killServer()
97 def get_data(self
, args
):
98 c
, i
= self
.get_args(args
)
99 return c
.get_torrents_status(i
, 'torrent_hash', self
.keys
)
101 class Files(Columns
, Base
):
102 def __init__(self
, core
):
103 Columns
.__init
__(self
)
109 self
.keys
= ['files_priority', 'files_size', 'files_progress', 'files_path']
111 def percent(a
): return fpcnt(float(a
[0])/a
[1])
112 def bar(a
): return fbar(float(a
[0])/a
[1])
114 self
.add_column('files_priority', Column("Priority", str, 1, aright
))
115 self
.add_column('files_size', Column("Size", fsize
, 6, aright
))
116 self
.add_column('files_progress', Column("Progress", percent
, 9, aleft
))
117 self
.add_column('_files_progress', Column("Progress", bar
, 5, aright
))
118 self
.add_column('files_path', Column('Name', str, 0, aleft
))
120 self
.bindings
['f'] = lambda x
,l
: l
.change_view('Torrents', None)
121 self
.bindings
['y'] = lambda x
,l
: self
.swap_columns('_files_progress', 'files_progress') or l
.refresh(reset
=True, sync
=True)
122 self
.bindings
['-'] = lambda (t
,f
),l
: core
.set_torrents_state([t
], 'prioritize', publish
='update', msg
=(f
,-1))
123 self
.bindings
['='] = lambda (t
,f
),l
: core
.set_torrents_state([t
], 'prioritize', publish
='update', msg
=(f
,1))
125 def get_data(self
, args
):
127 c
, i
= self
.get_args(args
)
128 for id, data
in c
.get_torrents_status(i
, 'files_id', self
.keys
):
129 files
+= [((h
,i
), [d
[i
] for d
in data
]) for h
, i
in id]
132 class Peers(Columns
, Base
):
133 def __init__(self
, core
):
134 Columns
.__init
__(self
)
140 self
.keys
= ['peers_ip', 'peers_read_state', 'peers_write_state', 'peers_flags', 'peers_source_flags', 'peers_up_speed', 'peers_down_speed', 'peers_payload_up_speed', 'peers_payload_down_speed', 'peers_download_queue_length', 'peers_upload_queue_length']
142 def ip(x
): return x
[0]
145 s
= ['idle','torrent', 'global', 'network']
149 t
= ['I', 'C', 'i', 'c', 'e', 'l', 'H', 'C', 'Q', 'P', 's', 'O', 'S']
150 f
= ['.', '.', '.', '.', '.', 'r', '.', '.', '.', '.', '.', '.', '.']
151 return "".join([((1<<i
& x
) and t
[i
]) or f
[i
] for i
in range(len(t
))])
154 s
= ['t', 'd', 'p', 'l', 'r', 'i']
155 return "".join([((1<<i
& x
) and s
[i
]) or ' ' for i
in range(len(s
))])
157 self
.add_column('peers_ip', Column('Address', ip
, 15, aleft
))
158 self
.add_column('peers_read_state', Column("R State", state
, 7, aleft
))
159 self
.add_column('peers_write_state', Column("W State", state
, 7, aleft
))
160 self
.add_column('peers_flags', Column("Flags", flags
, 13, aleft
))
161 self
.add_column('peers_source_flags', Column("Source", source
, 6, aleft
))
162 self
.add_column('peers_up_speed', Column("U Speed", fspeed
, 7, aleft
))
163 self
.add_column('peers_down_speed', Column("D Speed", fspeed
, 7, aleft
))
164 self
.add_column('peers_payload_up_speed', Column("PU Speed", fspeed
, 7, aleft
))
165 self
.add_column('peers_payload_down_speed', Column("PD Speed", fspeed
, 7, aleft
))
166 self
.add_column('peers_download_queue_length', Column("D Queue", str, 7, aleft
))
167 self
.add_column('peers_upload_queue_length', Column("U Queue", str, 7, aleft
))
169 self
.bindings
['l'] = lambda x
,l
: l
.change_view('Torrents', None)
170 self
.bindings
['L'] = lambda x
,l
: l
.change_view('Torrents', None)
173 def get_data(self
, args
):
175 c
, i
= self
.get_args(args
)
177 for ids
, ds
in c
.get_torrents_status(i
, 'peers_ip', self
.keys
):
178 for n
, i
in enumerate(ids
):
179 peers
+= [(i
,[d
[n
] for d
in ds
])]