xref: /MusicFree/src/pages/artistDetail/hooks/useQuery.ts (revision 20e2869e216f04ba2dbb37ce330d5579608bc45e)
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