Skip to content

Commit b9c1833

Browse files
committed
Fix miraclx#334: Replace AtomicParsley with lofty-rs.
1 parent 3861d07 commit b9c1833

File tree

4 files changed

+183
-120
lines changed

4 files changed

+183
-120
lines changed

cli.js

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {program as commander} from 'commander';
2828
import {decode as entityDecode} from 'html-entities';
2929
import {createFFmpeg, fetchFile} from '@ffmpeg/ffmpeg';
3030
import ProgressBar, {getPersistentStdout} from 'xprogress';
31+
import meta_writer from '@orsetto/meta-writer';
3132

3233
import _merge from 'lodash.merge';
3334
import _mergeWith from 'lodash.mergewith';
@@ -1096,56 +1097,58 @@ async function init(packageJson, queries, options) {
10961097
Config.concurrency.embedder,
10971098
async ({track, meta, files, audioSource}) => {
10981099
try {
1099-
await Promise.promisify(atomicParsley)(meta.outFile.path, {
1100+
await meta_writer({
11001101
overWrite: '', // overwrite the file
11011102

1102-
title: track.name, // ©nam
1103-
artist: track.artists[0], // ©ART
1104-
composer: track.composers, // ©wrt
1105-
album: track.album, // ©alb
1106-
genre: (genre => (genre ? genre.concat(' ') : ''))((track.genres || [])[0]), // ©gen | gnre
1107-
tracknum: `${track.track_number}/${track.total_tracks}`, // trkn
1108-
disk: `${track.disc_number}/${track.disc_number}`, // disk
1109-
year: new Date(track.release_date).toISOString().split('T')[0], // ©day
1110-
compilation: track.compilation, // ©cpil
1111-
gapless: options.gapless, // pgap
1112-
rDNSatom: [
1103+
TrackTitle: track.name, // ©nam
1104+
TrackArtist: track.artists[0], // ©ART
1105+
Composer: track.composers, // ©wrt
1106+
AlbumTitle: track.album, // ©alb
1107+
Genre: (genre => (genre ? genre.concat(' ') : ''))((track.genres || [''])[0]), // ©gen | gnre
1108+
TrackNumber: `${track.track_number}`, // trkn
1109+
TrackTotal: `${track.total_tracks}`,
1110+
DiscNumber: `${track.disc_number}`, // disk
1111+
DiscTotal: `${track.disc_number}`,
1112+
RecordingDate: new Date(track.release_date).toISOString().split('T')[0], // ©day
1113+
1114+
AlbumArtist: track.album_artist, // aART
1115+
CopyrightMessage: track.copyrights.sort(({type}) => (type === 'P' ? -1 : 1))[0]?.text, // cprt
1116+
EncoderSoftware: `freyr-js cli v${packageJson.version}`, // ©too
1117+
EncodedBy: 'd3vc0dr', // ©enc
1118+
FrontCover: files.image.file.path, // covr
1119+
1120+
// Ilst tags
1121+
'cpil': track.compilation, // ©cpil
1122+
stik: 'Normal', // stik
1123+
pgap: options.gapless, // pgap
1124+
rDNS: [
11131125
// ----
1114-
['Digital Media', 'name=MEDIA', 'domain=com.apple.iTunes'],
1115-
[track.isrc, 'name=ISRC', 'domain=com.apple.iTunes'],
1116-
[track.artists[0], 'name=ARTISTS', 'domain=com.apple.iTunes'],
1117-
[track.label, 'name=LABEL', 'domain=com.apple.iTunes'],
1118-
[`${meta.service[symbols.meta].DESC}: ${track.uri}`, 'name=SOURCE', 'domain=com.apple.iTunes'],
1119-
[
1120-
`${audioSource.service[symbols.meta].DESC}: ${audioSource.source.videoId}`,
1121-
'name=PROVIDER',
1122-
'domain=com.apple.iTunes',
1123-
],
1126+
{mean: 'com.apple.iTunes', name: 'MEDIA', data: 'Digital Media' },
1127+
{mean: 'com.apple.iTunes', name: 'ISRC', data: track.isrc },
1128+
{mean: 'com.apple.iTunes', name: 'ARTISTS', data: track.artists[0] },
1129+
{mean: 'com.apple.iTunes', name: 'LABEL', data: track.label },
1130+
{mean: 'com.apple.iTunes', name: 'SOURCE', data: `${meta.service[symbols.meta].DESC}: ${track.uri}` },
1131+
{mean: 'com.apple.iTunes', name: 'PROVIDER', data: `${audioSource.service[symbols.meta].DESC}: ${audioSource.source.videoId}` }
11241132
],
1125-
advisory: ['explicit', 'clean'].includes(track.contentRating) // rtng
1133+
ParentalAdvisory: ['explicit', 'clean'].includes(track.contentRating) // rtng
11261134
? track.contentRating
11271135
: track.contentRating === true
11281136
? 'explicit'
11291137
: 'Inoffensive',
1130-
stik: 'Normal', // stik
11311138
// geID: 0, // geID: genreID. See `AtomicParsley --genre-list`
11321139
// sfID: 0, // ~~~~: store front ID
11331140
// cnID: 0, // cnID: catalog ID
1134-
albumArtist: track.album_artist, // aART
11351141
// ownr? <owner>
1136-
purchaseDate: 'timestamp', // purd
1142+
purd: 'timestamp', // purd
11371143
apID: 'cli@freyr.git', // apID
1138-
copyright: track.copyrights.sort(({type}) => (type === 'P' ? -1 : 1))[0]?.text, // cprt
1139-
encodingTool: `freyr-js cli v${packageJson.version}`, // ©too
1140-
encodedBy: 'd3vc0dr', // ©enc
1141-
artwork: files.image.file.path, // covr
11421144
// sortOrder: [
11431145
// ['name', 'NAME'], // sonm
11441146
// ['album', 'NAME'], // soal
11451147
// ['artist', 'NAME'], // soar
11461148
// ['albumartist', 'NAME'], // soaa
11471149
// ],
1148-
});
1150+
},
1151+
meta.outFile.path);
11491152
} catch (err) {
11501153
throw {err, [symbols.errorCode]: 8};
11511154
}

package-lock.json

Lines changed: 52 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"@ffmpeg/core": "^0.11.0",
5555
"@ffmpeg/ffmpeg": "^0.11.0",
5656
"@miraclx/spotify-web-api-node": "^5.1.0",
57+
"@orsetto/meta-writer": "^0.1.2",
5758
"@yujinakayama/apple-music": "^0.4.1",
5859
"async": "^3.2.4",
5960
"bluebird": "^3.7.2",

0 commit comments

Comments
 (0)