Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Try add MusicBrainz tag to file #82

Open
wants to merge 43 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
dabfef3
Try add MusicBrainz tag to file
Maxmystere Sep 25, 2021
4b12c70
Move logic to cli:trackQueue
Maxmystere Oct 1, 2021
12aec89
Clean code
Maxmystere Oct 1, 2021
e4aff77
Final code cleaning and separation
Maxmystere Oct 1, 2021
b55eb42
Cleaner logs
Maxmystere Oct 1, 2021
6ccc4b1
Sync logs
Maxmystere Oct 1, 2021
c95d255
Merge branch 'master' into Add-MBID-tag
miraclx Oct 2, 2021
fc22292
touch lookup logic, extract extra metadata
miraclx Oct 2, 2021
d524f78
drop AtomicParsley ignore
miraclx Oct 2, 2021
524774a
Merge branch 'master' into Add-MBID-tag
miraclx Oct 3, 2021
cdbbac9
show error msg + code when musicbrainz lookup failed
miraclx Oct 3, 2021
2fe8a68
add cli flag `-m, --musicbrainz` for enabling musicbrainz functionality
miraclx Oct 3, 2021
afc16e6
default storefront = us;
miraclx Oct 3, 2021
2248ca1
embed release country
miraclx Oct 3, 2021
4d0ba9f
apply default if not using musicbrainz
miraclx Oct 3, 2021
0757056
catch and diffuse any caught error in the current execution loop
miraclx Oct 3, 2021
9c1129c
prioritize storefront+digital media matches
miraclx Oct 3, 2021
7825c3c
cache musicbrainz lookups for efficiency
miraclx Oct 3, 2021
e1a16e3
limit the scope of the args fields: inc & json only
miraclx Oct 3, 2021
2d5c59b
remove static inc from template url
miraclx Oct 3, 2021
c370653
releaseType should be lowerCase
miraclx Oct 3, 2021
52a948c
Merge branch 'miraclx:master' into Add-MBID-tag
Maxmystere May 14, 2022
e489991
Merge remote-tracking branch 'origin/master' into Add-MBID-tag
Maxmystere Aug 23, 2022
320a206
Fix merge issue
Maxmystere Aug 23, 2022
e1ecc53
Finish merge + fixes
Maxmystere Aug 23, 2022
4b79bb8
Add flac support + use taglib for tagging flac
Maxmystere Aug 25, 2022
a454a83
CRLF -> LF
Maxmystere Aug 25, 2022
b49a8e9
Disable Musicbrainz for AtomicParsley has it is unsupported
Maxmystere Aug 25, 2022
8042571
Comment fix
Maxmystere Aug 25, 2022
cfac169
Merge branch 'master' into Add-MBID-tag
Maxmystere Aug 25, 2022
bec59fb
Fix format
Maxmystere Aug 29, 2022
c8a048b
Merge branch 'master' into Add-MBID-tag
Maxmystere Aug 29, 2022
8ecc465
Secure get
Maxmystere Aug 30, 2022
a1b5fd3
eslint
Maxmystere Aug 30, 2022
36b16e1
Up from master
Maxmystere Sep 20, 2022
86fc599
Merge remote-tracking branch 'origin/master' into Add-MBID-tag
Maxmystere Sep 20, 2022
b84283f
LF
Maxmystere Sep 20, 2022
7d6796e
Fix issue with metadata extract
Maxmystere Sep 20, 2022
d50b7e6
Merge remote-tracking branch 'origin/master' into Add-MBID-tag
Maxmystere Oct 28, 2022
0c3f74d
Increase security
Maxmystere Oct 28, 2022
c3633d2
Merge remote-tracking branch 'origin/master' into Add-MBID-tag
Maxmystere Dec 18, 2022
4e67396
Merge remote-tracking branch 'origin/master' into Add-MBID-tag
Maxmystere Jan 1, 2023
1185531
Merge remote-tracking branch 'origin/master' into Add-MBID-tag
Maxmystere Apr 9, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,5 @@ bins/

# ignore stage for testing
stage/

AtomicParsley.exe
77 changes: 75 additions & 2 deletions cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@ function wrapCliInterface(binaryName, binaryPath) {
binaryPath = ensureBinExtIfWindows(isWin, binaryName);
}

