This commit is contained in:
2026-04-18 17:50:08 -07:00
parent 6fbfdd0184
commit 0bd3bff92d
+36 -3
View File
@@ -33,6 +33,31 @@ type TrackSortField = 'title' | 'artist' | 'album' | 'server' | 'fileId'
type EntrySortField = 'name' | 'count' type EntrySortField = 'name' | 'count'
type SortField = TrackSortField | EntrySortField type SortField = TrackSortField | EntrySortField
const STREAMABLE_FILE_EXTENSIONS = new Set([
'm3u8',
'mp3',
'm4a',
'aac',
'flac',
'wav',
'ogg',
'oga',
'opus',
'mp4',
'm4v',
'webm',
'mkv',
'mov',
'avi',
'wmv',
'ogv',
'mpeg',
'mpg',
'ts',
'm2ts',
'flv',
])
type SortOption = { type SortOption = {
id: SortField id: SortField
label: string label: string
@@ -542,6 +567,12 @@ export default function Library({ mediaSection, onPlayNow, onDownloadTrack, isTr
return match ? match[1].toLowerCase() : undefined return match ? match[1].toLowerCase() : undefined
} }
function canStreamTrack(track: Track, details?: HydrusFileDetails | null) {
const extension = getTrackExtension(track, details)
if (!extension) return false
return STREAMABLE_FILE_EXTENSIONS.has(extension)
}
function getTrackCacheKey(serverId?: string, fileId?: number) { function getTrackCacheKey(serverId?: string, fileId?: number) {
return serverId && fileId != null ? `${serverId}:${fileId}` : '' return serverId && fileId != null ? `${serverId}:${fileId}` : ''
} }
@@ -1439,9 +1470,11 @@ export default function Library({ mediaSection, onPlayNow, onDownloadTrack, isTr
<Button onClick={handleOpenWeb} disabled={!detailsTrack?.url}> <Button onClick={handleOpenWeb} disabled={!detailsTrack?.url}>
Web Web
</Button> </Button>
<Button onClick={() => void handleStreamTrack()} disabled={!detailsTrack?.url}> {detailsTrack?.url && canStreamTrack(detailsTrack, detailsData) && (
Stream <Button onClick={() => void handleStreamTrack()}>
</Button> Stream
</Button>
)}
<Button onClick={handleDownloadTrack} startIcon={<DownloadIcon />} disabled={!detailsTrack?.url || detailsLoading || detailsTrackDownloading}> <Button onClick={handleDownloadTrack} startIcon={<DownloadIcon />} disabled={!detailsTrack?.url || detailsLoading || detailsTrackDownloading}>
{detailsTrackDownloading ? 'Downloading...' : 'Download'} {detailsTrackDownloading ? 'Downloading...' : 'Download'}
</Button> </Button>