diff --git a/app/api/endpoints/mediaserver.py b/app/api/endpoints/mediaserver.py index ef30e3fc..0b41cb21 100644 --- a/app/api/endpoints/mediaserver.py +++ b/app/api/endpoints/mediaserver.py @@ -6,38 +6,38 @@ from sqlalchemy.orm import Session from app import schemas from app.chain.download import DownloadChain from app.chain.mediaserver import MediaServerChain -from app.core.config import settings from app.core.context import MediaInfo from app.core.metainfo import MetaInfo from app.core.security import verify_token from app.db import get_db from app.db.mediaserver_oper import MediaServerOper from app.db.models import MediaServerItem +from app.helper.mediaserver import MediaServerHelper from app.schemas import MediaType, NotExistMediaInfo router = APIRouter() -@router.get("/play/{itemid}", summary="在线播放") -def play_item(itemid: str) -> schemas.Response: +@router.get("/play/{itemid:path}", summary="在线播放") +def play_item(itemid: str, _: schemas.TokenPayload = Depends(verify_token)) -> schemas.Response: """ 获取媒体服务器播放页面地址 """ if not itemid: - return schemas.Response(success=False, msg="参数错误") - if not settings.MEDIASERVER: - return schemas.Response(success=False, msg="未配置媒体服务器") - # 查找一个不为空的值 - mediaserver = next((server for server in settings.MEDIASERVER.split(",") if server), None) - if not mediaserver: - return schemas.Response(success=False, msg="未配置媒体服务器") - play_url = MediaServerChain().get_play_url(server=mediaserver, item_id=itemid) - # 重定向到play_url - if not play_url: - return schemas.Response(success=False, msg="未找到播放地址") - return schemas.Response(success=True, data={ - "url": play_url - }) + return schemas.Response(success=False, message="参数错误") + configs = MediaServerHelper().get_configs() + if not configs: + return schemas.Response(success=False, message="未配置媒体服务器") + media_chain = MediaServerChain() + for name in configs.keys(): + item = media_chain.iteminfo(server=name, item_id=itemid) + if item: + play_url = media_chain.get_play_url(server=name, item_id=itemid) + if play_url: + return schemas.Response(success=True, data={ + "url": play_url + }) + return schemas.Response(success=False, message="未找到播放地址") @router.get("/exists", summary="查询本地是否存在(数据库)", response_model=schemas.Response)