Files
Auto_Bangumi/backend/src/module/api/search.py
Estrella Pan a0a21a71e5 feat(webui): add search provider settings panel
- Add config-search-provider.vue component for managing search sources
- Support CRUD operations for custom search providers
- Default providers (mikan, nyaa, dmhy) cannot be deleted
- URL template validation ensures %s placeholder is present
- Add backend API endpoints GET/PUT /search/provider/config
- Add i18n translations for zh-CN and en

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 22:27:33 +01:00

57 lines
1.6 KiB
Python

from fastapi import APIRouter, Depends, Query
from sse_starlette.sse import EventSourceResponse
from module.conf.search_provider import get_provider, save_provider
from module.models import Bangumi
from module.searcher import SEARCH_CONFIG, SearchTorrent
from module.security.api import UNAUTHORIZED, get_current_user
router = APIRouter(prefix="/search", tags=["search"])
@router.get(
"/bangumi", response_model=list[Bangumi], dependencies=[Depends(get_current_user)]
)
async def search_torrents(site: str = "mikan", keywords: str = Query(None)):
"""
Server Send Event for per Bangumi item
"""
if not keywords:
return []
keywords = keywords.split(" ")
async def event_generator():
async with SearchTorrent() as st:
async for item in st.analyse_keyword(keywords=keywords, site=site):
yield item
return EventSourceResponse(content=event_generator())
@router.get(
"/provider", response_model=list[str], dependencies=[Depends(get_current_user)]
)
async def search_provider():
return list(SEARCH_CONFIG.keys())
@router.get(
"/provider/config",
response_model=dict[str, str],
dependencies=[Depends(get_current_user)],
)
async def get_search_provider_config():
"""Get all search providers with their URL templates."""
return get_provider()
@router.put(
"/provider/config",
response_model=dict[str, str],
dependencies=[Depends(get_current_user)],
)
async def update_search_provider_config(providers: dict[str, str]):
"""Update search providers configuration."""
save_provider(providers)
return get_provider()