Merge pull request #233 from ltctceplrm/album-length

Added total duration for a music release/album
This commit is contained in:
Moritz Jung 2025-12-29 15:28:22 +01:00 committed by GitHub
commit 94e17cb1f4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 13 additions and 1 deletions

1
.gitignore vendored
View file

@ -36,3 +36,4 @@ exampleVault/.obsidian/plugins/obsidian-media-db-plugin/*
!exampleVault/.obsidian/plugins/obsidian-media-db-plugin/.hotreload !exampleVault/.obsidian/plugins/obsidian-media-db-plugin/.hotreload
exampleVault/Media DB/* exampleVault/Media DB/*
meta.txt

View file

@ -191,6 +191,14 @@ export class MusicBrainzAPI extends APIModel {
const releaseData = (await releaseResponse.json) as MediaResponse; const releaseData = (await releaseResponse.json) as MediaResponse;
const tracks = extractTracksFromMedia(releaseData.media); const tracks = extractTracksFromMedia(releaseData.media);
// Calculate total album length for the first release
const totalrawLength =
releaseData.media[0]?.tracks.reduce((sum, track) => {
const len = track.length ?? track.recording?.length;
return typeof len === 'number' && !isNaN(len) ? sum + len : sum;
}, 0) ?? 0;
const albumLengthCalc = millisecondsToMinutes(totalrawLength);
console.log(releaseData); console.log(releaseData);
return new MusicReleaseModel({ return new MusicReleaseModel({
@ -208,7 +216,8 @@ export class MusicBrainzAPI extends APIModel {
language: releaseData['text-representation'].language ? getLanguageName(releaseData['text-representation'].language) : 'Unknown', language: releaseData['text-representation'].language ? getLanguageName(releaseData['text-representation'].language) : 'Unknown',
genres: result.genres.map(g => g.name), genres: result.genres.map(g => g.name),
subType: result['primary-type'], subType: result['primary-type'],
trackCount: releaseData.media[0]['track-count'] ?? 0, albumDuration: albumLengthCalc,
trackCount: releaseData.media[0]?.['track-count'] ?? 0,
tracks: tracks, tracks: tracks,
rating: result.rating.value * 2, rating: result.rating.value * 2,

View file

@ -12,6 +12,7 @@ export class MusicReleaseModel extends MediaTypeModel {
image: string; image: string;
rating: number; rating: number;
releaseDate: string; releaseDate: string;
albumDuration: string;
trackCount: number; trackCount: number;
tracks: { tracks: {
number: number; number: number;
@ -44,6 +45,7 @@ export class MusicReleaseModel extends MediaTypeModel {
} }
this.type = this.getMediaType(); this.type = this.getMediaType();
this.albumDuration = obj.albumDuration ?? '0:00';
this.trackCount = obj.trackCount ?? 0; this.trackCount = obj.trackCount ?? 0;
this.tracks = obj.tracks ?? []; this.tracks = obj.tracks ?? [];
this.language = obj.language ?? ''; this.language = obj.language ?? '';