feat: add support for multi-disc albums
This commit is contained in:
@@ -61,9 +61,13 @@ export async function POST(request: Request) {
|
||||
// Calculate total size
|
||||
const totalSize = tracks.reduce((acc, track) => acc + (track.size || 0), 0);
|
||||
|
||||
// Sort tracks by track number if available, else by filename
|
||||
// Sort tracks by disc number first, then track number, else by filename
|
||||
tracks.sort((a, b) => {
|
||||
if ('error' in a || 'error' in b) return 0; // Keep order if error
|
||||
const discA = a.common?.disk?.no ?? 1;
|
||||
const discB = b.common?.disk?.no ?? 1;
|
||||
if (discA !== discB) return discA - discB;
|
||||
|
||||
const trackA = a.common?.track?.no ?? 0;
|
||||
const trackB = b.common?.track?.no ?? 0;
|
||||
if (trackA && trackB) return trackA - trackB;
|
||||
@@ -95,6 +99,11 @@ export async function POST(request: Request) {
|
||||
}
|
||||
});
|
||||
|
||||
const discNumbers = new Set(
|
||||
tracks.map(t => ('error' in t ? 1 : (t.common?.disk?.no || 1)))
|
||||
);
|
||||
const isMultiDisc = discNumbers.size > 1 || Array.from(discNumbers).some(d => d > 1);
|
||||
|
||||
if (sampleRates.size > 1 || bitDepths.size > 1) {
|
||||
mixed = true;
|
||||
qualityDetails = `NOTE: Mixed formats. Sample Rates: ${Array.from(sampleRates).join(', ')} Hz. Bit Depths: ${Array.from(bitDepths).join(', ')} bit.`;
|
||||
@@ -102,7 +111,13 @@ export async function POST(request: Request) {
|
||||
// Generate detailed message for mixed content
|
||||
const mixedDetails = tracks.map(t => {
|
||||
if ('error' in t) return `${t.filename}: Error`;
|
||||
return `Track ${t.common?.track?.no || '?'}: ${t.format?.bitsPerSample}bit / ${t.format?.sampleRate}Hz`;
|
||||
const discNo = t.common?.disk?.no || 1;
|
||||
const trackNo = t.common?.track?.no;
|
||||
let trackStr = trackNo !== undefined && trackNo !== null ? String(trackNo).padStart(2, '0') : '?';
|
||||
if (isMultiDisc) {
|
||||
trackStr = `${discNo}-${trackStr}`;
|
||||
}
|
||||
return `Track ${trackStr}: ${t.format?.bitsPerSample}bit / ${t.format?.sampleRate}Hz`;
|
||||
}).join('\n');
|
||||
|
||||
qualityDetails += '\n' + mixedDetails;
|
||||
|
||||
Reference in New Issue
Block a user