fix(music): label subscription entity types

This commit is contained in:
jxxghp
2026-08-10 09:06:56 +08:00
parent cf5b95ec04
commit c5f7924484
2 changed files with 36 additions and 9 deletions
+22 -9
View File
@@ -136,10 +136,23 @@ const subscribeProgressText = computed(() => {
return `${downloadedEpisode.value} / ${total}` return `${downloadedEpisode.value} / ${total}`
}) })
// 专辑订阅按整包完成,不伪造分集进度;这里只展示整专规模,提醒用户该目标包含多首曲目 // 音乐订阅始终展示实体类型;旧数据缺少 music_type 时按既有单曲语义兼容
const musicAlbumTrackText = computed(() => { const musicSubscribeMeta = computed(() => {
if (props.media?.type !== '音乐' || props.media?.music_type !== 'album' || !props.media?.total_tracks) return '' if (props.media?.type !== '音乐') return null
return `${t('music.entityAlbum')} · ${t('music.trackCount', { count: props.media.total_tracks })}` if (props.media.music_type === 'album') {
const trackCount = props.media.total_tracks
return {
icon: 'mdi-album',
text: trackCount
? `${t('music.entityAlbum')} · ${t('music.trackCount', { count: trackCount })}`
: t('music.entityAlbum'),
}
}
return {
icon: 'mdi-music-note',
text: t('music.entityRecording'),
}
}) })
// 订阅卡片 hover 文案: // 订阅卡片 hover 文案:
@@ -641,10 +654,10 @@ function handleCardClick() {
size="16" size="16"
/> />
<span <span
v-if="subscribeProgressText || musicAlbumTrackText" v-if="subscribeProgressText || musicSubscribeMeta"
class="subscribe-card-mobile-progress-text" class="subscribe-card-mobile-progress-text"
> >
{{ subscribeProgressText || musicAlbumTrackText }} {{ subscribeProgressText || musicSubscribeMeta?.text }}
</span> </span>
</div> </div>
@@ -734,11 +747,11 @@ function handleCardClick() {
</VTooltip> </VTooltip>
</div> </div>
<div <div
v-else-if="musicAlbumTrackText" v-else-if="musicSubscribeMeta"
class="flex flex-shrink-0 align-center text-subtitle-2 me-2 text-white" class="flex flex-shrink-0 align-center text-subtitle-2 me-2 text-white"
> >
<VIcon icon="mdi-album" size="small" class="me-1" /> <VIcon :icon="musicSubscribeMeta.icon" size="small" class="me-1" />
{{ musicAlbumTrackText }} {{ musicSubscribeMeta.text }}
</div> </div>
<VIcon <VIcon
v-if="props.media?.username && props.sortable" v-if="props.media?.username && props.sortable"
@@ -194,6 +194,20 @@ describe('SubscribeCard display and progress', () => {
expect(screen.queryByText(/^\d{1,4} \/ \d{1,4}$/)).not.toBeInTheDocument() expect(screen.queryByText(/^\d{1,4} \/ \d{1,4}$/)).not.toBeInTheDocument()
}) })
it.each([480, 1024])('identifies recording subscriptions at %ipx', async width => {
setViewport(width)
await renderCard({ music_type: 'recording', name: '晴天', total_tracks: undefined, type: '音乐' })
expect(screen.getByText('单曲')).toBeInTheDocument()
expect(screen.queryByText(/首$/)).not.toBeInTheDocument()
})
it('keeps the album identity visible when a legacy subscription has no track count', async () => {
await renderCard({ music_type: 'album', name: '旧专辑', total_tracks: undefined, type: '音乐' })
expect(screen.getByText('专辑')).toBeInTheDocument()
})
it.each([ it.each([
['regular progress', 10, 4, '6 / 10', '60'], ['regular progress', 10, 4, '6 / 10', '60'],
['negative missing episodes', 10, -2, '10 / 10', '100'], ['negative missing episodes', 10, -2, '10 / 10', '100'],