77 lines
3.2 KiB
Python
77 lines
3.2 KiB
Python
|
|
from lnx.logicnode.lnx_nodes import *
|
||
|
|
|
||
|
|
|
||
|
|
class DownloadTorrentNode(LnxLogicTreeNode):
|
||
|
|
"""Download Torrent"""
|
||
|
|
bl_idname = 'LNDownloadTorrentNode'
|
||
|
|
bl_label = 'Download Torrent'
|
||
|
|
bl_description = ('Add a torrent to a Leenkx connection and start downloading')
|
||
|
|
lnx_category = 'Leenkx'
|
||
|
|
lnx_version = 1
|
||
|
|
|
||
|
|
def __init__(self, *args, **kwargs):
|
||
|
|
super(DownloadTorrentNode, self).__init__(*args, **kwargs)
|
||
|
|
array_nodes[str(id(self))] = self
|
||
|
|
|
||
|
|
def update_sockets(self, context):
|
||
|
|
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[2:]:
|
||
|
|
self.inputs.remove(socket)
|
||
|
|
self._add_id_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_id_inputs(self):
|
||
|
|
mode_sockets = {
|
||
|
|
'magnet': ('LnxStringSocket', 'Magnet URI', 'Magnet URI (magnet:?xt=...)'),
|
||
|
|
'id': ('LnxStringSocket', 'Infohash', '40-char v1 or 64-char v2 infohash hex'),
|
||
|
|
'file': ('LnxDynamicSocket', 'Torrent File (Bytes)', '.torrent file bytes'),
|
||
|
|
}
|
||
|
|
socket_type, label, desc = mode_sockets.get(self.property0, mode_sockets['magnet'])
|
||
|
|
self.add_input(socket_type, label)
|
||
|
|
if self.property1 != 'inherit':
|
||
|
|
self.add_input('LnxNodeSocketArray', 'Trackers')
|
||
|
|
|
||
|
|
property0: HaxeEnumProperty('property0',
|
||
|
|
items=[('magnet', 'Magnet', 'Magnet URI (magnet:?xt=...)'),
|
||
|
|
('id', 'Infohash', '40-char v1 or 64-char v2 infohash hex'),
|
||
|
|
('file', 'Torrent File', '.torrent file bytes')],
|
||
|
|
name='Input', default='magnet', update=update_sockets)
|
||
|
|
|
||
|
|
property1: HaxeEnumProperty('property1',
|
||
|
|
items=[('inherit', 'Inherit', 'Use the torrent\'s own trackers plus the connection\'s; no Trackers input'),
|
||
|
|
('add', 'Add', 'Merge the Trackers input on top of the torrent\'s own trackers'),
|
||
|
|
('override', 'Override', 'Replace all trackers with the Trackers input (torrent\'s own and connection defaults are dropped)')],
|
||
|
|
name='Trackers', default='inherit', update=update_sockets)
|
||
|
|
|
||
|
|
def lnx_init(self, context):
|
||
|
|
self.add_input('LnxNodeSocketAction', 'In')
|
||
|
|
self.add_input('LnxDynamicSocket', 'Connection')
|
||
|
|
self._add_id_inputs()
|
||
|
|
|
||
|
|
self.add_output('LnxNodeSocketAction', 'Out')
|
||
|
|
self.add_output('LnxDynamicSocket', 'Torrent')
|
||
|
|
self.add_output('LnxStringSocket', 'Name')
|
||
|
|
self.add_output('LnxNodeSocketArray', 'Files')
|
||
|
|
self.add_output('LnxNodeSocketAction', 'Done')
|
||
|
|
self.add_output('LnxStringSocket', 'InfoHash')
|
||
|
|
self.add_output('LnxStringSocket', 'Magnet')
|
||
|
|
|
||
|
|
def draw_buttons(self, context, layout):
|
||
|
|
layout.prop(self, 'property0')
|
||
|
|
layout.prop(self, 'property1')
|
||
|
|
|
||
|
|
|
||
|
|
def register():
|
||
|
|
add_category('Leenkx', icon='ORIENTATION_CURSOR')
|
||
|
|
DownloadTorrentNode.on_register()
|