* fix: 限制FMCard上的歌名长度

避免曲名过长将其他部分顶出卡片外

* fix: Library取词逻辑

* fix: 歌词页面Player UI

* fix: 搜索页面专辑发布日期

* fix: 修复私人FM启动时总是加载新的数据,导致数据过多的问题

* update

* 更改FM的初始化顺序

* Update player.ts

* fix: 将FMCard的歌名长度限制为两行
This commit is contained in:
memorydream 2022-04-10 23:37:36 +08:00 committed by GitHub
parent 70d1de0e0f
commit a95524ff34
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 34 additions and 21 deletions

View File

@ -102,7 +102,9 @@ const FMCard = () => {
{/* Track info */} {/* Track info */}
<div> <div>
{track ? ( {track ? (
<div className='text-xl font-semibold'>{track?.name}</div> <div className='line-clamp-2 text-xl font-semibold'>
{track?.name}
</div>
) : ( ) : (
<div className='flex'> <div className='flex'>
<div className='bg-gray-200 text-xl text-transparent dark:bg-white/5'> <div className='bg-gray-200 text-xl text-transparent dark:bg-white/5'>

View File

@ -29,8 +29,11 @@ const PlayingTrack = () => {
() => playerSnapshot.trackListSource, () => playerSnapshot.trackListSource,
[playerSnapshot.trackListSource] [playerSnapshot.trackListSource]
) )
const hasListSource = playerSnapshot.mode !== PlayerMode.FM && trackListSource?.type
const toTrackListSource = () => { const toTrackListSource = () => {
if (!trackListSource?.type) return if (!hasListSource) return
navigate(`/${trackListSource.type}/${trackListSource.id}`) navigate(`/${trackListSource.type}/${trackListSource.id}`)
state.uiStates.showLyricPanel = false state.uiStates.showLyricPanel = false
@ -40,19 +43,24 @@ const PlayingTrack = () => {
<div> <div>
<div <div
onClick={toTrackListSource} onClick={toTrackListSource}
className='line-clamp-1 text-[22px] font-semibold text-white hover:underline' className={classNames(
'line-clamp-1 text-[22px] font-semibold text-white',
hasListSource && 'hover:underline'
)}
> >
{track?.name} {track?.name}
</div> </div>
<div className='line-clamp-1 -mt-0.5 inline-flex max-h-7 text-white opacity-60'> <div className='line-clamp-1 -mt-0.5 inline-flex max-h-7 text-white opacity-60'>
<ArtistInline artists={track?.ar ?? []} /> <ArtistInline artists={track?.ar ?? []} />
<span> {!!track?.al?.id && (
{' '} <span>
-{' '} {' '}
<span onClick={toAlbum} className='hover:underline'> -{' '}
{track?.al.name} <span onClick={toAlbum} className='hover:underline'>
{track?.al.name}
</span>
</span> </span>
</span> )}
</div> </div>
</div> </div>
) )

View File

@ -40,7 +40,7 @@ const LikedTracksCard = ({ className }: { className?: string }) => {
chunk( chunk(
lyric?.lrc.lyric lyric?.lrc.lyric
?.split('\n') ?.split('\n')
?.map(l => l.split(']')[1]?.trim()) ?.map(l => l.split(']').pop()?.trim())
?.filter( ?.filter(
l => l =>
l && l &&

View File

@ -8,6 +8,7 @@ import Cover from '@/renderer/components/Cover'
import TrackGrid from '@/renderer/components/TracksGrid' import TrackGrid from '@/renderer/components/TracksGrid'
import { player } from '@/renderer/store' import { player } from '@/renderer/store'
import { resizeImage } from '@/renderer/utils/common' import { resizeImage } from '@/renderer/utils/common'
import dayjs from 'dayjs'
const Artists = ({ artists }: { artists: Artist[] }) => { const Artists = ({ artists }: { artists: Artist[] }) => {
const navigate = useNavigate() const navigate = useNavigate()
@ -62,7 +63,7 @@ const Albums = ({ albums }: { albums: Album[] }) => {
{album.name} {album.name}
</div> </div>
<div className='mt-0.5 text-sm font-medium text-gray-500 dark:text-gray-400'> <div className='mt-0.5 text-sm font-medium text-gray-500 dark:text-gray-400'>
· {album?.artist.name} · 2020 · {album?.artist.name} · {dayjs(album.publishTime).year()}
</div> </div>
</div> </div>
</div> </div>

View File

@ -152,12 +152,13 @@ export class Player {
} }
private async _initFM() { private async _initFM() {
const response = await fetchPersonalFMWithReactQuery() if (this.fmTrackList.length === 0) await this._loadMoreFMTracks()
this.fmTrackList.push(...(response?.data?.map(r => r.id) ?? []))
const trackId = this.fmTrackList[0] const trackId = this.fmTrackList[0]
const track = await this._fetchTrack(trackId) const track = await this._fetchTrack(trackId)
if (track) this.fmTrack = track if (track) this.fmTrack = track
this._loadMoreFMTracks()
} }
private _setupProgressInterval() { private _setupProgressInterval() {
@ -255,12 +256,6 @@ export class Player {
} }
private async _nextFMTrack() { private async _nextFMTrack() {
const loadMoreTracks = async () => {
if (this.fmTrackList.length <= 5) {
const response = await fetchPersonalFMWithReactQuery()
this.fmTrackList.push(...(response?.data?.map(r => r.id) ?? []))
}
}
const prefetchNextTrack = async () => { const prefetchNextTrack = async () => {
const prefetchTrackID = this.fmTrackList[1] const prefetchTrackID = this.fmTrackList[1]
const track = await this._fetchTrack(prefetchTrackID) const track = await this._fetchTrack(prefetchTrackID)
@ -271,13 +266,20 @@ export class Player {
} }
this.fmTrackList.shift() this.fmTrackList.shift()
if (this.fmTrackList.length === 0) await loadMoreTracks() if (this.fmTrackList.length === 0) await this._loadMoreFMTracks()
this._playTrack() this._playTrack()
this.fmTrackList.length <= 1 ? await loadMoreTracks() : loadMoreTracks() this.fmTrackList.length <= 1 ? await this._loadMoreFMTracks() : this._loadMoreFMTracks()
prefetchNextTrack() prefetchNextTrack()
} }
private async _loadMoreFMTracks() {
if (this.fmTrackList.length <= 5) {
const response = await fetchPersonalFMWithReactQuery()
this.fmTrackList.push(...(response?.data?.map(r => r.id) ?? []))
}
}
/** /**
* Play current track * Play current track
* @param {boolean} fade fade in * @param {boolean} fade fade in