alist icon indicating copy to clipboard operation
alist copied to clipboard

Alist存储间的复制优化

Open dixtdf opened this issue 1 year ago • 4 comments

Please make sure of the following things

  • [X] I have read the documentation.
  • [X] I'm sure there are no duplicate issues or discussions.
  • [X] I'm sure this feature is not implemented.
  • [X] I'm sure it's a reasonable and popular requirement.

Description of the feature / 需求描述

当复制文件过多时http://127.0.0.1:5244/@manage/tasks/copy界面会非常卡,希望可以分割已完成和未完成任务

Suggested solution / 实现思路

通过分页或限制页面dom加载数量实现性能优化

Additional context / 附件

No response

dixtdf avatar Mar 09 '23 05:03 dixtdf

Thanks for opening your first issue here! Be sure to follow the issue template!

welcome[bot] avatar Mar 09 '23 05:03 welcome[bot]

See

  1. 100% #3507

github-actions[bot] avatar Mar 09 '23 05:03 github-actions[bot]

  1. 100%Alist存储间的复制优化 #3507

非#3507所述问题

dixtdf avatar Mar 09 '23 05:03 dixtdf

同时希望支持筛选出错的任务并重试

mnpq-top avatar Mar 09 '23 13:03 mnpq-top

同时希望支持筛选出错的任务并重试

下面是我用python实现的功能,可能有问题(别喷我的代码),但可以临时用一下(有大佬能帮忙优化一下最好🙃):

import re
import requests

# 你部署alist的网址,如http://xx.xx,https://xx.xx
domain = ""
state_url = domain + "/api/admin/task/copy/done"
copy_url = domain + "/api/fs/copy"
clear_url = domain + "/api/admin/task/copy/delete?tid="
# 管理-设置-其他-令牌里的东西
auth_token = ""


def retry_failed_task():
    header = {"Authorization": auth_token}
    req = requests.get(state_url, headers=header)
    data = req.json()
    if data["code"] == 200:
        data = data["data"]
        if data:
            for task in data:
                if task["state"] == "errored":
                    task_content = task["name"]
                    pre_dirs = re.findall(r"\[.+?\]", task_content)
                    pre_content = re.findall(r"\(.+?\)", task_content)
                    pre_src_dir = pre_dirs[0][1:-1]
                    pre_src_dir += pre_content[0][1:-1]
                    split_point = pre_src_dir.rfind("/")
                    src_dir = pre_src_dir[:split_point]
                    names = [pre_src_dir[split_point + 1:]]
                    dst_dir = pre_dirs[-int(len(pre_dirs)/2)][1:-1] + pre_content[-int(len(pre_content)/2)][1:-1]
                    add_task = {"src_dir": src_dir, "dst_dir": dst_dir, "names": names}
                    req = requests.post(copy_url, headers=header, json=add_task)
                    result = req.json()
                    if result["code"] != 200:
                        print(task_content)
                        print(result)
                    else:
                        print("retry success")
                        print(requests.post(clear_url+task["id"], headers=header).json())
                else:
                    print(requests.post(clear_url+task["id"], headers=header).json())
    else:
        print(data)


retry_failed_task()

12189108 avatar Mar 12 '23 17:03 12189108