14060c00aS猫头猫import {errorLog} from '@/utils/log'; 220e2869eS猫头猫import {RequestStateCode} from '@/constants/commonConst'; 320e2869eS猫头猫import produce from 'immer'; 420e2869eS猫头猫import {useAtom} from 'jotai'; 520e2869eS猫头猫import {useCallback} from 'react'; 620e2869eS猫头猫import {queryResultAtom} from '../store/atoms'; 7927dbe93S猫头猫import PluginManager from '@/core/pluginManager'; 820e2869eS猫头猫 920e2869eS猫头猫export default function useQueryArtist(pluginHash: string) { 1020e2869eS猫头猫 const [queryResults, setQueryResults] = useAtom(queryResultAtom); 1120e2869eS猫头猫 1220e2869eS猫头猫 const queryArtist = useCallback( 1320e2869eS猫头猫 async ( 1420e2869eS猫头猫 artist: IArtist.IArtistItem, 1520e2869eS猫头猫 page?: number, 1620e2869eS猫头猫 type: IArtist.ArtistMediaType = 'music', 1720e2869eS猫头猫 ) => { 188b88e961S猫头猫 const plugin = PluginManager.getByHash(pluginHash); 1920e2869eS猫头猫 2020e2869eS猫头猫 const prevResult = queryResults[type]; 2120e2869eS猫头猫 if ( 2220e2869eS猫头猫 prevResult?.state === RequestStateCode.PENDING || 2320e2869eS猫头猫 prevResult?.state === RequestStateCode.FINISHED 2420e2869eS猫头猫 ) { 2520e2869eS猫头猫 return; 2620e2869eS猫头猫 } 2720e2869eS猫头猫 page = page ?? (prevResult.page ?? 0) + 1; 2820e2869eS猫头猫 try { 2920e2869eS猫头猫 setQueryResults( 3020e2869eS猫头猫 produce(draft => { 3120e2869eS猫头猫 draft[type].state = RequestStateCode.PENDING; 3220e2869eS猫头猫 }), 3320e2869eS猫头猫 ); 34*efb9da24S猫头猫 const result = await plugin?.methods?.getArtistWorks?.( 3520e2869eS猫头猫 artist, 3620e2869eS猫头猫 page, 3720e2869eS猫头猫 type, 3820e2869eS猫头猫 ); 3920e2869eS猫头猫 setQueryResults( 4020e2869eS猫头猫 produce(draft => { 4120e2869eS猫头猫 draft[type].page = page; 42a3b33415S猫头猫 draft[type].state = 4320e2869eS猫头猫 result?.isEnd === false 4420e2869eS猫头猫 ? RequestStateCode.PARTLY_DONE 45a3b33415S猫头猫 : RequestStateCode.FINISHED; 46a3b33415S猫头猫 draft[type].data = (draft[type].data ?? []).concat( 478b88e961S猫头猫 result?.data ?? [], 48a3b33415S猫头猫 ); 4920e2869eS猫头猫 }), 5020e2869eS猫头猫 ); 5120e2869eS猫头猫 } catch (e) { 5220e2869eS猫头猫 errorLog('拉取作者信息失败', e); 5320e2869eS猫头猫 setQueryResults( 5420e2869eS猫头猫 produce(draft => { 5520e2869eS猫头猫 draft[type].state = RequestStateCode.PARTLY_DONE; 5620e2869eS猫头猫 }), 5720e2869eS猫头猫 ); 5820e2869eS猫头猫 } 5920e2869eS猫头猫 }, 6020e2869eS猫头猫 [queryResults], 6120e2869eS猫头猫 ); 6220e2869eS猫头猫 6320e2869eS猫头猫 return queryArtist; 6420e2869eS猫头猫} 65