From e411f4062aac1028a1e6dea84118ff6e6287808b Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 30 Nov 2023 13:14:55 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=85=BC=E5=AE=B9QB=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E9=87=8D=E5=A4=8D=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/qbittorrent/__init__.py | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/app/modules/qbittorrent/__init__.py b/app/modules/qbittorrent/__init__.py index 922e09d2..33c8b303 100644 --- a/app/modules/qbittorrent/__init__.py +++ b/app/modules/qbittorrent/__init__.py @@ -3,6 +3,7 @@ from pathlib import Path from typing import Set, Tuple, Optional, Union, List from qbittorrentapi import TorrentFilesList +from torrentool.torrent import Torrent from app import schemas from app.core.config import settings @@ -47,6 +48,21 @@ class QbittorrentModule(_ModuleBase): :param category: 分类 :return: 种子Hash,错误信息 """ + + def __get_torrent_name(): + """ + 获取种子名称 + """ + try: + if isinstance(content, Path): + torrentinfo = Torrent.from_file(content) + else: + torrentinfo = Torrent.from_string(content) + return torrentinfo.name + except Exception as e: + logger.error(f"获取种子名称失败:{e}") + return "" + if not content: return if isinstance(content, Path) and not content.exists(): @@ -70,6 +86,24 @@ class QbittorrentModule(_ModuleBase): category=category ) if not state: + # 读取种子的名称 + torrent_name = __get_torrent_name() + if not torrent_name: + return None, f"添加种子任务失败:无法读取种子文件" + # 查询所有下载器的种子 + torrents, error = self.qbittorrent.get_torrents() + if error: + return None, "无法连接qbittorrent下载器" + if torrents: + for torrent in torrents: + if torrent.get("name") == torrent_name: + torrent_hash = torrent.get("hash") + logger.warn(f"下载器中已存在该种子任务:{torrent_hash} - {torrent.get('name')}") + # 给种子打上标签 + if settings.TORRENT_TAG: + logger.info(f"给种子 {torrent_hash} 打上标签:{settings.TORRENT_TAG}") + self.qbittorrent.set_torrents_tag(ids=torrent_hash, tags=[settings.TORRENT_TAG]) + return torrent_hash, f"下载任务已存在" return None, f"添加种子任务失败:{content}" else: # 获取种子Hash