启动 Web 服务时自动登记 CLI 指定的 B 站凭据,并为账号登记、刷新和删除统一补上并发去重、原子写入及引用检查。 同时收紧默认监听、管理员初始化、认证路由、静态文件和日志 WebSocket,恢复 server 的 ds_update.log,并避免凭据及上游响应进入日志。 新增按账号查询远程稿件的 API 与 Web 页面,补齐严格分页和响应校验。 关联 biliup/biliup#1624 关联 biliup/biliup#1658 关联 biliup/biliup#724
71 lines
1.5 KiB
TypeScript
71 lines
1.5 KiB
TypeScript
import useSWR from "swr";
|
|
|
|
import {
|
|
BiliType,
|
|
fetcher,
|
|
LiveStreamerEntity,
|
|
User
|
|
} from "./api-streamer";
|
|
import {useEffect, useState} from "react";
|
|
|
|
|
|
export default function useStreamers() {
|
|
const { data, error, isLoading } = useSWR<LiveStreamerEntity[]>("/v1/streamers", fetcher);
|
|
|
|
return {
|
|
isLoading,
|
|
streamers: data,
|
|
};
|
|
}
|
|
|
|
export function useBiliUsers() {
|
|
const {data, error, isLoading} = useSWR<User[]>("/v1/users", fetcher);
|
|
const [list, setList] = useState<any[]>([]);
|
|
useEffect(() => {
|
|
if (!data || data.length === 0) {
|
|
setList([])
|
|
return;
|
|
}
|
|
const updateList = async (item: User) => {
|
|
try {
|
|
const res = await fetcher(`/v1/users/${item.id}`, undefined);
|
|
return {
|
|
...item,
|
|
name: res.data.name,
|
|
face: res.data?.face || "/noface.jpg",
|
|
};
|
|
} catch (error) {
|
|
console.error(error);
|
|
return {
|
|
...item,
|
|
name: "Cookie已失效",
|
|
face: "/noface.jpg",
|
|
};
|
|
}
|
|
};
|
|
Promise.all(data.map(updateList)).then(setList);
|
|
}, [data])
|
|
|
|
return {
|
|
isLoading,
|
|
isError: error,
|
|
biliUsers: list,
|
|
};
|
|
}
|
|
|
|
export function useTypeTree() {
|
|
const { data: archivePre, error, isLoading } = useSWR("/bili/archive/pre", fetcher);
|
|
const treeData = archivePre?.data?.typelist.map((type: BiliType)=> {
|
|
return {
|
|
label: type.name,
|
|
value: type.id,
|
|
children: type.children
|
|
};
|
|
});
|
|
return {
|
|
isLoading,
|
|
isError: error,
|
|
typeTree: treeData,
|
|
};
|
|
}
|