mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-08 17:08:35 +08:00
fix(subscribe): record movie completion priority (#6033)
This commit is contained in:
+9
-12
@@ -1306,18 +1306,16 @@ class SubscribeChain(ChainBase):
|
|||||||
logger.debug(f"search Lock released at {datetime.now()}")
|
logger.debug(f"search Lock released at {datetime.now()}")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __update_movie_best_version_download_priority(
|
def __update_movie_download_priority(
|
||||||
subscribe: Subscribe,
|
subscribe: Subscribe,
|
||||||
mediainfo: MediaInfo,
|
mediainfo: MediaInfo,
|
||||||
downloads: Optional[List[Context]],
|
downloads: Optional[List[Context]],
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
记录电影洗版本轮下载资源优先级。
|
记录电影本轮下载资源优先级,用作后续电影洗版的起始质量状态。
|
||||||
"""
|
"""
|
||||||
if not downloads:
|
if not downloads:
|
||||||
return
|
return
|
||||||
if not subscribe.best_version:
|
|
||||||
return
|
|
||||||
priority = max([item.torrent_info.pri_order for item in downloads])
|
priority = max([item.torrent_info.pri_order for item in downloads])
|
||||||
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
@@ -1330,7 +1328,7 @@ class SubscribeChain(ChainBase):
|
|||||||
})
|
})
|
||||||
subscribe.current_priority = priority
|
subscribe.current_priority = priority
|
||||||
subscribe.last_update = now
|
subscribe.last_update = now
|
||||||
if priority != 100:
|
if subscribe.best_version and priority != 100:
|
||||||
# 正在洗版,更新资源优先级
|
# 正在洗版,更新资源优先级
|
||||||
logger.info(f'{mediainfo.title_year} 正在洗版,更新资源优先级为 {priority}')
|
logger.info(f'{mediainfo.title_year} 正在洗版,更新资源优先级为 {priority}')
|
||||||
|
|
||||||
@@ -1348,6 +1346,12 @@ class SubscribeChain(ChainBase):
|
|||||||
self.__record_subscribe_download_facts(subscribe=subscribe, mediainfo=mediainfo, downloads=downloads)
|
self.__record_subscribe_download_facts(subscribe=subscribe, mediainfo=mediainfo, downloads=downloads)
|
||||||
elif downloads:
|
elif downloads:
|
||||||
self.__update_subscribe_note(subscribe=subscribe, downloads=downloads)
|
self.__update_subscribe_note(subscribe=subscribe, downloads=downloads)
|
||||||
|
if downloads and meta.type == MediaType.MOVIE:
|
||||||
|
self.__update_movie_download_priority(
|
||||||
|
subscribe=subscribe,
|
||||||
|
mediainfo=mediainfo,
|
||||||
|
downloads=downloads,
|
||||||
|
)
|
||||||
# 是否完成订阅
|
# 是否完成订阅
|
||||||
if not subscribe.best_version:
|
if not subscribe.best_version:
|
||||||
# 普通订阅:先按 lefts 写 lack,再判断完成
|
# 普通订阅:先按 lefts 写 lack,再判断完成
|
||||||
@@ -1366,13 +1370,6 @@ class SubscribeChain(ChainBase):
|
|||||||
logger.info(f'{mediainfo.title_year} 未下载完整,继续订阅 ...')
|
logger.info(f'{mediainfo.title_year} 未下载完整,继续订阅 ...')
|
||||||
return
|
return
|
||||||
|
|
||||||
if downloads and meta.type == MediaType.MOVIE:
|
|
||||||
# 电影没有按集质量事实,只能用 current_priority 表达洗版下载质量。
|
|
||||||
self.__update_movie_best_version_download_priority(
|
|
||||||
subscribe=subscribe,
|
|
||||||
mediainfo=mediainfo,
|
|
||||||
downloads=downloads,
|
|
||||||
)
|
|
||||||
if meta.type == MediaType.TV:
|
if meta.type == MediaType.TV:
|
||||||
self.__refresh_subscribe_progress_with_no_exists(
|
self.__refresh_subscribe_progress_with_no_exists(
|
||||||
no_exists=lefts,
|
no_exists=lefts,
|
||||||
|
|||||||
@@ -1903,7 +1903,7 @@ class SubscribeNoteTrackingTest(TestCase):
|
|||||||
|
|
||||||
with patch.object(SUBSCRIBE_CHAIN_MODULE, "SubscribeOper", _SubscribeOper), patch.object(
|
with patch.object(SUBSCRIBE_CHAIN_MODULE, "SubscribeOper", _SubscribeOper), patch.object(
|
||||||
SubscribeChain,
|
SubscribeChain,
|
||||||
"_SubscribeChain__update_movie_best_version_download_priority",
|
"_SubscribeChain__update_movie_download_priority",
|
||||||
), patch.object(
|
), patch.object(
|
||||||
SubscribeChain,
|
SubscribeChain,
|
||||||
"_SubscribeChain__finish_subscribe",
|
"_SubscribeChain__finish_subscribe",
|
||||||
@@ -2819,3 +2819,44 @@ class SubscribeDownloadFactsTest(TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
refresh_mock.assert_not_called()
|
refresh_mock.assert_not_called()
|
||||||
|
|
||||||
|
def test_movie_normal_download_records_current_priority_before_completion(self):
|
||||||
|
subscribe = self._build_subscribe(
|
||||||
|
type=MediaType.MOVIE.value,
|
||||||
|
best_version=0,
|
||||||
|
best_version_full=0,
|
||||||
|
current_priority=None,
|
||||||
|
episode_priority={},
|
||||||
|
note=[],
|
||||||
|
tmdbid=30003,
|
||||||
|
total_episode=1,
|
||||||
|
lack_episode=1,
|
||||||
|
)
|
||||||
|
download = self._download(episodes=[], pri_order=90)
|
||||||
|
download.media_info = SimpleNamespace(type=MediaType.MOVIE, tmdb_id=30003, douban_id=None)
|
||||||
|
download.meta_info = SimpleNamespace(episode_list=[], season_list=[])
|
||||||
|
updates = []
|
||||||
|
finished = []
|
||||||
|
|
||||||
|
class _SubscribeOper:
|
||||||
|
def update(self, subscribe_id, payload):
|
||||||
|
updates.append(payload)
|
||||||
|
|
||||||
|
chain = self.SubscribeChain()
|
||||||
|
|
||||||
|
def finish_probe(subscribe, **_kwargs):
|
||||||
|
finished.append(subscribe.current_priority)
|
||||||
|
|
||||||
|
with patch.object(self.module, "SubscribeOper", return_value=_SubscribeOper()), \
|
||||||
|
patch.object(chain, "_SubscribeChain__finish_subscribe", side_effect=finish_probe):
|
||||||
|
chain.finish_subscribe_or_not(
|
||||||
|
subscribe=subscribe,
|
||||||
|
meta=SimpleNamespace(type=MediaType.MOVIE),
|
||||||
|
mediainfo=SimpleNamespace(title_year="下载事实电影 (2026)"),
|
||||||
|
downloads=[download],
|
||||||
|
lefts={},
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(subscribe.current_priority, 90)
|
||||||
|
self.assertEqual(finished, [90])
|
||||||
|
self.assertIn({"current_priority": 90, "last_update": subscribe.last_update}, updates)
|
||||||
|
|||||||
Reference in New Issue
Block a user