From 208209e05fa3a65d5f1c10b115ed9479981cd39e Mon Sep 17 00:00:00 2001 From: zhengshunjin <2667579369@qq.com> Date: Fri, 1 May 2026 15:51:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor(torrent):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=A7=8D=E5=AD=90=E6=96=87=E4=BB=B6=E6=9C=8D=E5=8A=A1=E5=92=8C?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改文件重命名逻辑,移除空格和连字符处理 - 更新UI端口依赖从 sass-embedded 到 sass - 调整请求基础URL配置为局域网地址 - 重构后端运行配置以支持外部访问 - 添加种子列表路由和提取名称功能 - 移除按名称查询单个种子的路由 - 实现标准化名称提取算法 - 添加批量获取所有种子的功能 --- app/blueprints/torrent_bp.py | 19 ++++++---------- app/services/file_service.py | 1 + app/services/torrent_service.py | 37 +++++++++++++++++++++++++++++++- flask-ui/package.json | 2 +- flask-ui/src/utils/request.ts | 2 +- instance/flask.db | Bin 36864 -> 36864 bytes run.py | 2 +- 7 files changed, 47 insertions(+), 16 deletions(-) diff --git a/app/blueprints/torrent_bp.py b/app/blueprints/torrent_bp.py index 543144a..7ab5ffb 100644 --- a/app/blueprints/torrent_bp.py +++ b/app/blueprints/torrent_bp.py @@ -1,10 +1,16 @@ -from flask import Blueprint, jsonify +from flask import Blueprint, jsonify, request from app.services.torrent_service import TorrentService bp = Blueprint("torrent", __name__) +@bp.route('/') +def torrent_list(): + torrent_object = TorrentService(["C:\\Users\\Localhost\\Desktop\\BT"]) + return jsonify({"code": 200, "message": torrent_object.get_all()}) + + @bp.route('/deduplication') def torrent_deduplication(): torrent_object = TorrentService(["C:\\Users\\Localhost\\Desktop\\BT"]) @@ -15,14 +21,3 @@ def torrent_deduplication(): def torrent_statistics(): torrent_object = TorrentService(["C:\\Users\\Localhost\\Desktop\\BT"]) return jsonify({"code": 200, "message": torrent_object.statistics()}) - - -@bp.route("/") -def torrent_by_name(name): - torrent_object = TorrentService(["C:\\Users\\Localhost\\Desktop\\BT"]) - return jsonify({"code": 200, "message": torrent_object.get_by_name(name)}) - -# @bp.route("/extract/name") -# def torrent_extract_name(): -# torrent_object = TorrentService([]) -# return jsonify({"code": 200, "message": torrent_object.extract_name("AVSA-429.torrent")}) \ No newline at end of file diff --git a/app/services/file_service.py b/app/services/file_service.py index e629e36..3aeff70 100644 --- a/app/services/file_service.py +++ b/app/services/file_service.py @@ -50,6 +50,7 @@ class FileService: return self.perform_rename(entry, f"{name}{ext}") name = name.replace("-", "") + name = name.replace(" ", "") # 处理特殊前缀 for prefix in SPECIAL_PREFIXES: diff --git a/app/services/torrent_service.py b/app/services/torrent_service.py index d081afd..68e88b8 100644 --- a/app/services/torrent_service.py +++ b/app/services/torrent_service.py @@ -84,7 +84,7 @@ class TorrentService: name, ext = os.path.splitext(filename) ext = ext.lower() name = name.upper() - name = name.replace("-", "") + name.maketrans({"-": "", " ":""}) # 处理特殊前缀 for prefix in SPECIAL_PREFIXES: if name.startswith(prefix): @@ -120,3 +120,38 @@ class TorrentService: FolderService(paths=self.paths, ignore_dirs=IGNORE_DIRS, file_callback=self.get_by_name_file_callback).process_folder() return to_json_serializable(self.torrent_name) + + def extract_name_from_filename(self, filename: str) -> str: + """根据torrent文件名提取标准化名称""" + temp_name = filename.replace("-4K", "") + without_modifier_file_name = self.prefix_pattern.sub('.', temp_name) + name, ext = os.path.splitext(without_modifier_file_name) + name = name.upper() + name = name.replace("-", "") + # print(name.translate(str.maketrans({"-": "", " ":""}))) + + for prefix in SPECIAL_PREFIXES: + if name.startswith(prefix): + return f"{prefix}-{name[len(prefix):]}" + + # print(name) + new_name = [] + for i, char in enumerate(name): + # print(i, char, not name[i - 1].isnumeric()) + if i > 0 and not name[i - 1].isnumeric() and char.isnumeric(): + new_name.append(f"-{char}") + else: + new_name.append(char) + + return f"{''.join(new_name)}" + + def get_all_file_callback(self, entry: os.DirEntry): + # path_arr = entry.path.split(os.sep) + new_name = self.extract_name_from_filename(entry.name) + self.result_list.append(new_name) + + + def get_all(self): + FolderService(paths=self.paths, ignore_dirs=IGNORE_DIRS, + file_callback=self.get_all_file_callback).process_folder() + return self.result_list \ No newline at end of file diff --git a/flask-ui/package.json b/flask-ui/package.json index 12fa52a..331ecd5 100644 --- a/flask-ui/package.json +++ b/flask-ui/package.json @@ -37,7 +37,7 @@ "npm-run-all2": "^8.0.4", "oxfmt": "^0.45.0", "oxlint": "~1.60.0", - "sass-embedded": "^1.98.0", + "sass": "^1.99.0", "typescript": "~6.0.0", "unplugin-auto-import": "^21.0.0", "unplugin-vue-components": "^31.0.0", diff --git a/flask-ui/src/utils/request.ts b/flask-ui/src/utils/request.ts index be22e6d..66392a7 100644 --- a/flask-ui/src/utils/request.ts +++ b/flask-ui/src/utils/request.ts @@ -23,7 +23,7 @@ export let isRelogin: { show: boolean } = {show: false} axios.defaults.headers["Content-Type"] = "application/json; charset=UTF-8" const service: AxiosInstance = axios.create({ - baseURL: "http://localhost:5000/api/", + baseURL: "http://192.168.1.32:5000/api/", // baseURL: "/api", timeout: 10000, }) diff --git a/instance/flask.db b/instance/flask.db index e76288249f28ae1f3306a6070e45b10aebf47b57..a5bef1b0dd9d00edb1763bdb82d97de342674d2e 100644 GIT binary patch delta 31 ncmZozz|^pSX@WH4^ocUgjMFzJ%=Bk7Hemk6{Co3%e?|uYv~vru delta 31 ncmZozz|^pSX@WFk=R_H2#?FliGyU0&Oqjnhf8YGypV0vTvNj8j diff --git a/run.py b/run.py index 4b6aa16..535e9c8 100644 --- a/run.py +++ b/run.py @@ -3,4 +3,4 @@ from app import create_app app = create_app("development") if __name__ == '__main__': - app.run(debug=True, use_reloader=True, threading=True) + app.run(host='0.0.0.0', port=5000, debug=True, use_reloader=True, threaded=True)