mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-08 17:26:41 +08:00
fix(music): label subscription entity types
This commit is contained in:
@@ -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'],
|
||||||
|
|||||||
Reference in New Issue
Block a user