diff --git a/packages/renderer/src/pages/Album.tsx b/packages/renderer/src/pages/Album.tsx
index 0bc8f12..d001e19 100644
--- a/packages/renderer/src/pages/Album.tsx
+++ b/packages/renderer/src/pages/Album.tsx
@@ -16,6 +16,7 @@ import {
resizeImage,
scrollToTop,
} from '@/utils/common'
+import useTracks from '@/hooks/useTracks'
const PlayButton = ({
album,
@@ -95,7 +96,7 @@ const Header = ({
/>
)}
-
+
@@ -285,6 +286,10 @@ const Album = () => {
id: Number(params.id) || 0,
})
+ const { data: tracks } = useTracks({
+ ids: album?.songs?.map(track => track.id) ?? [],
+ })
+
const handlePlay = async (trackID: number | null = null) => {
const realAlbum = album?.album
if (!realAlbum) {
@@ -302,7 +307,7 @@ const Album = () => {
handlePlay={handlePlay}
/>
diff --git a/packages/renderer/src/pages/Artist.tsx b/packages/renderer/src/pages/Artist.tsx
index 3ae010f..86de6fc 100644
--- a/packages/renderer/src/pages/Artist.tsx
+++ b/packages/renderer/src/pages/Artist.tsx
@@ -9,6 +9,7 @@ import TracksGrid from '@/components/TracksGrid'
import CoverRow, { Subtitle } from '@/components/CoverRow'
import Skeleton from '@/components/Skeleton'
import { Fragment } from 'react'
+import useTracks from '@/hooks/useTracks'
const Artist = () => {
const params = useParams()
@@ -22,25 +23,48 @@ const Artist = () => {
limit: 1000,
})
+ const { data: tracks, isLoading: isLoadingTracks } = useTracks({
+ ids: artist?.hotSongs?.slice(0, 10)?.map(t => t.id) ?? [],
+ })
+
const albums = useMemo(() => {
if (!albumsRaw?.hotAlbums) return []
- return albumsRaw.hotAlbums.filter(
- album =>
- album.type === '专辑' &&
- ['混音版', '精选集', 'Remix'].includes(album.subType) === false &&
- album.size > 1
- )
+ const albums: Album[] = []
+ albumsRaw.hotAlbums.forEach(album => {
+ if (album.type !== '专辑') return false
+ if (['混音版', '精选集', 'Remix'].includes(album.subType)) return false
+
+ // No singles
+ if (album.size <= 1) return false
+
+ // No remixes
+ if (
+ /(\(|\[)(.*)(Remix|remix)(.*)(\)|\])/.test(
+ album.name.toLocaleLowerCase()
+ )
+ ) {
+ return false
+ }
+
+ // If have same name album only keep the Explicit version
+ const sameNameAlbumIndex = albums.findIndex(a => a.name === album.name)
+ if (sameNameAlbumIndex !== -1) {
+ if (album.mark === 1056768) albums[sameNameAlbumIndex] = album
+ return
+ }
+
+ albums.push(album)
+ })
+ return albums
}, [albumsRaw?.hotAlbums])
const singles = useMemo(() => {
if (!albumsRaw?.hotAlbums) return []
+ const albumsIds = albums.map(album => album.id)
return albumsRaw.hotAlbums.filter(
- album =>
- album.type !== '专辑' ||
- ['混音版', '精选集', 'Remix'].includes(album.subType) ||
- album.size === 1
+ album => albumsIds.includes(album.id) === false
)
- }, [albumsRaw?.hotAlbums])
+ }, [albums, albumsRaw?.hotAlbums])
const latestAlbum = useMemo(() => {
if (!albumsRaw || !albumsRaw.hotAlbums) return
@@ -89,7 +113,7 @@ const Artist = () => {
{/* Latest release */}
-
+
最新发行
@@ -110,12 +134,12 @@ const Artist = () => {
{/* Popular tracks */}
-
+
热门歌曲
@@ -125,7 +149,7 @@ const Artist = () => {
{/* Albums */}
{albums.length !== 0 && (
-
+
专辑
{
{/* Singles/EP */}
-
+
单曲和EP
this._cacheAudio(this.trackID, audio))
+
+ const id = this.trackID
+ _howler.once('load', () => this._cacheAudio(id, audio))
if (!this._progressInterval) {
this._setupProgressInterval()