Skip to content

Other Tree Format

Rhilip edited this page Feb 24, 2025 · 3 revisions

By default, Call $fileTree = $torrent->getFileTree(?$sortType = TorrentFile::FILETREE_SORT_NORMAL); will return the array like:

[
    "torrentname" => [
        "directory" => [
            "filename2" => 2345
        ],
        "filename1" => 123
   ]
]

However, You can trans to other format by other code outsize the Bencode Library.

jsTree Format

Tree Schema:

interface TreeNode {
  id: string,
  label: string,
  size: number,
  children?: TreeNode[]
}

Example Javascript Transform Code:

function convertToJsTree(data, parentId = '', index = 1) {
    let result = [];
    for (let key in data) {
        let currentId = parentId? `${parentId}-${index}` : `${index}`;
        let node = { id: currentId, label: key };
        if (typeof data[key] === 'object') {
            let folderSize = 0;
            let children = convertToJsTree(data[key], currentId, 1);
            children.forEach(child => {
                folderSize += child.size;
            });
            node.size = folderSize;
            node.children = children;
        } else {
            node.size = data[key];
        }
        result.push(node);
        index++;
    }
    return result;
}

Example PHP Transform Code:

function convertToJsTree($data, $parentId = '', $index = 1) {
    $result = [];
    foreach ($data as $key => $value) {
        $currentId = $parentId? $parentId. '-'. $index : (string) $index;
        $node = ['id' => $currentId, 'label' => $key];
        if (is_array($value)) {
            $folderSize = 0;
            $children = convertToJsTree($value, $currentId, 1);
            foreach ($children as $child) {
                $folderSize += $child['size'];
            }
            $node['size'] = $folderSize;
            $node['children'] = $children;
        } else {
            $node['size'] = $value;
        }
        $result[] = $node;
        $index++;
    }
    return $result;
}

Clone this wiki locally