import { isRemoteEmbyID } from '../utils/remoteEmby' import { Link } from 'react-router-dom' import { ArrowLeft, Database, FileText, Film, FolderInput, Pencil, Play, Search, Sparkles, Trash2 } from 'lucide-react' import { imageURL } from '../api/client' import { ExternalPlayerButton } from '../components/ExternalPlayerButton' import { MediaFavouriteButton } from '../components/MediaFavouriteButton' import type { Media } from '../types' import { seriesTitle, type SeriesCard } from '../utils/groupSeries' type LibrarySeriesDetailHeaderProps = { series: SeriesCard visibleEpisodes: Media[] allEpisodes: Media[] playbackFrom: string isAdmin: boolean canFavorite: boolean favourite: boolean favouriteBusy: boolean onToggleFavourite: () => void seriesToolBusy: string onBack: () => void onSmartScrape: () => void onManualScrape: () => void onMetadataEdit: () => void onProbe: () => void onNFO: () => void onOrganize: () => void onDelete: () => void } export function LibrarySeriesDetailHeader({ series, visibleEpisodes, allEpisodes, playbackFrom, isAdmin, canFavorite, favourite, favouriteBusy, onToggleFavourite, seriesToolBusy, onBack, onSmartScrape, onManualScrape, onMetadataEdit, onProbe, onNFO, onOrganize, onDelete, }: LibrarySeriesDetailHeaderProps) { const firstEpisode = firstPlayableEpisode(visibleEpisodes.length > 0 ? visibleEpisodes : allEpisodes) return ( <>

{seriesTitle(series.rep)}

共 {series.count} 集
{series.rep.poster_url ? ( {series.rep.title} ) : (
)}

{series.rep.overview || '暂无简介'}

{firstEpisode && ( <> 从第一集开始播放 )} {canFavorite && ( )}
{isAdmin && allEpisodes.length > 0 && !isRemoteEmbyID(series.rep.id) && (

系统后台高级控制面板

)}
) } function firstPlayableEpisode(episodes: Media[]): Media | null { const sorted = [...episodes] sorted.sort((a, b) => (a.season_num || 0) - (b.season_num || 0) || (a.episode_num || 0) - (b.episode_num || 0), ) return sorted[0] ?? null }