1*20e2869eS猫头猫import {errorLog, trace} from '@/common/logManager'; 2*20e2869eS猫头猫import {pluginManager} from '@/common/pluginManager'; 3*20e2869eS猫头猫import {RequestStateCode} from '@/constants/commonConst'; 4*20e2869eS猫头猫import {makeTag} from '@/utils/makeTag'; 5*20e2869eS猫头猫import produce from 'immer'; 6*20e2869eS猫头猫import {useAtom} from 'jotai'; 7*20e2869eS猫头猫import {useCallback} from 'react'; 8*20e2869eS猫头猫import {queryResultAtom} from '../store/atoms'; 9*20e2869eS猫头猫 10*20e2869eS猫头猫export default function useQueryArtist(pluginHash: string) { 11*20e2869eS猫头猫 const [queryResults, setQueryResults] = useAtom(queryResultAtom); 12*20e2869eS猫头猫 13*20e2869eS猫头猫 const queryArtist = useCallback( 14*20e2869eS猫头猫 async ( 15*20e2869eS猫头猫 artist: IArtist.IArtistItem, 16*20e2869eS猫头猫 page?: number, 17*20e2869eS猫头猫 type: IArtist.ArtistMediaType = 'music', 18*20e2869eS猫头猫 ) => { 19*20e2869eS猫头猫 const plugin = pluginManager.getPluginByHash(pluginHash); 20*20e2869eS猫头猫 21*20e2869eS猫头猫 const prevResult = queryResults[type]; 22*20e2869eS猫头猫 console.log('PREV', prevResult); 23*20e2869eS猫头猫 if ( 24*20e2869eS猫头猫 prevResult?.state === RequestStateCode.PENDING || 25*20e2869eS猫头猫 prevResult?.state === RequestStateCode.FINISHED 26*20e2869eS猫头猫 ) { 27*20e2869eS猫头猫 return; 28*20e2869eS猫头猫 } 29*20e2869eS猫头猫 page = page ?? (prevResult.page ?? 0) + 1; 30*20e2869eS猫头猫 console.log('获取作者详情', {artist, page, type, pluginHash}); 31*20e2869eS猫头猫 try { 32*20e2869eS猫头猫 setQueryResults( 33*20e2869eS猫头猫 produce(draft => { 34*20e2869eS猫头猫 draft[type].state = RequestStateCode.PENDING; 35*20e2869eS猫头猫 }), 36*20e2869eS猫头猫 ); 37*20e2869eS猫头猫 const result = await plugin?.instance?.queryArtistWorks?.( 38*20e2869eS猫头猫 artist, 39*20e2869eS猫头猫 page, 40*20e2869eS猫头猫 type, 41*20e2869eS猫头猫 ); 42*20e2869eS猫头猫 setQueryResults( 43*20e2869eS猫头猫 produce(draft => { 44*20e2869eS猫头猫 draft[type].page = page; 45*20e2869eS猫头猫 (draft[type].state = 46*20e2869eS猫头猫 result?.isEnd === false 47*20e2869eS猫头猫 ? RequestStateCode.PARTLY_DONE 48*20e2869eS猫头猫 : RequestStateCode.FINISHED), 49*20e2869eS猫头猫 (draft[type].data = (draft[type].data ?? []).concat( 50*20e2869eS猫头猫 makeTag(result?.data ?? [], plugin?.name ?? ''), 51*20e2869eS猫头猫 )); 52*20e2869eS猫头猫 }), 53*20e2869eS猫头猫 ); 54*20e2869eS猫头猫 } catch (e) { 55*20e2869eS猫头猫 errorLog('拉取作者信息失败', e); 56*20e2869eS猫头猫 setQueryResults( 57*20e2869eS猫头猫 produce(draft => { 58*20e2869eS猫头猫 draft[type].state = RequestStateCode.PARTLY_DONE; 59*20e2869eS猫头猫 }), 60*20e2869eS猫头猫 ); 61*20e2869eS猫头猫 } 62*20e2869eS猫头猫 }, 63*20e2869eS猫头猫 [queryResults], 64*20e2869eS猫头猫 ); 65*20e2869eS猫头猫 66*20e2869eS猫头猫 return queryArtist; 67*20e2869eS猫头猫} 68