mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-11-06 23:28:53 +08:00
fix(music): preserve transfer entry compatibility
This commit is contained in:
@@ -32,7 +32,7 @@ def _recognize_manual_media(
|
||||
episode_group: Optional[str],
|
||||
music_release_regions: Optional[list[str]],
|
||||
music_release_scripts: Optional[list[str]],
|
||||
) -> tuple[Optional[Union[MediaInfo, MusicInfo]], Optional[MusicAlbumInfo]]:
|
||||
) -> Optional[Union[MediaInfo, MusicInfo, MusicAlbumInfo]]:
|
||||
"""识别手动指定的媒体,并为音乐专辑保留完整曲目表。"""
|
||||
if mtype == MediaType.MUSIC and music_type == MUSIC_ENTITY_ALBUM:
|
||||
album = MediaChain().get_music_album(
|
||||
@@ -41,14 +41,14 @@ def _recognize_manual_media(
|
||||
music_release_regions=music_release_regions,
|
||||
music_release_scripts=music_release_scripts,
|
||||
)
|
||||
return (album.to_music_info() if album else None), album
|
||||
return album
|
||||
return MediaChain().recognize_media(
|
||||
media_source=media_source,
|
||||
media_id=media_id,
|
||||
music_type=music_type,
|
||||
mtype=mtype,
|
||||
episode_group=episode_group,
|
||||
), None
|
||||
)
|
||||
|
||||
|
||||
class TransferHistoryOwner(_TransferOwnerBase):
|
||||
@@ -202,12 +202,11 @@ class TransferHistoryOwner(_TransferOwnerBase):
|
||||
"""
|
||||
logger.info(f"手动整理:{fileitem.path} ...")
|
||||
explicit_identity = media_source is not None or media_id is not None
|
||||
selected_music_album: Optional[MusicAlbumInfo] = None
|
||||
if explicit_identity and (not media_source or not media_id):
|
||||
return False, "手动整理需要同时提供 media_source 和 media_id"
|
||||
if media_source and media_id:
|
||||
# 有输入媒体ID时预先识别,音乐与影视统一走 recognize_media 按类型分发
|
||||
mediainfo, selected_music_album = _recognize_manual_media(
|
||||
mediainfo = _recognize_manual_media(
|
||||
media_source=media_source,
|
||||
media_id=media_id,
|
||||
mtype=mtype,
|
||||
@@ -221,9 +220,9 @@ class TransferHistoryOwner(_TransferOwnerBase):
|
||||
False,
|
||||
"未识别到媒体信息,请检查媒体来源和媒体 ID 后重试",
|
||||
)
|
||||
if media_source and not isinstance(mediainfo, MusicInfo):
|
||||
if media_source and not isinstance(mediainfo, (MusicInfo, MusicAlbumInfo)):
|
||||
mediainfo.scrape_source = media_source
|
||||
if not isinstance(mediainfo, MusicInfo):
|
||||
if not isinstance(mediainfo, (MusicInfo, MusicAlbumInfo)):
|
||||
self.obtain_images(mediainfo=mediainfo)
|
||||
|
||||
# 开始整理
|
||||
@@ -253,7 +252,6 @@ class TransferHistoryOwner(_TransferOwnerBase):
|
||||
cleanup_dest_fileitem=cleanup_dest_fileitem,
|
||||
music_release_regions=music_release_regions,
|
||||
music_release_scripts=music_release_scripts,
|
||||
selected_music_album=selected_music_album,
|
||||
)
|
||||
if not state:
|
||||
return False, errmsg
|
||||
|
||||
@@ -338,7 +338,7 @@ class TransferWorkflowOwner(_TransferOwnerBase):
|
||||
self,
|
||||
fileitem: FileItem,
|
||||
meta: MetaBase = None,
|
||||
mediainfo: Optional[Union[MediaInfo, MusicInfo]] = None,
|
||||
mediainfo: Optional[Union[MediaInfo, MusicInfo, MusicAlbumInfo]] = None,
|
||||
mtype: Optional[MediaType] = None,
|
||||
media_source: Optional[MediaSource] = None,
|
||||
media_id: Optional[str] = None,
|
||||
@@ -364,7 +364,6 @@ class TransferWorkflowOwner(_TransferOwnerBase):
|
||||
reorganize: Optional[bool] = False,
|
||||
music_release_regions: Optional[list[str]] = None,
|
||||
music_release_scripts: Optional[list[str]] = None,
|
||||
selected_music_album: Optional[MusicAlbumInfo] = None,
|
||||
) -> Tuple[bool, Union[str, dict]]:
|
||||
"""
|
||||
兼容公开整理入口,委托给内部批次执行阶段。
|
||||
@@ -401,7 +400,6 @@ class TransferWorkflowOwner(_TransferOwnerBase):
|
||||
reorganize=reorganize,
|
||||
music_release_regions=music_release_regions,
|
||||
music_release_scripts=music_release_scripts,
|
||||
selected_music_album=selected_music_album,
|
||||
)
|
||||
|
||||
def _execute_transfer(self, *args: Any, **kwargs: Any) -> Tuple[bool, Union[str, dict]]:
|
||||
@@ -412,7 +410,7 @@ class TransferWorkflowOwner(_TransferOwnerBase):
|
||||
self,
|
||||
fileitem: FileItem,
|
||||
meta: MetaBase = None,
|
||||
mediainfo: Optional[Union[MediaInfo, MusicInfo]] = None,
|
||||
mediainfo: Optional[Union[MediaInfo, MusicInfo, MusicAlbumInfo]] = None,
|
||||
mtype: Optional[MediaType] = None,
|
||||
media_source: Optional[MediaSource] = None,
|
||||
media_id: Optional[str] = None,
|
||||
@@ -439,7 +437,6 @@ class TransferWorkflowOwner(_TransferOwnerBase):
|
||||
recovery_admission: Optional[TransferAdmission] = None,
|
||||
music_release_regions: Optional[list[str]] = None,
|
||||
music_release_scripts: Optional[list[str]] = None,
|
||||
selected_music_album: Optional[MusicAlbumInfo] = None,
|
||||
) -> Tuple[bool, Union[str, dict]]:
|
||||
"""
|
||||
执行一个复杂目录的整理操作
|
||||
@@ -472,9 +469,14 @@ class TransferWorkflowOwner(_TransferOwnerBase):
|
||||
:param recovery_admission: 内部恢复调用绑定的既有 durable 记录
|
||||
:param music_release_regions: 本次音乐整理的发行地区优先级
|
||||
:param music_release_scripts: 本次音乐整理的文字字形优先级
|
||||
:param selected_music_album: 手动指定的音乐专辑,用于按已选发行版逐曲对齐
|
||||
返回:成功标识,错误信息
|
||||
"""
|
||||
selected_music_album: Optional[MusicAlbumInfo]
|
||||
if isinstance(mediainfo, MusicAlbumInfo):
|
||||
selected_music_album = mediainfo
|
||||
mediainfo = mediainfo.to_music_info()
|
||||
else:
|
||||
selected_music_album = None
|
||||
mediainfo, media_source, media_id, identity_error = _normalize_transfer_identity(
|
||||
mediainfo=mediainfo,
|
||||
mtype=mtype,
|
||||
|
||||
@@ -134,11 +134,10 @@ def test_selected_album_tracks_override_source_tag_names(tmp_path, monkeypatch):
|
||||
state, message = TransferChain.do_transfer(
|
||||
chain,
|
||||
fileitem=_directory_item(album_dir),
|
||||
mediainfo=album.to_music_info(),
|
||||
mediainfo=album,
|
||||
mtype=MediaType.MUSIC,
|
||||
media_source=MediaSource.MusicBrainz,
|
||||
media_id=album.media_id,
|
||||
selected_music_album=album,
|
||||
background=False,
|
||||
)
|
||||
|
||||
@@ -179,9 +178,9 @@ def test_manual_album_identity_forwards_full_selected_album(monkeypatch):
|
||||
|
||||
assert state is True
|
||||
assert message == ""
|
||||
assert captured["selected_music_album"] is album
|
||||
assert captured["mediainfo"] is album
|
||||
assert captured["mediainfo"].title == "七里香"
|
||||
assert [track.title for track in captured["selected_music_album"].tracks] == [
|
||||
assert [track.title for track in captured["mediainfo"].tracks] == [
|
||||
"我的地盘",
|
||||
"借口",
|
||||
]
|
||||
@@ -214,11 +213,10 @@ def test_selected_album_rejects_duplicate_local_editions(tmp_path, monkeypatch):
|
||||
state, message = TransferChain.do_transfer(
|
||||
chain,
|
||||
fileitem=_directory_item(album_dir),
|
||||
mediainfo=album.to_music_info(),
|
||||
mediainfo=album,
|
||||
mtype=MediaType.MUSIC,
|
||||
media_source=MediaSource.MusicBrainz,
|
||||
media_id=album.media_id,
|
||||
selected_music_album=album,
|
||||
background=False,
|
||||
preview=True,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user