feat: add support for multi-disc albums
This commit is contained in:
+23
-2
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user