fix #579 修改转种使用的模块

This commit is contained in:
jxxghp 2023-09-14 09:46:51 +08:00
parent 6fb0c92183
commit 9a60121914
2 changed files with 39 additions and 19 deletions

View File

@ -7,7 +7,7 @@ from typing import Any, List, Dict, Tuple, Optional
import pytz import pytz
from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger from apscheduler.triggers.cron import CronTrigger
from torrentool.torrent import Torrent from bencode import bdecode, bencode
from app.core.config import settings from app.core.config import settings
from app.helper.torrent import TorrentHelper from app.helper.torrent import TorrentHelper
@ -582,26 +582,50 @@ class TorrentTransfer(_PluginBase):
continue continue
# 如果源下载器是QB检查是否有Tracker没有的话额外获取 # 如果源下载器是QB检查是否有Tracker没有的话额外获取
trackers = None
if downloader == "qbittorrent": if downloader == "qbittorrent":
# 读取种子内容、解析种子文件
content = torrent_file.read_bytes()
if not content:
logger.warn(f"读取种子文件失败:{torrent_file}")
fail += 1
continue
# 读取trackers # 读取trackers
try: try:
torrent_main = Torrent.from_file(torrent_file) torrent_main = bdecode(content)
main_announce = torrent_main.announce_urls main_announce = torrent_main.get('announce')
except Exception as err: except Exception as err:
logger.error(f"解析种子文件 {torrent_file} 失败:{err}") logger.warn(f"解析种子文件 {torrent_file} 失败:{err}")
# 失败计数
fail += 1 fail += 1
continue continue
if not main_announce: if not main_announce:
logger.info(f"{torrent_item.get('hash')} 未发现tracker信息尝试补充tracker ...") logger.info(f"{torrent_item.get('hash')} 未发现tracker信息尝试补充tracker信息...")
# 从源下载任务信息中获取Tracker # 读取fastresume文件
torrent = torrent_item.get('torrent') fastresume_file = Path(self._fromtorrentpath) / f"{torrent_item.get('hash')}.fastresume"
# 源trackers if not fastresume_file.exists():
trackers = [tracker.get("url") for tracker in torrent.trackers logger.warn(f"fastresume文件不存在{fastresume_file}")
if str(tracker.get("url")).startswith('http')] fail += 1
logger.info(f"获取到源tracker{trackers}") continue
# 尝试补充trackers
try:
# 解析fastresume文件
fastresume = fastresume_file.read_bytes()
torrent_fastresume = bdecode(fastresume)
# 读取trackers
fastresume_trackers = torrent_fastresume.get('trackers')
if isinstance(fastresume_trackers, list) \
and len(fastresume_trackers) > 0 \
and fastresume_trackers[0]:
# 重新赋值
torrent_main['announce'] = fastresume_trackers[0][0]
# 替换种子文件路径
torrent_file = settings.TEMP_PATH / f"{torrent_item.get('hash')}.torrent"
# 编码并保存到临时文件
torrent_file.write_bytes(bencode(torrent_main))
except Exception as err:
logger.error(f"解析fastresume文件 {fastresume_file} 出错:{err}")
fail += 1
continue
# 发送到另一个下载器中下载:默认暂停、传输下载路径、关闭自动管理模式 # 发送到另一个下载器中下载:默认暂停、传输下载路径、关闭自动管理模式
logger.info(f"添加转移做种任务到下载器 {todownloader}{torrent_file}") logger.info(f"添加转移做种任务到下载器 {todownloader}{torrent_file}")
@ -617,11 +641,6 @@ class TorrentTransfer(_PluginBase):
# 下载成功 # 下载成功
logger.info(f"成功添加转移做种任务,种子文件:{torrent_file}") logger.info(f"成功添加转移做种任务,种子文件:{torrent_file}")
# 补充Tracker
if trackers:
logger.info(f"开始补充 {download_id} 的tracker{trackers}")
todownloader_obj.add_trackers(ids=[download_id], trackers=trackers)
# TR会自动校验QB需要手动校验 # TR会自动校验QB需要手动校验
if todownloader == "qbittorrent": if todownloader == "qbittorrent":
logger.info(f"qbittorrent 开始校验 {download_id} ...") logger.info(f"qbittorrent 开始校验 {download_id} ...")

View File

@ -51,4 +51,5 @@ click~=8.1.6
requests_cache~=0.5.2 requests_cache~=0.5.2
parse~=1.19.0 parse~=1.19.0
docker~=6.1.3 docker~=6.1.3
cachetools~=5.3.1 cachetools~=5.3.1
fast-bencode==1.1.3