fix(downloads): handle MP3_320 format in bulk downloads
This commit is contained in:
parent
4aaffd2c22
commit
353ced831b
1 changed files with 11 additions and 2 deletions
|
|
@ -15,6 +15,7 @@ import { lyricsSettings, bulkDownloadSettings, playlistSettings } from './storag
|
|||
import { addMetadataToAudio } from './metadata.js';
|
||||
import { DashDownloader } from './dash-downloader.js';
|
||||
import { generateM3U, generateM3U8, generateCUE, generateNFO, generateJSON } from './playlist-generator.js';
|
||||
import { encodeToMp3 } from './mp3-encoder.js';
|
||||
|
||||
const downloadTasks = new Map();
|
||||
const bulkDownloadTasks = new Map();
|
||||
|
|
@ -272,6 +273,9 @@ async function downloadTrackBlob(track, quality, api, lyricsManager = null, sign
|
|||
artist: track.artist || (track.artists && track.artists.length > 0 ? track.artists[0] : null),
|
||||
};
|
||||
|
||||
// MP3_320 is not a native TIDAL quality, we download LOSSLESS and convert
|
||||
const downloadQuality = quality === 'MP3_320' ? 'LOSSLESS' : quality;
|
||||
|
||||
try {
|
||||
const fullTrack = await api.getTrackMetadata(track.id);
|
||||
if (fullTrack) {
|
||||
|
|
@ -306,7 +310,7 @@ async function downloadTrackBlob(track, quality, api, lyricsManager = null, sign
|
|||
}
|
||||
}
|
||||
|
||||
const lookup = await api.getTrack(track.id, quality);
|
||||
const lookup = await api.getTrack(track.id, downloadQuality);
|
||||
let streamUrl;
|
||||
|
||||
if (lookup.originalTrackUrl) {
|
||||
|
|
@ -327,7 +331,7 @@ async function downloadTrackBlob(track, quality, api, lyricsManager = null, sign
|
|||
} catch (dashError) {
|
||||
console.error('DASH download failed:', dashError);
|
||||
// Fallback
|
||||
if (quality !== 'LOSSLESS') {
|
||||
if (downloadQuality !== 'LOSSLESS') {
|
||||
console.warn('Falling back to LOSSLESS (16-bit) download.');
|
||||
return downloadTrackBlob(track, 'LOSSLESS', api, lyricsManager, signal);
|
||||
}
|
||||
|
|
@ -341,6 +345,11 @@ async function downloadTrackBlob(track, quality, api, lyricsManager = null, sign
|
|||
blob = await response.blob();
|
||||
}
|
||||
|
||||
// Convert to MP3 320kbps if requested
|
||||
if (quality === 'MP3_320') {
|
||||
blob = await encodeToMp3(blob, () => undefined, signal);
|
||||
}
|
||||
|
||||
// Detect actual format from blob signature BEFORE adding metadata
|
||||
const extension = await getExtensionFromBlob(blob);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue