mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-02 12:26:36 +08:00
100 lines
3.9 KiB
TypeScript
100 lines
3.9 KiB
TypeScript
import { ArrowUp, FolderPlus } from 'lucide-react'
|
|
|
|
interface CloudBrowserToolbarProps {
|
|
stack: { id: string; name: string }[]
|
|
mountMediaType: string
|
|
mounting: boolean
|
|
batchMounting: boolean
|
|
loading: boolean
|
|
hasDirectories: boolean
|
|
onGoTo: (index: number) => void
|
|
onGoUp: () => void
|
|
onCreateFolder: () => void
|
|
onMediaTypeChange: (value: string) => void
|
|
onMountCurrent: () => void
|
|
onMountVisibleDirectories: () => void
|
|
}
|
|
|
|
export function CloudBrowserToolbar({
|
|
stack,
|
|
mountMediaType,
|
|
mounting,
|
|
batchMounting,
|
|
loading,
|
|
hasDirectories,
|
|
onGoTo,
|
|
onGoUp,
|
|
onCreateFolder,
|
|
onMediaTypeChange,
|
|
onMountCurrent,
|
|
onMountVisibleDirectories,
|
|
}: CloudBrowserToolbarProps) {
|
|
return (
|
|
<div className="mb-2 flex flex-wrap items-center justify-between gap-2">
|
|
<div className="flex flex-wrap items-center gap-1 text-xs text-[var(--app-muted)]">
|
|
<span className="text-[var(--app-subtle)]">网盘资源:</span>
|
|
{stack.map((item, index) => (
|
|
<span key={index}>
|
|
<button type="button" className="hover:text-brand-500" onClick={() => onGoTo(index)}>
|
|
{item.name}
|
|
</button>
|
|
{index < stack.length - 1 && <span className="mx-1">/</span>}
|
|
</span>
|
|
))}
|
|
</div>
|
|
<p className="basis-full text-xs text-[var(--app-muted)]">
|
|
挂载后不会复制网盘文件;后台会递归读取该目录里的子文件夹和媒体文件,扫描到的影片会自动加入对应媒体库。小目录通常几十秒,大目录取决于网盘接口速度。
|
|
如果已有同名同类型媒体库,会在首页和 Emby/SenPlayer 中自动归并显示。
|
|
</p>
|
|
<div className="flex flex-wrap items-center gap-2">
|
|
<button
|
|
type="button"
|
|
className="inline-flex items-center gap-1 rounded border border-[var(--app-border)] px-2 py-0.5 text-xs text-[var(--app-subtle)] hover:bg-[var(--app-hover)] hover:text-[var(--app-text)] disabled:cursor-not-allowed disabled:opacity-50"
|
|
disabled={loading || stack.length <= 1}
|
|
onClick={onGoUp}
|
|
>
|
|
<ArrowUp size={14} />
|
|
返回上级
|
|
</button>
|
|
<button
|
|
type="button"
|
|
className="inline-flex items-center gap-1 rounded border border-[var(--app-border)] px-2 py-0.5 text-xs text-[var(--app-subtle)] hover:bg-[var(--app-hover)] hover:text-[var(--app-text)] disabled:cursor-not-allowed disabled:opacity-50"
|
|
disabled={loading}
|
|
onClick={onCreateFolder}
|
|
>
|
|
<FolderPlus size={14} />
|
|
新建文件夹
|
|
</button>
|
|
<select
|
|
className="rounded border border-[var(--app-border)] bg-[var(--app-panel)] px-2 py-0.5 text-xs text-[var(--app-subtle)]"
|
|
value={mountMediaType}
|
|
onChange={(event) => onMediaTypeChange(event.target.value)}
|
|
>
|
|
<option value="auto">自动识别</option>
|
|
<option value="movie">电影</option>
|
|
<option value="tv">剧集</option>
|
|
<option value="anime">动漫</option>
|
|
<option value="variety">综艺</option>
|
|
<option value="adult">成人</option>
|
|
</select>
|
|
<button
|
|
type="button"
|
|
className="rounded border border-brand-400/40 px-2 py-0.5 text-xs text-brand-500 hover:bg-brand-400/10 disabled:opacity-50"
|
|
disabled={mounting || batchMounting || loading}
|
|
onClick={onMountCurrent}
|
|
>
|
|
{mounting ? '挂载中…' : '挂载当前目录并归并到媒体库'}
|
|
</button>
|
|
<button
|
|
type="button"
|
|
className="rounded border border-blue-300/70 px-2 py-0.5 text-xs text-blue-500 hover:bg-blue-500/10 disabled:opacity-50"
|
|
disabled={mounting || batchMounting || loading || !hasDirectories}
|
|
onClick={onMountVisibleDirectories}
|
|
>
|
|
{batchMounting ? '批量挂载中…' : '一键挂载当前目录下所有文件夹'}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|