Added total duration for a music release/album

This commit is contained in:
ltctceplrm 2025-12-29 14:31:09 +01:00
parent 4c7ae08f91
commit 674b775b6b
5 changed files with 5070 additions and 3 deletions

5054
meta.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -191,6 +191,14 @@ export class MusicBrainzAPI extends APIModel {
const releaseData = (await releaseResponse.json) as MediaResponse;
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);
return new MusicReleaseModel({
@ -208,7 +216,8 @@ export class MusicBrainzAPI extends APIModel {
language: releaseData['text-representation'].language ? getLanguageName(releaseData['text-representation'].language) : 'Unknown',
genres: result.genres.map(g => g.name),
subType: result['primary-type'],
trackCount: releaseData.media[0]['track-count'] ?? 0,
albumDuration: albumLengthCalc,
trackCount: releaseData.media[0]?.['track-count'] ?? 0,
tracks: tracks,
rating: result.rating.value * 2,

View file

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

View file

@ -5,7 +5,8 @@ export class FileSuggest extends AbstractInputSuggest<TFile> {
const lowerCaseInputStr = query.toLowerCase();
// we do two filters because otherwise TS type inference does convert the array to TFile[]
return this.app.vault.getAllLoadedFiles()
return this.app.vault
.getAllLoadedFiles()
.filter(file => file instanceof TFile)
.filter(file => file.path.toLowerCase().contains(lowerCaseInputStr));
}

View file

@ -5,7 +5,8 @@ export class FolderSuggest extends AbstractInputSuggest<TFolder> {
const lowerCaseInputStr = query.toLowerCase();
// we do two filters because otherwise TS type inference does convert the array to TFolder[]
return this.app.vault.getAllLoadedFiles()
return this.app.vault
.getAllLoadedFiles()
.filter(file => file instanceof TFolder)
.filter(file => file.path.toLowerCase().contains(lowerCaseInputStr));
}