if (typeof file === 'string') spawn(binaryPath, [file, ...parseMeta(args)], {env: extendPathOnEnv(path)}).on('close', cb);
if (typeof file === 'string') {
spawn(binaryPath, [file, ...parseMeta(args)], {env: extendPathOnEnv(path)}).on('close', cb);
}
};
}

Expand Down Expand Up @@ -578,6 +580,7 @@ async function init(queries, options) {

const atomicParsley = wrapCliInterface('AtomicParsley', options.atomicParsley);


try {
if (options.ffmpeg) {
if (!fs.existsSync(options.ffmpeg)) throw new Error(`\x1b[31mffmpeg\x1b[0m: Binary not found [${options.ffmpeg}]`);
Expand Down Expand Up @@ -874,7 +877,25 @@ async function init(queries, options) {
// ['albumartist', 'NAME'], // soaa
// ],
})
.finally(() => files.image.file.removeCallback())
.finally(() => {
/* Good location for code not found
var mutagen = require('mutagen');

var edits = {
MusicBrainzTrackId: track.musicBrainz.trackId,
MusicBrainzArtistId: track.musicBrainz.artistId,
MusicBrainzAlbumId: track.musicBrainz.albumId,
MusicBrainzAlbumArtistId: track.musicBrainz.albumArtistId,
};
mutagen.edit(meta.outFilePath, edits, function (err) {
if (err) {
return console.log(err);
}
console.log('done');
});
*/
files.image.file.removeCallback()
})
.catch(err => Promise.reject({err, code: 8}));
},
);
Expand Down Expand Up @@ -1035,6 +1056,58 @@ async function init(queries, options) {
const processTrack = !fileExists || options.force;
let collectSources;
if (processTrack) collectSources = buildSourceCollectorFor(track, results => results[0]);

var musicBrainz = [];
if (track.isrc !== "") {
logger.print('[\u2022] Obtaining MusicBrainz metadata...');

const got = require('got');
var parser = require('xml2js');

await got(`https://musicbrainz.org/ws/2/isrc/${track.isrc}?inc=artist-credits+releases`).then(response => {
logger.write('[done]\n');
try {
// Should 'explicitArray: false' be used ?
parser.parseString(response.body, { trim: true, mergeAttrs: true }, function (err, result) {
const recording = result.metadata.isrc[0]['recording-list'][0]['recording'][0];

try {
musicBrainz.trackId = recording['id'][0];
} catch { };
logger.log(` \u27a4 TrackId: ${musicBrainz.trackId}`);
try {
musicBrainz.artistId = recording['artist-credit'][0]['name-credit'][0]['artist'][0]['id'][0];
} catch { };
logger.log(` \u27a4 ArtistId: ${musicBrainz.artistId}`);

// Searching for a matching album
const releases = recording['release-list'][0]['release'].filter(obj => {
const title = obj.title[0].replace(/[\u2018\u2019]/g, "'").replace(/[\u201C\u201D]/g, '"'); // Removing weird characters that can cause fails
return track.album.localeCompare(title) == 0;
});

try {
musicBrainz.albumId = releases[0]['id'][0];
bim.hello = true;
}
catch { };
logger.log(` \u27a4 AlbumId: ${musicBrainz.albumId}`);
try {
musicBrainz.albumArtistId = releases[0]['artist-credit'][0]['name-credit'][0]['artist'][0]['id'][0];
} catch { };
logger.log(` \u27a4 AlbumArtistId: ${musicBrainz.albumArtistId}`);
});
} catch (error) {
logger.log(error);
}
//
}).catch(error => {
logger.write('[failed]\n');
logger.log(error);
});
}
track.musicBrainz = musicBrainz;

const meta = {trackName, outFileDir, outFilePath, track, service};
return trackQueue
.push({track, meta, props: {collectSources, fileExists, processTrack, logger}})
Expand Down
95 changes: 77 additions & 18 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
"merge2": "^1.4.1",
"minimatch": "^3.0.4",
"mkdirp": "^1.0.4",
"mutagen": "^1.0.0",
"node-cache": "^5.1.2",
"open": "^7.3.0",
"pretty-ms": "^7.0.1",
Expand All @@ -84,6 +85,7 @@
"tmp": "^0.2.1",
"tough-cookie": "^4.0.0",
"xbytes": "^1.6.2",
"xml2js": "^0.4.23",
"xprogress": "^0.17.3",
"youtube-dl-exec": "^1.2.6",
"yt-search": "^2.5.1"
Expand Down