P2P Export - Nodes - Patch
This commit is contained in:
@ -5,7 +5,7 @@ class CreateTorrentNode(LnxLogicTreeNode):
|
||||
"""Create Torrent"""
|
||||
bl_idname = 'LNCreateTorrentNode'
|
||||
bl_label = 'Create Torrent'
|
||||
bl_description = 'Create a torrent file from the network'
|
||||
bl_description = ('Build a .torrent from content (file, files or folder)')
|
||||
lnx_category = 'Leenkx'
|
||||
lnx_version = 1
|
||||
|
||||
@ -13,17 +13,67 @@ class CreateTorrentNode(LnxLogicTreeNode):
|
||||
super(CreateTorrentNode, 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[1:]:
|
||||
self.inputs.remove(socket)
|
||||
self._add_data_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_data_inputs(self):
|
||||
mode_sockets = {
|
||||
'file': ('LnxDynamicSocket', 'File (Bytes)', 'Content of the single file as Bytes'),
|
||||
'files': ('LnxNodeSocketArray', 'Files ({path, data})', 'Array of {path, data} objects'),
|
||||
'folder': ('LnxStringSocket', 'Folder Path', 'Folder read recursively for content (native targets only)'),
|
||||
}
|
||||
socket_type, label, desc = mode_sockets.get(self.property1, mode_sockets['file'])
|
||||
self.add_input(socket_type, label)
|
||||
self.add_input('LnxStringSocket', 'Name')
|
||||
self.add_input('LnxStringSocket', 'Comment')
|
||||
self.add_input('LnxStringSocket', 'Created By')
|
||||
self.add_input('LnxStringSocket', 'Source')
|
||||
self.add_input('LnxNodeSocketArray', 'Trackers')
|
||||
self.add_input('LnxBoolSocket', 'Private')
|
||||
self.add_input('LnxIntSocket', 'Piece Length')
|
||||
self.add_input('LnxNodeSocketArray', 'Web Seeds')
|
||||
|
||||
property0: HaxeEnumProperty('property0',
|
||||
items=[('1', 'V1', 'BitTorrent v1 - SHA-1 piece list over one packed stream; works with every client'),
|
||||
('2', 'V2', 'BitTorrent v2 (BEP 52) - SHA-256 merkle tree per file, pieces aligned to file boundaries; needs modern peers'),
|
||||
('3', 'Hybrid', 'One .torrent with both v1 and v2 metadata - two infohashes (btih + btmh) over the same info dict')],
|
||||
name='Version', default='1')
|
||||
|
||||
property1: HaxeEnumProperty('property1',
|
||||
items=[('file', 'File', 'Single file: Data is a Bytes payload'),
|
||||
('files', 'Files', 'Multiple files: Data is an array of {path, data}'),
|
||||
('folder', 'Folder', 'Read a folder recursively (native targets only): Data is a folder path string')],
|
||||
name='Data', default='file', update=update_sockets)
|
||||
|
||||
def lnx_init(self, context):
|
||||
self.add_input('LnxNodeSocketAction', 'In')
|
||||
self.add_input('LnxDynamicSocket', 'Connection')
|
||||
self.add_input('LnxDynamicSocket', 'Data')
|
||||
self._add_data_inputs()
|
||||
|
||||
self.add_output('LnxNodeSocketAction', 'Out')
|
||||
self.add_output('LnxDynamicSocket', 'Torrent')
|
||||
self.add_output('LnxNodeSocketAction', 'Done')
|
||||
self.add_output('LnxDynamicSocket', 'Meta')
|
||||
self.add_output('LnxDynamicSocket', 'Torrent Bytes')
|
||||
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')
|
||||
CreateTorrentNode.on_register()
|
||||
CreateTorrentNode.on_register()
|
||||
|
||||
Reference in New Issue
Block a user