fix #1141 修复错误种子链接一直偿试下载的问题

This commit is contained in:
jxxghp 2023-11-24 14:32:56 +08:00
parent f8edf79c59
commit ef2cfe1c1d
2 changed files with 27 additions and 1 deletions

View File

@ -12,6 +12,7 @@ from app.db.site_oper import SiteOper
from app.db.systemconfig_oper import SystemConfigOper from app.db.systemconfig_oper import SystemConfigOper
from app.helper.rss import RssHelper from app.helper.rss import RssHelper
from app.helper.sites import SitesHelper from app.helper.sites import SitesHelper
from app.helper.torrent import TorrentHelper
from app.log import logger from app.log import logger
from app.schemas import Notification from app.schemas import Notification
from app.schemas.types import SystemConfigKey, MessageChannel, NotificationType from app.schemas.types import SystemConfigKey, MessageChannel, NotificationType
@ -34,6 +35,7 @@ class TorrentsChain(ChainBase, metaclass=Singleton):
self.rsshelper = RssHelper() self.rsshelper = RssHelper()
self.systemconfig = SystemConfigOper() self.systemconfig = SystemConfigOper()
self.mediachain = MediaChain() self.mediachain = MediaChain()
self.torrenthelper = TorrentHelper()
def remote_refresh(self, channel: MessageChannel, userid: Union[str, int] = None): def remote_refresh(self, channel: MessageChannel, userid: Union[str, int] = None):
""" """
@ -143,6 +145,11 @@ class TorrentsChain(ChainBase, metaclass=Singleton):
# 读取缓存 # 读取缓存
torrents_cache = self.get_torrents() torrents_cache = self.get_torrents()
# 缓存过滤掉无效种子
for _domain, _torrents in torrents_cache.items():
torrents_cache[_domain] = [_torrent for _torrent in _torrents
if not self.torrenthelper.is_invalid(_torrent.torrent_info.enclosure)]
# 所有站点索引 # 所有站点索引
indexers = self.siteshelper.get_indexers() indexers = self.siteshelper.get_indexers()
# 遍历站点缓存资源 # 遍历站点缓存资源

View File

@ -14,13 +14,17 @@ from app.db.systemconfig_oper import SystemConfigOper
from app.log import logger from app.log import logger
from app.utils.http import RequestUtils from app.utils.http import RequestUtils
from app.schemas.types import MediaType, SystemConfigKey from app.schemas.types import MediaType, SystemConfigKey
from app.utils.singleton import Singleton
class TorrentHelper: class TorrentHelper(metaclass=Singleton):
""" """
种子帮助类 种子帮助类
""" """
# 失败的种子:站点链接
_invalid_torrents = []
def __init__(self): def __init__(self):
self.system_config = SystemConfigOper() self.system_config = SystemConfigOper()
@ -123,6 +127,8 @@ class TorrentHelper:
elif req.status_code == 429: elif req.status_code == 429:
return None, None, "", [], "触发站点流控,请稍后重试" return None, None, "", [], "触发站点流控,请稍后重试"
else: else:
# 把错误的种子记下来,避免重复使用
self.add_invalid(url)
return None, None, "", [], f"下载种子出错,状态码:{req.status_code}" return None, None, "", [], f"下载种子出错,状态码:{req.status_code}"
@staticmethod @staticmethod
@ -276,3 +282,16 @@ class TorrentHelper:
continue continue
episodes = list(set(episodes).union(set(meta.episode_list))) episodes = list(set(episodes).union(set(meta.episode_list)))
return episodes return episodes
def is_invalid(self, url: str) -> bool:
"""
判断种子是否是无效种子
"""
return url in self._invalid_torrents
def add_invalid(self, url: str):
"""
添加无效种子
"""
if url not in self._invalid_torrents:
self._invalid_torrents.append(url)