1927dbe93S猫头猫import PluginManager from '@/core/pluginManager'; 2f9afcc0dS猫头猫import {useCallback, useEffect, useRef, useState} from 'react'; 3bf6e62f2S猫头猫 4f9afcc0dS猫头猫export default function useAlbumDetail( 5f9afcc0dS猫头猫 originalAlbumItem: IAlbum.IAlbumItem | null, 6f9afcc0dS猫头猫) { 7f9afcc0dS猫头猫 const currentPageRef = useRef(1); 8*ceb900cdS猫头猫 const [loadMore, setLoadMore] = useState<'idle' | 'loading' | 'done'>( 9*ceb900cdS猫头猫 'idle', 10f9afcc0dS猫头猫 ); 11f9afcc0dS猫头猫 const [albumItem, setAlbumItem] = useState<IAlbum.IAlbumItemBase | null>( 12f9afcc0dS猫头猫 originalAlbumItem, 13f9afcc0dS猫头猫 ); 14f9afcc0dS猫头猫 const [musicList, setMusicList] = useState<IMusic.IMusicItem[]>( 15f9afcc0dS猫头猫 originalAlbumItem?.musicList ?? [], 16f9afcc0dS猫头猫 ); 17f9afcc0dS猫头猫 18f9afcc0dS猫头猫 const getAlbumDetail = useCallback( 19f9afcc0dS猫头猫 async function () { 20*ceb900cdS猫头猫 if (originalAlbumItem === null || loadMore !== 'idle') { 21bf6e62f2S猫头猫 return; 22bf6e62f2S猫头猫 } 23f9afcc0dS猫头猫 24f9afcc0dS猫头猫 try { 25f9afcc0dS猫头猫 setLoadMore('loading'); 26f9afcc0dS猫头猫 const result = await PluginManager.getByMedia( 27f9afcc0dS猫头猫 originalAlbumItem, 28f9afcc0dS猫头猫 )?.methods?.getAlbumInfo?.( 29f9afcc0dS猫头猫 originalAlbumItem, 30f9afcc0dS猫头猫 currentPageRef.current, 31f9afcc0dS猫头猫 ); 32f9afcc0dS猫头猫 if (result === null || result === undefined) { 33f9afcc0dS猫头猫 throw new Error(); 34f9afcc0dS猫头猫 } 35f9afcc0dS猫头猫 if (result?.albumItem) { 36f9afcc0dS猫头猫 setAlbumItem(prev => ({ 37efb9da24S猫头猫 ...(prev ?? {}), 38f9afcc0dS猫头猫 ...(result.albumItem as IAlbum.IAlbumItemBase), 39f9afcc0dS猫头猫 platform: originalAlbumItem.platform, 40efb9da24S猫头猫 })); 41efb9da24S猫头猫 } 42f9afcc0dS猫头猫 if (result?.musicList) { 43f9afcc0dS猫头猫 setMusicList(prev => { 44f9afcc0dS猫头猫 if (currentPageRef.current === 1) { 45f9afcc0dS猫头猫 return result?.musicList ?? prev; 46f9afcc0dS猫头猫 } else { 47f9afcc0dS猫头猫 return [...prev, ...(result.musicList ?? [])]; 48f9afcc0dS猫头猫 } 497d7e864fS猫头猫 }); 50f9afcc0dS猫头猫 } 51*ceb900cdS猫头猫 setLoadMore(result.isEnd ? 'done' : 'idle'); 52f9afcc0dS猫头猫 currentPageRef.current += 1; 53f9afcc0dS猫头猫 } catch { 54*ceb900cdS猫头猫 setLoadMore('idle'); 55f9afcc0dS猫头猫 } 56f9afcc0dS猫头猫 }, 57f9afcc0dS猫头猫 [loadMore], 58f9afcc0dS猫头猫 ); 59f9afcc0dS猫头猫 60f9afcc0dS猫头猫 useEffect(() => { 61f9afcc0dS猫头猫 getAlbumDetail(); 62bf6e62f2S猫头猫 }, []); 63f9afcc0dS猫头猫 64f9afcc0dS猫头猫 return [loadMore, albumItem, musicList, getAlbumDetail] as const; 65bf6e62f2S猫头猫} 66