feat 优先级规则按订阅和搜索拆分

This commit is contained in:
jxxghp
2023-09-19 21:40:36 +08:00
parent 2250e7db39
commit 1799b63abb
6 changed files with 61 additions and 17 deletions

View File

@ -0,0 +1,40 @@
"""1.0.6
Revision ID: 232dfa044617
Revises: e734c7fe6056
Create Date: 2023-09-19 21:34:41.994617
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '232dfa044617'
down_revision = 'e734c7fe6056'
branch_labels = None
depends_on = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# 搜索优先级
op.execute("delete from systemconfig where key = 'SearchFilterRules';")
op.execute(
"insert into systemconfig(key, value) VALUES('SearchFilterRules', (select value from systemconfig where key= 'FilterRules'));")
# 订阅优先级
op.execute("delete from systemconfig where key = 'SubscribeFilterRules';")
op.execute(
"insert into systemconfig(key, value) VALUES('SubscribeFilterRules', (select value from systemconfig where key= 'FilterRules'));")
# 洗版优先级
op.execute("delete from systemconfig where key = 'BestVersionFilterRules';")
op.execute(
"insert into systemconfig(key, value) VALUES('BestVersionFilterRules', (select value from systemconfig where key= 'FilterRules2'));")
# 删除旧的优先级规则
op.execute("delete from systemconfig where key = 'FilterRules';")
op.execute("delete from systemconfig where key = 'FilterRules2';")
# ### end Alembic commands ###
def downgrade() -> None:
pass

View File

@ -169,31 +169,33 @@ def latest_version(_: schemas.TokenPayload = Depends(verify_token)):
return schemas.Response(success=False) return schemas.Response(success=False)
@router.get("/ruletest", summary="过滤规则测试", response_model=schemas.Response) @router.get("/ruletest", summary="优先级规则测试", response_model=schemas.Response)
def ruletest(title: str, def ruletest(title: str,
subtitle: str = None, subtitle: str = None,
ruletype: str = None, ruletype: str = None,
db: Session = Depends(get_db), db: Session = Depends(get_db),
_: schemas.TokenPayload = Depends(verify_token)): _: schemas.TokenPayload = Depends(verify_token)):
""" """
过滤规则测试,规则类型 1-订阅2-洗版 过滤规则测试,规则类型 1-订阅2-洗版3-搜索
""" """
torrent = schemas.TorrentInfo( torrent = schemas.TorrentInfo(
title=title, title=title,
description=subtitle, description=subtitle,
) )
if ruletype == "2": if ruletype == "2":
rule_string = SystemConfigOper().get(SystemConfigKey.FilterRules2) rule_string = SystemConfigOper().get(SystemConfigKey.BestVersionFilterRules)
elif ruletype == "3":
rule_string = SystemConfigOper().get(SystemConfigKey.SearchFilterRules)
else: else:
rule_string = SystemConfigOper().get(SystemConfigKey.FilterRules) rule_string = SystemConfigOper().get(SystemConfigKey.SubscribeFilterRules)
if not rule_string: if not rule_string:
return schemas.Response(success=False, message="过滤规则未设置!") return schemas.Response(success=False, message="优先级规则未设置!")
# 过滤 # 过滤
result = SearchChain(db).filter_torrents(rule_string=rule_string, result = SearchChain(db).filter_torrents(rule_string=rule_string,
torrent_list=[torrent]) torrent_list=[torrent])
if not result: if not result:
return schemas.Response(success=False, message="不符合过滤规则!") return schemas.Response(success=False, message="不符合优先级规则!")
return schemas.Response(success=True, data={ return schemas.Response(success=True, data={
"priority": 100 - result[0].pri_order + 1 "priority": 100 - result[0].pri_order + 1
}) })

View File

@ -88,7 +88,7 @@ class SearchChain(ChainBase):
:param keyword: 搜索关键词 :param keyword: 搜索关键词
:param no_exists: 缺失的媒体信息 :param no_exists: 缺失的媒体信息
:param sites: 站点ID列表为空时搜索所有站点 :param sites: 站点ID列表为空时搜索所有站点
:param filter_rule: 过滤规则,为空是使用默认过滤规则 :param filter_rule: 过滤规则,为空是使用默认搜索过滤规则
:param area: 搜索范围title or imdbid :param area: 搜索范围title or imdbid
""" """
logger.info(f'开始搜索资源,关键词:{keyword or mediainfo.title} ...') logger.info(f'开始搜索资源,关键词:{keyword or mediainfo.title} ...')
@ -130,7 +130,7 @@ class SearchChain(ChainBase):
# 过滤种子 # 过滤种子
if filter_rule is None: if filter_rule is None:
# 取默认过滤规则 # 取默认过滤规则
filter_rule = self.systemconfig.get(SystemConfigKey.FilterRules) filter_rule = self.systemconfig.get(SystemConfigKey.SearchFilterRules)
if filter_rule: if filter_rule:
logger.info(f'开始过滤资源,当前规则:{filter_rule} ...') logger.info(f'开始过滤资源,当前规则:{filter_rule} ...')
result: List[TorrentInfo] = self.filter_torrents(rule_string=filter_rule, result: List[TorrentInfo] = self.filter_torrents(rule_string=filter_rule,

View File

@ -264,9 +264,9 @@ class SubscribeChain(ChainBase):
sites = None sites = None
# 过滤规则 # 过滤规则
if subscribe.best_version: if subscribe.best_version:
filter_rule = self.systemconfig.get(SystemConfigKey.FilterRules2) filter_rule = self.systemconfig.get(SystemConfigKey.BestVersionFilterRules)
else: else:
filter_rule = self.systemconfig.get(SystemConfigKey.FilterRules) filter_rule = self.systemconfig.get(SystemConfigKey.SubscribeFilterRules)
# 搜索,同时电视剧会过滤掉不需要的剧集 # 搜索,同时电视剧会过滤掉不需要的剧集
contexts = self.searchchain.process(mediainfo=mediainfo, contexts = self.searchchain.process(mediainfo=mediainfo,
keyword=subscribe.keyword, keyword=subscribe.keyword,
@ -507,9 +507,9 @@ class SubscribeChain(ChainBase):
continue continue
# 过滤规则 # 过滤规则
if subscribe.best_version: if subscribe.best_version:
filter_rule = self.systemconfig.get(SystemConfigKey.FilterRules2) filter_rule = self.systemconfig.get(SystemConfigKey.BestVersionFilterRules)
else: else:
filter_rule = self.systemconfig.get(SystemConfigKey.FilterRules) filter_rule = self.systemconfig.get(SystemConfigKey.SubscribeFilterRules)
result: List[TorrentInfo] = self.filter_torrents( result: List[TorrentInfo] = self.filter_torrents(
rule_string=filter_rule, rule_string=filter_rule,
torrent_list=[torrent_info], torrent_list=[torrent_info],

View File

@ -549,7 +549,7 @@ class RssSubscribe(_PluginBase):
logger.error(f"未获取到RSS数据{url}") logger.error(f"未获取到RSS数据{url}")
return return
# 过滤规则 # 过滤规则
filter_rule = self.systemconfig.get(SystemConfigKey.FilterRules) filter_rule = self.systemconfig.get(SystemConfigKey.SubscribeFilterRules)
# 解析数据 # 解析数据
for result in results: for result in results:
try: try:

View File

@ -48,7 +48,7 @@ class SystemConfigKey(Enum):
UserInstalledPlugins = "UserInstalledPlugins" UserInstalledPlugins = "UserInstalledPlugins"
# 搜索结果 # 搜索结果
SearchResults = "SearchResults" SearchResults = "SearchResults"
# 索站点范围 # 索站点范围
IndexerSites = "IndexerSites" IndexerSites = "IndexerSites"
# 订阅站点范围 # 订阅站点范围
RssSites = "RssSites" RssSites = "RssSites"
@ -60,10 +60,12 @@ class SystemConfigKey(Enum):
CustomReleaseGroups = "CustomReleaseGroups" CustomReleaseGroups = "CustomReleaseGroups"
# 自定义识别词 # 自定义识别词
CustomIdentifiers = "CustomIdentifiers" CustomIdentifiers = "CustomIdentifiers"
# 过滤规则 # 搜索优先级规则
FilterRules = "FilterRules" SearchFilterRules = "SearchFilterRules"
# 订阅优先级规则
SubscribeFilterRules = "SubscribeFilterRules"
# 洗版规则 # 洗版规则
FilterRules2 = "FilterRules2" BestVersionFilterRules = "BestVersionFilterRules"
# 默认包含与排除规则 # 默认包含与排除规则
DefaultIncludeExcludeFilter = "DefaultIncludeExcludeFilter" DefaultIncludeExcludeFilter = "DefaultIncludeExcludeFilter"
# 转移屏蔽词 # 转移屏蔽词