CoolFace
Apppublic

Kfunga/mirror

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
nodes.py202 linesDownload Raw Back to web
1from anytree import NodeMixin2from os import environ3from re import findall as re_findall4 5DOWNLOAD_DIR = environ.get(6    "DOWNLOAD_DIR",7    ""8)9if len(DOWNLOAD_DIR) == 0:10    DOWNLOAD_DIR = "/usr/src/app/Downloads/"11elif not DOWNLOAD_DIR.endswith("/"):12    DOWNLOAD_DIR += "/"13 14 15class TorNode(NodeMixin):16    def __init__(17        self,18        name,19        is_folder=False,20        is_file=False,21        parent=None,22        size=None,23        priority=None,24        file_id=None,25        progress=None,26    ):27        super().__init__()28        self.name = name29        self.is_folder = is_folder30        self.is_file = is_file31 32        if parent is not None:33            self.parent = parent34        if size is not None:35            self.fsize = size36        if priority is not None:37            self.priority = priority38        if file_id is not None:39            self.file_id = file_id40        if progress is not None:41            self.progress = progress42 43 44def qb_get_folders(path):45    return path.split("/")46 47 48def get_folders(path):49    fs = re_findall(f"{DOWNLOAD_DIR}[0-9]+/(.+)", path)[0]50    return fs.split("/")51 52 53def make_tree(res, tool=False):54    if tool == "qbit":55        parent = TorNode("Torrent")56        for i in res:57            folders = qb_get_folders(i.name)58            if len(folders) > 1:59                previous_node = parent60                for j in range(len(folders) - 1):61                    current_node = next(62                        (k for k in previous_node.children if k.name == folders[j]),63                        None,64                    )65                    if current_node is None:66                        previous_node = TorNode(67                            folders[j],68                            parent=previous_node,69                            is_folder=True70                        )71                    else:72                        previous_node = current_node73                TorNode(74                    folders[-1],75                    is_file=True,76                    parent=previous_node,77                    size=i.size,78                    priority=i.priority,79                    file_id=i.id,80                    progress=round(i.progress * 100, 5),81                )82            else:83                TorNode(84                    folders[-1],85                    is_file=True,86                    parent=parent,87                    size=i.size,88                    priority=i.priority,89                    file_id=i.id,90                    progress=round(i.progress * 100, 5),91                )92    elif tool == "aria":93        parent = TorNode("Torrent")94        for i in res:95            folders = get_folders(i["path"])96            priority = 197            if i["selected"] == "false":98                priority = 099            if len(folders) > 1:100                previous_node = parent101                for j in range(len(folders) - 1):102                    current_node = next(103                        (k for k in previous_node.children if k.name == folders[j]),104                        None,105                    )106                    if current_node is None:107                        previous_node = TorNode(108                            folders[j],109                            parent=previous_node,110                            is_folder=True111                        )112                    else:113                        previous_node = current_node114                TorNode(115                    folders[-1],116                    is_file=True,117                    parent=previous_node,118                    size=i["length"],119                    priority=priority,120                    file_id=i["index"],121                    progress=round(122                        (int(i["completedLength"]) / int(i["length"])) * 100,123                        5124                    ),125                )126            else:127                TorNode(128                    folders[-1],129                    is_file=True,130                    parent=parent,131                    size=i["length"],132                    priority=priority,133                    file_id=i["index"],134                    progress=round(135                        (int(i["completedLength"]) / int(i["length"])) * 100,136                        5137                    ),138                )139 140    else:141        parent = TorNode("Torrent")142        priority = 1143        for i in res["files"]:144            TorNode(145                i["filename"],146                is_file=True,147                parent=parent,148                size=float(i["mb"]) * 1048576,149                priority=priority,150                file_id=i["nzf_id"],151                progress=round(152                    ((float(i["mb"]) - float(i["mbleft"])) / float(i["mb"])) * 100,153                    5,154                ),155            )156 157    return create_list(158        parent,159        [160            "",161            0162        ]163    )164 165 166"""167def print_tree(parent):168    for pre, _, node in RenderTree(parent):169        treestr = u"%s%s" % (pre, node.name)170        print(treestr.ljust(8), node.is_folder, node.is_file)171"""172 173 174def create_list(par, msg):175    if par.name != ".unwanted":176        msg[0] += "<ul>"177    for i in par.children:178        msg[0] += "<li>"179        if i.is_folder:180            if i.name != ".unwanted":181                msg[182                    0183                ] += f'<input type="checkbox" name="foldernode_{msg[1]}"> <label for="{i.name}">{i.name}</label>'184            create_list(i, msg)185            msg[0] += "</li>"186            msg[1] += 1187        else:188            if i.priority == 0:189                msg[190                    0191                ] += f'<input type="checkbox" name="filenode_{i.file_id}" data-size="{i.fsize}"> <label data-size="{i.fsize}" for="filenode_{i.file_id}">{i.name}</label> / {i.progress}%'192            else:193                msg[194                    0195                ] += f'<input type="checkbox" checked name="filenode_{i.file_id}" data-size="{i.fsize}"> <label data-size="{i.fsize}" for="filenode_{i.file_id}">{i.name}</label> / {i.progress}%'196            msg[0] += f'<input type="hidden" value="off" name="filenode_{i.file_id}">'197            msg[0] += "</li>"198 199    if par.name != ".unwanted":200        msg[0] += "</ul>"201    return msg202