feat 兼容TR下载任务重复添加

This commit is contained in:
jxxghp
2023-11-30 15:58:44 +08:00
parent aefba83319
commit 6a8c684af0
2 changed files with 46 additions and 2 deletions

View File

@ -98,11 +98,13 @@ class QbittorrentModule(_ModuleBase):
for torrent in torrents: for torrent in torrents:
if torrent.get("name") == torrent_name: if torrent.get("name") == torrent_name:
torrent_hash = torrent.get("hash") torrent_hash = torrent.get("hash")
torrent_tags = [str(tag).strip() for tag in torrent.get("tags").split(',')]
logger.warn(f"下载器中已存在该种子任务:{torrent_hash} - {torrent.get('name')}") logger.warn(f"下载器中已存在该种子任务:{torrent_hash} - {torrent.get('name')}")
# 给种子打上标签 # 给种子打上标签
if settings.TORRENT_TAG: if "已整理" in torrent_tags:
logger.info(f"给种子 {torrent_hash} 打上标签:{settings.TORRENT_TAG}")
self.qbittorrent.remove_torrents_tag(ids=torrent_hash, tag=['已整理']) self.qbittorrent.remove_torrents_tag(ids=torrent_hash, tag=['已整理'])
if settings.TORRENT_TAG and settings.TORRENT_TAG not in torrent_tags:
logger.info(f"给种子 {torrent_hash} 打上标签:{settings.TORRENT_TAG}")
self.qbittorrent.set_torrents_tag(ids=torrent_hash, tags=[settings.TORRENT_TAG]) self.qbittorrent.set_torrents_tag(ids=torrent_hash, tags=[settings.TORRENT_TAG])
return torrent_hash, f"下载任务已存在" return torrent_hash, f"下载任务已存在"
return None, f"添加种子任务失败:{content}" return None, f"添加种子任务失败:{content}"

View File

@ -2,6 +2,7 @@ import shutil
from pathlib import Path from pathlib import Path
from typing import Set, Tuple, Optional, Union, List from typing import Set, Tuple, Optional, Union, List
from torrentool.torrent import Torrent
from transmission_rpc import File from transmission_rpc import File
from app import schemas from app import schemas
@ -47,6 +48,21 @@ class TransmissionModule(_ModuleBase):
:param category: 分类TR中未使用 :param category: 分类TR中未使用
:return: 种子Hash :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: if not content:
return return
if isinstance(content, Path) and not content.exists(): if isinstance(content, Path) and not content.exists():
@ -68,6 +84,32 @@ class TransmissionModule(_ModuleBase):
cookie=cookie cookie=cookie
) )
if not torrent: if not torrent:
# 读取种子的名称
torrent_name = __get_torrent_name()
if not torrent_name:
return None, f"添加种子任务失败:无法读取种子文件"
# 查询所有下载器的种子
torrents, error = self.transmission.get_torrents()
if error:
return None, "无法连接transmission下载器"
if torrents:
for torrent in torrents:
if torrent.name == torrent_name:
torrent_hash = torrent.hashString
logger.warn(f"下载器中已存在该种子任务:{torrent_hash} - {torrent.name}")
# 给种子打上标签
if settings.TORRENT_TAG:
logger.info(f"给种子 {torrent_hash} 打上标签:{settings.TORRENT_TAG}")
# 种子标签
labels = [str(tag).strip()
for tag in torrent.labels] if hasattr(torrent, "labels") else []
if "已整理" in labels:
labels.remove("已整理")
self.transmission.set_torrent_tag(ids=torrent_hash, tags=labels)
if settings.TORRENT_TAG and settings.TORRENT_TAG not in labels:
labels.append(settings.TORRENT_TAG)
self.transmission.set_torrent_tag(ids=torrent_hash, tags=labels)
return torrent_hash, f"下载任务已存在"
return None, f"添加种子任务失败:{content}" return None, f"添加种子任务失败:{content}"
else: else:
torrent_hash = torrent.hashString torrent_hash = torrent.hashString