forked from LeenkxTeam/LNXSDK
72 lines
3.1 KiB
Python
72 lines
3.1 KiB
Python
|
|
from lnx.logicnode.lnx_nodes import *
|
||
|
|
|
||
|
|
|
||
|
|
class TorrentControlNode(LnxLogicTreeNode):
|
||
|
|
"""Torrent Control"""
|
||
|
|
bl_idname = 'LNTorrentControlNode'
|
||
|
|
bl_label = 'Torrent Control'
|
||
|
|
bl_description = ('Start, stop, remove or prioritize a torrent.')
|
||
|
|
lnx_category = 'Leenkx'
|
||
|
|
lnx_version = 1
|
||
|
|
|
||
|
|
def __init__(self, *args, **kwargs):
|
||
|
|
super(TorrentControlNode, self).__init__(*args, **kwargs)
|
||
|
|
array_nodes[str(id(self))] = self
|
||
|
|
|
||
|
|
property0: HaxeEnumProperty('property0',
|
||
|
|
items=[('start', 'Start', 'Start or resume the torrent session'),
|
||
|
|
('stop', 'Stop', 'Pause the torrent (announces stopped to trackers); it stays registered and can be started again'),
|
||
|
|
('remove', 'Remove', 'Destroy the torrent and remove it from the client'),
|
||
|
|
('remove-data', 'Remove + Data', 'Destroy the torrent and delete the stored content bytes'),
|
||
|
|
('select', 'Select', 'Prioritize a piece range: File handle or Start/End bytes, Priority optional (webtorrent torrent.select)'),
|
||
|
|
('deselect', 'Deselect', 'Drop a priority selection, back to normal order'),
|
||
|
|
('critical', 'Critical', 'Top-priority selection for streaming seeks'),
|
||
|
|
('add-peer', 'Add Peer', 'Connect to a peer directly; Address is host:port (sys/Krom targets only)'),
|
||
|
|
('add-web-seed', 'Add Web Seed', 'Register a BEP 19 webseed; Address is an http(s) URL, fills pieces when peers can\'t serve them')],
|
||
|
|
name='Action', default='start',
|
||
|
|
update=lambda self, context: self._rebuild_inputs())
|
||
|
|
|
||
|
|
def _rebuild_inputs(self):
|
||
|
|
if not self.inputs:
|
||
|
|
return
|
||
|
|
links = {}
|
||
|
|
for socket in self.inputs:
|
||
|
|
for link in socket.links:
|
||
|
|
links.setdefault(socket.name, []).append(
|
||
|
|
(link.from_node, link.from_socket))
|
||
|
|
for socket in self.inputs[3:]:
|
||
|
|
self.inputs.remove(socket)
|
||
|
|
self._add_action_inputs()
|
||
|
|
tree = self.id_data
|
||
|
|
for socket in self.inputs:
|
||
|
|
if socket.name in links:
|
||
|
|
for from_node, from_socket in links[socket.name]:
|
||
|
|
tree.links.new(from_socket, socket)
|
||
|
|
|
||
|
|
def _add_action_inputs(self):
|
||
|
|
if self.property0 in ('select', 'deselect', 'critical'):
|
||
|
|
self.add_input('LnxDynamicSocket', 'File')
|
||
|
|
self.add_input('LnxIntSocket', 'Start')
|
||
|
|
self.add_input('LnxIntSocket', 'End')
|
||
|
|
self.add_input('LnxIntSocket', 'Priority')
|
||
|
|
elif self.property0 == 'add-peer':
|
||
|
|
self.add_input('LnxStringSocket', 'Address')
|
||
|
|
elif self.property0 == 'add-web-seed':
|
||
|
|
self.add_input('LnxStringSocket', 'Address')
|
||
|
|
|
||
|
|
def lnx_init(self, context):
|
||
|
|
self.add_input('LnxNodeSocketAction', 'In')
|
||
|
|
self.add_input('LnxDynamicSocket', 'Connection')
|
||
|
|
self.add_input('LnxDynamicSocket', 'Torrent')
|
||
|
|
self._add_action_inputs()
|
||
|
|
|
||
|
|
self.add_output('LnxNodeSocketAction', 'Out')
|
||
|
|
|
||
|
|
def draw_buttons(self, context, layout):
|
||
|
|
layout.prop(self, 'property0')
|
||
|
|
|
||
|
|
|
||
|
|
def register():
|
||
|
|
add_category('Leenkx', icon='ORIENTATION_CURSOR')
|
||
|
|
TorrentControlNode.on_register()
|