mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 23:47:41 +08:00
feat(subscribe): optimize best version to support multiple states
This commit is contained in:
+32
-25
@@ -395,15 +395,17 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
|
|||||||
return
|
return
|
||||||
# 当前下载资源的优先级
|
# 当前下载资源的优先级
|
||||||
priority = max([item.torrent_info.pri_order for item in downloads])
|
priority = max([item.torrent_info.pri_order for item in downloads])
|
||||||
|
# 订阅存在待定策略,不管是否已完成,均需更新订阅信息
|
||||||
|
self.subscribeoper.update(subscribe.id, {
|
||||||
|
"current_priority": priority,
|
||||||
|
"last_update": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
})
|
||||||
if priority == 100:
|
if priority == 100:
|
||||||
# 洗版完成
|
# 洗版完成
|
||||||
self.__finish_subscribe(subscribe=subscribe, meta=meta, mediainfo=mediainfo, bestversion=True)
|
self.__finish_subscribe(subscribe=subscribe, meta=meta, mediainfo=mediainfo)
|
||||||
else:
|
else:
|
||||||
# 正在洗版,更新资源优先级
|
# 正在洗版,更新资源优先级
|
||||||
logger.info(f'{mediainfo.title_year} 正在洗版,更新资源优先级为 {priority}')
|
logger.info(f'{mediainfo.title_year} 正在洗版,更新资源优先级为 {priority}')
|
||||||
self.subscribeoper.update(subscribe.id, {
|
|
||||||
"current_priority": priority
|
|
||||||
})
|
|
||||||
|
|
||||||
def finish_subscribe_or_not(self, subscribe: Subscribe, meta: MetaInfo, mediainfo: MediaInfo,
|
def finish_subscribe_or_not(self, subscribe: Subscribe, meta: MetaInfo, mediainfo: MediaInfo,
|
||||||
downloads: List[Context] = None,
|
downloads: List[Context] = None,
|
||||||
@@ -432,9 +434,12 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
|
|||||||
# 未下载到内容且不完整
|
# 未下载到内容且不完整
|
||||||
logger.info(f'{mediainfo.title_year} 未下载完整,继续订阅 ...')
|
logger.info(f'{mediainfo.title_year} 未下载完整,继续订阅 ...')
|
||||||
elif downloads:
|
elif downloads:
|
||||||
# 洗板,下载到了内容,更新资源优先级
|
# 洗版下载到了内容,更新资源优先级
|
||||||
self.update_subscribe_priority(subscribe=subscribe, meta=meta,
|
self.update_subscribe_priority(subscribe=subscribe, meta=meta,
|
||||||
mediainfo=mediainfo, downloads=downloads)
|
mediainfo=mediainfo, downloads=downloads)
|
||||||
|
elif subscribe.current_priority == 100:
|
||||||
|
# 洗版完成
|
||||||
|
self.__finish_subscribe(subscribe=subscribe, meta=meta, mediainfo=mediainfo)
|
||||||
else:
|
else:
|
||||||
# 洗版,未下载到内容
|
# 洗版,未下载到内容
|
||||||
logger.info(f'{mediainfo.title_year} 继续洗版 ...')
|
logger.info(f'{mediainfo.title_year} 继续洗版 ...')
|
||||||
@@ -866,8 +871,7 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
|
|||||||
if update_data:
|
if update_data:
|
||||||
self.subscribeoper.update(subscribe.id, update_data)
|
self.subscribeoper.update(subscribe.id, update_data)
|
||||||
|
|
||||||
def __finish_subscribe(self, subscribe: Subscribe, mediainfo: MediaInfo,
|
def __finish_subscribe(self, subscribe: Subscribe, mediainfo: MediaInfo, meta: MetaBase):
|
||||||
meta: MetaBase, bestversion: bool = False):
|
|
||||||
"""
|
"""
|
||||||
完成订阅
|
完成订阅
|
||||||
"""
|
"""
|
||||||
@@ -875,9 +879,7 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
|
|||||||
if subscribe.state == "P":
|
if subscribe.state == "P":
|
||||||
return
|
return
|
||||||
# 完成订阅
|
# 完成订阅
|
||||||
msgstr = "订阅"
|
msgstr = "订阅" if not subscribe.best_version else "洗版"
|
||||||
if bestversion:
|
|
||||||
msgstr = "洗版"
|
|
||||||
logger.info(f'{mediainfo.title_year} 完成{msgstr}')
|
logger.info(f'{mediainfo.title_year} 完成{msgstr}')
|
||||||
# 新增订阅历史
|
# 新增订阅历史
|
||||||
self.subscribeoper.add_history(**subscribe.to_dict())
|
self.subscribeoper.add_history(**subscribe.to_dict())
|
||||||
@@ -1291,25 +1293,30 @@ class SubscribeChain(ChainBase, metaclass=Singleton):
|
|||||||
totals=totals
|
totals=totals
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# 洗版
|
# 洗版,如果已经满足了优先级,则认为已经洗版完成
|
||||||
exist_flag = False
|
if subscribe.current_priority == 100:
|
||||||
if meta.type == MediaType.TV:
|
exist_flag = True
|
||||||
# 对于电视剧,构造缺失的媒体信息
|
|
||||||
no_exists = {
|
|
||||||
mediakey: {
|
|
||||||
subscribe.season: NotExistMediaInfo(
|
|
||||||
season=subscribe.season,
|
|
||||||
episodes=[],
|
|
||||||
total_episode=subscribe.total_episode,
|
|
||||||
start_episode=subscribe.start_episode or 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
no_exists = {}
|
no_exists = {}
|
||||||
|
else:
|
||||||
|
exist_flag = False
|
||||||
|
if meta.type == MediaType.TV:
|
||||||
|
# 对于电视剧,构造缺失的媒体信息
|
||||||
|
no_exists = {
|
||||||
|
mediakey: {
|
||||||
|
subscribe.season: NotExistMediaInfo(
|
||||||
|
season=subscribe.season,
|
||||||
|
episodes=[],
|
||||||
|
total_episode=subscribe.total_episode,
|
||||||
|
start_episode=subscribe.start_episode or 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
no_exists = {}
|
||||||
|
|
||||||
# 如果媒体已存在,执行订阅完成操作
|
# 如果媒体已存在,执行订阅完成操作
|
||||||
if exist_flag:
|
if exist_flag:
|
||||||
logger.info(f'{mediainfo.title_year} 媒体库中已存在')
|
if not subscribe.best_version:
|
||||||
|
logger.info(f'{mediainfo.title_year} 媒体库中已存在')
|
||||||
self.finish_subscribe_or_not(subscribe=subscribe, meta=meta, mediainfo=mediainfo, force=True)
|
self.finish_subscribe_or_not(subscribe=subscribe, meta=meta, mediainfo=mediainfo, force=True)
|
||||||
return True, no_exists
|
return True, no_exists
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user