mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-07 08:26:53 +08:00
feat(media): support iqiyi discover source
This commit is contained in:
@@ -59,6 +59,7 @@ _MEDIA_SOURCE_VALUE_ALIASES = {
|
|||||||
"mango_tv": "mangguodiscover",
|
"mango_tv": "mangguodiscover",
|
||||||
"migu_video": "migu",
|
"migu_video": "migu",
|
||||||
"tencent_video": "tencentvideodiscover",
|
"tencent_video": "tencentvideodiscover",
|
||||||
|
"iqiyi": "iqiyidiscover",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -78,6 +79,7 @@ class MediaSource(str, Enum):
|
|||||||
MangoTV = "mangguodiscover"
|
MangoTV = "mangguodiscover"
|
||||||
MiguVideo = "migu"
|
MiguVideo = "migu"
|
||||||
TencentVideo = "tencentvideodiscover"
|
TencentVideo = "tencentvideodiscover"
|
||||||
|
Iqiyi = "iqiyidiscover"
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
"""返回可直接用于 API 和数据库的规范值。"""
|
"""返回可直接用于 API 和数据库的规范值。"""
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ MEDIA_SOURCE_ALIASES = {
|
|||||||
"migu_video": MediaSource.MiguVideo,
|
"migu_video": MediaSource.MiguVideo,
|
||||||
"tencentvideodiscover": MediaSource.TencentVideo,
|
"tencentvideodiscover": MediaSource.TencentVideo,
|
||||||
"tencent_video": MediaSource.TencentVideo,
|
"tencent_video": MediaSource.TencentVideo,
|
||||||
|
"iqiyi": MediaSource.Iqiyi,
|
||||||
|
"iqiyidiscover": MediaSource.Iqiyi,
|
||||||
}
|
}
|
||||||
|
|
||||||
MEDIA_SOURCE_PREFIXES = {
|
MEDIA_SOURCE_PREFIXES = {
|
||||||
@@ -44,6 +46,7 @@ MEDIA_SOURCE_PREFIXES = {
|
|||||||
MediaSource.MangoTV: "mangguodiscover",
|
MediaSource.MangoTV: "mangguodiscover",
|
||||||
MediaSource.MiguVideo: "migu",
|
MediaSource.MiguVideo: "migu",
|
||||||
MediaSource.TencentVideo: "tencentvideodiscover",
|
MediaSource.TencentVideo: "tencentvideodiscover",
|
||||||
|
MediaSource.Iqiyi: "iqiyidiscover",
|
||||||
}
|
}
|
||||||
|
|
||||||
MUSIC_MEDIA_SOURCE_ORDER = (
|
MUSIC_MEDIA_SOURCE_ORDER = (
|
||||||
|
|||||||
@@ -4,7 +4,11 @@ from app.chain import ChainBase
|
|||||||
from app.core.context import MediaInfo
|
from app.core.context import MediaInfo
|
||||||
from app.core.meta import MetaBase
|
from app.core.meta import MetaBase
|
||||||
from app.schemas.types import MediaSource, MediaType
|
from app.schemas.types import MediaSource, MediaType
|
||||||
from app.utils.media import resolve_media_identity
|
from app.utils.media import (
|
||||||
|
build_media_key,
|
||||||
|
parse_media_source_selection,
|
||||||
|
resolve_media_identity,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _chain_without_init() -> ChainBase:
|
def _chain_without_init() -> ChainBase:
|
||||||
@@ -22,6 +26,18 @@ def test_generic_source_id_resolves_as_fixed_enum() -> None:
|
|||||||
) == (MediaSource.AniList, "154587")
|
) == (MediaSource.AniList, "154587")
|
||||||
|
|
||||||
|
|
||||||
|
def test_iqiyi_source_routes_through_unified_identity() -> None:
|
||||||
|
"""爱奇艺探索来源应支持选择解析、身份解析和媒体键构造。"""
|
||||||
|
assert parse_media_source_selection("iqiyi,iqiyidiscover") == (
|
||||||
|
MediaSource.Iqiyi,
|
||||||
|
)
|
||||||
|
assert resolve_media_identity(
|
||||||
|
media_source="iqiyi",
|
||||||
|
media_id="album-1",
|
||||||
|
) == (MediaSource.Iqiyi, "album-1")
|
||||||
|
assert build_media_key("iqiyi", "album-1") == "iqiyidiscover:album-1"
|
||||||
|
|
||||||
|
|
||||||
def test_plugin_source_is_preserved_as_dynamic_enum() -> None:
|
def test_plugin_source_is_preserved_as_dynamic_enum() -> None:
|
||||||
"""格式合法的插件来源应作为动态枚举成员进入通用识别链。"""
|
"""格式合法的插件来源应作为动态枚举成员进入通用识别链。"""
|
||||||
assert resolve_media_identity(
|
assert resolve_media_identity(
|
||||||
|
|||||||
@@ -20,6 +20,13 @@ def test_media_source_normalization_accepts_plugin_source() -> None:
|
|||||||
assert normalize_media_source("plugin source:invalid") is None
|
assert normalize_media_source("plugin source:invalid") is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_iqiyi_media_source_aliases_are_normalized() -> None:
|
||||||
|
"""爱奇艺探索来源的历史前缀和规范前缀应归一到同一媒体来源。"""
|
||||||
|
assert normalize_media_source("iqiyi") is MediaSource.Iqiyi
|
||||||
|
assert normalize_media_source("iqiyidiscover") is MediaSource.Iqiyi
|
||||||
|
assert MediaSource("iqiyi") is MediaSource.Iqiyi
|
||||||
|
|
||||||
|
|
||||||
def test_resolve_anilist_search_params_preserves_identity() -> None:
|
def test_resolve_anilist_search_params_preserves_identity() -> None:
|
||||||
"""精确搜索参数应保留枚举来源和原生 ID。"""
|
"""精确搜索参数应保留枚举来源和原生 ID。"""
|
||||||
params, message = asyncio.run(
|
params, message = asyncio.run(
|
||||||
|
|||||||
Reference in New Issue
Block a user