Design Prot Merge #1

Merged
NotS1mp merged 217 commits from design-prot into master 2026-09-21 15:48:16 +00:00
Showing only changes of commit 7e8fed9bd7 - Show all commits
+15 -7
View File
@@ -37,27 +37,35 @@ export interface ApiTrackLike {
audioStatus?: 'Pending' | 'Processing' | 'Completed' | 'Failed'; audioStatus?: 'Pending' | 'Processing' | 'Completed' | 'Failed';
} }
export function isPendingYouTubeTrack(track: ApiTrackLike): boolean { export function isYouTubeTrack(track: ApiTrackLike): boolean {
return track.source === 'YouTube' && track.audioStatus !== 'Completed'; return track.source === 'YouTube';
} }
export function queueIdForTrack(track: ApiTrackLike): string | number { export function isPendingYouTubeTrack(track: ApiTrackLike): boolean {
return isPendingYouTubeTrack(track) && track.externalId ? track.externalId : track.id; return isYouTubeTrack(track) && track.audioStatus !== 'Completed';
} }
export function youTubeThumbnailUrl(videoId: string): string { export function youTubeThumbnailUrl(videoId: string): string {
return `https://i.ytimg.com/vi/${videoId}/mqdefault.jpg`; return `https://i.ytimg.com/vi/${videoId}/mqdefault.jpg`;
} }
export function queueIdForTrack(track: ApiTrackLike): string | number {
return isYouTubeTrack(track) && track.externalId ? track.externalId : track.id;
}
export function toQueueItems(tracks: ApiTrackLike[]): QueueItem[] { export function toQueueItems(tracks: ApiTrackLike[]): QueueItem[] {
return tracks.map((track) => { return tracks.map((track) => {
const pendingYouTube = isPendingYouTubeTrack(track); const youTube = isYouTubeTrack(track);
return { return {
id: queueIdForTrack(track), id: queueIdForTrack(track),
title: track.title, title: track.title,
artist: track.artist, artist: track.artist,
source: pendingYouTube ? 'youtube' : 'local', source: youTube ? 'youtube' : 'local',
coverUrl: pendingYouTube && track.externalId ? youTubeThumbnailUrl(track.externalId) : undefined coverUrl: youTube
? isPendingYouTubeTrack(track) && track.externalId
? youTubeThumbnailUrl(track.externalId)
: `/api/tracks/${track.id}/cover?size=small`
: undefined
}; };
}); });
} }