feat: add support for multi-disc albums

This commit is contained in:
2026-07-25 21:54:25 +01:00
parent 5185d4dc0b
commit c6080b975a
5 changed files with 292 additions and 108 deletions
+23 -2
View File
@@ -1,4 +1,5 @@
import { parseFile } from 'music-metadata';
import path from 'path';
export interface AudioMetadata {
format: {
@@ -39,6 +40,26 @@ export async function getFlacMetadata(filePath: string): Promise<AudioMetadata>
//console.log(metadata.native.vorbis);
}
const filename = path.basename(filePath);
let diskNo = metadata.common.disk?.no;
let trackNo = metadata.common.track?.no;
// Extract disc and track number from multi-disc filename prefix e.g. "1-03 - Title"
const multiDiscMatch = filename.match(/^(\d+)-(\d+)\b/);
if (multiDiscMatch) {
if (!diskNo) diskNo = parseInt(multiDiscMatch[1], 10);
if (!trackNo) trackNo = parseInt(multiDiscMatch[2], 10);
}
const trackObj = {
no: trackNo ?? metadata.common.track?.no ?? null,
of: metadata.common.track?.of ?? null
};
const diskObj = {
no: diskNo ?? metadata.common.disk?.no ?? null,
of: metadata.common.disk?.of ?? null
};
return {
format: {
sampleRate: metadata.format.sampleRate,
@@ -50,8 +71,8 @@ export async function getFlacMetadata(filePath: string): Promise<AudioMetadata>
title: metadata.common.title,
artist: metadata.common.artist,
album: metadata.common.album,
track: metadata.common.track,
disk: metadata.common.disk,
track: trackObj,
disk: diskObj,
year: metadata.common.year,
date: metadata.common.date,
copyright: metadata.common.copyright,