fix DataException

This commit is contained in:
Sayem Chowdhury 2021-03-20 20:51:03 +06:00
parent 53ab1c1e75
commit 64832aee9d
3 changed files with 51 additions and 39 deletions

View File

@ -5,12 +5,12 @@ import type {albumTypePublicApi, trackType} from '../types';
export const writeMetadataFlac = (
buffer: Buffer,
track: trackType,
album: albumTypePublicApi,
album: albumTypePublicApi | null,
dimension: number,
cover?: Buffer | null,
): Buffer => {
const flac = new Metaflac(buffer);
const RELEASE_YEAR = album.release_date.split('-')[0];
const RELEASE_YEAR = album ? album.release_date.split('-')[0] : null;
const artists = track.ART_NAME.split(
new RegExp(' featuring | feat. | Ft. | ft. | vs | vs. | x | - |, ', 'g'),
@ -18,24 +18,27 @@ export const writeMetadataFlac = (
flac.setTag('TITLE=' + track.SNG_TITLE);
flac.setTag('ALBUM=' + track.ALB_TITLE);
flac.setTag('GENRE=' + album.genres.data[0].name);
flac.setTag('RELEASETYPE=' + album.record_type);
flac.setTag('ARTIST=' + artists.join(', '));
flac.setTag('ALBUMARTIST=' + album.artist.name);
flac.setTag('TRACKNUMBER=' + track.TRACK_NUMBER);
if (album) {
flac.setTag('GENRE=' + album.genres.data[0].name);
flac.setTag('RELEASETYPE=' + album.record_type);
flac.setTag('ALBUMARTIST=' + album.artist.name);
flac.setTag('BARCODE=' + album.upc);
flac.setTag('LABEL=' + album.label);
flac.setTag('DATE=' + album.release_date);
flac.setTag('YEAR=' + RELEASE_YEAR);
}
if (track.DISK_NUMBER) {
flac.setTag('DISCNUMBER=' + track.DISK_NUMBER);
}
flac.setTag('ISRC=' + track.ISRC);
flac.setTag('BARCODE=' + album.upc);
flac.setTag('LABEL=' + album.label);
flac.setTag('LENGTH=' + track.DURATION);
flac.setTag('MEDIA=Digital Media');
flac.setTag('TRACKNUMBER=' + track.TRACK_NUMBER);
flac.setTag('YEAR=' + RELEASE_YEAR);
flac.setTag('DATE=' + album.release_date);
if (track.LYRICS) {
flac.setTag('LYRICS=' + track.LYRICS.LYRICS_TEXT);
@ -46,7 +49,7 @@ export const writeMetadataFlac = (
if (track.SNG_CONTRIBUTORS && !Array.isArray(track.SNG_CONTRIBUTORS)) {
if (track.SNG_CONTRIBUTORS.main_artist) {
flac.setTag(`COPYRIGHT=${RELEASE_YEAR} ${track.SNG_CONTRIBUTORS.main_artist[0]}`);
flac.setTag(`COPYRIGHT=${RELEASE_YEAR ? RELEASE_YEAR + ' ' : ''}${track.SNG_CONTRIBUTORS.main_artist[0]}`);
}
if (track.SNG_CONTRIBUTORS.publisher) {
flac.setTag('ORGANIZATION=' + track.SNG_CONTRIBUTORS.publisher.join(', '));

View File

@ -5,11 +5,11 @@ import type {albumTypePublicApi, trackType} from '../types';
export const writeMetadataMp3 = (
buffer: Buffer,
track: trackType,
album: albumTypePublicApi,
album: albumTypePublicApi | null,
cover?: Buffer | null,
): Buffer => {
const writer = new id3Writer(buffer);
const RELEASE_YEAR = album.release_date.split('-')[0];
const RELEASE_YEAR = album ? album.release_date.split('-')[0] : null;
const artists = track.ART_NAME.split(
new RegExp(' featuring | feat. | Ft. | ft. | vs | vs. | x | - |, ', 'g'),
@ -18,36 +18,42 @@ export const writeMetadataMp3 = (
writer
.setFrame('TIT2', track.SNG_TITLE)
.setFrame('TALB', track.ALB_TITLE)
.setFrame(
'TCON',
album.genres.data.map((g) => g.name),
)
.setFrame('TPE1', [artists])
.setFrame('TPE2', album.artist.name)
.setFrame('TLEN', Number(track.DURATION) * 1000)
.setFrame('TYER', RELEASE_YEAR)
.setFrame('TDAT', album.release_date)
.setFrame('TLEN', Number(track.DURATION) * 1000);
if (album) {
writer
.setFrame(
'TCON',
album.genres.data.map((g) => g.name),
)
.setFrame('TPE2', album.artist.name)
.setFrame('TYER', RELEASE_YEAR)
.setFrame('TDAT', album.release_date)
.setFrame('TXXX', {
description: 'RELEASETYPE',
value: album.record_type,
})
.setFrame('TXXX', {
description: 'BARCODE',
value: album.upc,
})
.setFrame('TXXX', {
description: 'LABEL',
value: album.label,
});
}
writer
.setFrame('TMED', 'Digital Media')
.setFrame('TXXX', {
description: 'Artists',
value: artists.join(', '),
})
.setFrame('TXXX', {
description: 'RELEASETYPE',
value: album.record_type,
})
.setFrame('TXXX', {
description: 'ISRC',
value: track.ISRC,
})
.setFrame('TXXX', {
description: 'BARCODE',
value: album.upc,
})
.setFrame('TXXX', {
description: 'LABEL',
value: album.label,
})
.setFrame('TXXX', {
description: 'COMPILATION',
value: track.ART_PICTURE === 'Various Artists' ? '1' : '0',
@ -62,12 +68,14 @@ export const writeMetadataMp3 = (
});
if (track.DISK_NUMBER) {
writer.setFrame('TPOS', track.DISK_NUMBER).setFrame('TRCK', track.TRACK_NUMBER + '/' + album.nb_tracks);
writer
.setFrame('TPOS', track.DISK_NUMBER)
.setFrame('TRCK', `${track.TRACK_NUMBER}${album ? '/' + album.nb_tracks : ''}`);
}
if (track.SNG_CONTRIBUTORS && !Array.isArray(track.SNG_CONTRIBUTORS)) {
if (track.SNG_CONTRIBUTORS.main_artist) {
writer.setFrame('TCOP', `${RELEASE_YEAR} ${track.SNG_CONTRIBUTORS.main_artist[0]}`);
writer.setFrame('TCOP', `${RELEASE_YEAR ? RELEASE_YEAR + ' ' : ''}${track.SNG_CONTRIBUTORS.main_artist[0]}`);
}
if (track.SNG_CONTRIBUTORS.publisher) {
writer.setFrame('TPUB', track.SNG_CONTRIBUTORS.publisher.join(', '));

View File

@ -2,15 +2,14 @@ import {downloadAlbumCover} from './abumCover';
import {getTrackLyrics} from './getTrackLyrics';
import {writeMetadataMp3} from './id3';
import {writeMetadataFlac} from './flacmetata';
import {getAlbumInfoPublicApi, getTrackInfoPublicApi} from '../api';
import {getAlbumInfoPublicApi} from '../api';
import type {trackType} from '../types';
const albumInfo = async (track: trackType) => {
try {
return getAlbumInfoPublicApi(track.ALB_ID);
} catch (err) {
const {album} = await getTrackInfoPublicApi(track.SNG_ID);
return getAlbumInfoPublicApi(album.id.toString());
return null;
}
};
@ -34,8 +33,10 @@ export const addTrackTags = async (trackBuffer: Buffer, track: trackType, albumC
if (track.ART_NAME.toLowerCase() === 'various') {
track.ART_NAME = 'Various Artists';
}
album.record_type =
album.record_type === 'ep' ? 'EP' : album.record_type.charAt(0).toUpperCase() + album.record_type.slice(1);
if (album && album.record_type) {
album.record_type =
album.record_type === 'ep' ? 'EP' : album.record_type.charAt(0).toUpperCase() + album.record_type.slice(1);
}
const isFlac = trackBuffer.slice(0, 4).toString('ascii') === 'fLaC';
return isFlac