musicbrainz-userscripts/beatport_importer.user.js

142 lines
4.7 KiB
JavaScript
Raw Normal View History

2014-10-03 23:50:48 +00:00
// ==UserScript==
2017-06-13 09:13:12 +00:00
// @name Import Beatport releases to MusicBrainz
2014-10-03 23:50:48 +00:00
// @author VxJasonxV
2015-06-12 19:29:48 +00:00
// @namespace https://github.com/murdos/musicbrainz-userscripts/
2017-06-13 09:13:12 +00:00
// @description One-click importing of releases from beatport.com/release pages into MusicBrainz
// @version 2019.12.21.1
2017-06-13 11:09:26 +00:00
// @downloadURL https://raw.githubusercontent.com/murdos/musicbrainz-userscripts/master/beatport_importer.user.js
// @updateURL https://raw.githubusercontent.com/murdos/musicbrainz-userscripts/master/beatport_importer.user.js
2017-06-13 09:13:12 +00:00
// @include http://www.beatport.com/release/*
// @include https://www.beatport.com/release/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js
// @require lib/mbimport.js
// @require lib/logger.js
// @require lib/mbimportstyle.js
2015-07-10 12:28:43 +00:00
// @icon https://raw.githubusercontent.com/murdos/musicbrainz-userscripts/master/assets/images/Musicbrainz_import_logo.png
// @grant unsafeWindow
2014-10-03 23:50:48 +00:00
// ==/UserScript==
// prevent JQuery conflicts, see http://wiki.greasespot.net/@grant
this.$ = this.jQuery = jQuery.noConflict(true);
2014-10-03 23:50:48 +00:00
if (!unsafeWindow) unsafeWindow = window;
2020-04-05 14:01:21 +00:00
$(document).ready(function () {
MBImportStyle();
2023-06-30 05:58:41 +00:00
$.getJSON(`https://www.beatport.com/api/v4/catalog/releases/${ProductDetail.id}`).done(data => {
let release_url = window.location.href.replace('/?.*$/', '').replace(/#.*$/, '');
let release = retrieveReleaseInfo(release_url, data);
insertLink(release, release_url);
});
2014-10-03 23:50:48 +00:00
});
2023-06-30 05:58:41 +00:00
function retrieveReleaseInfo(release_url, release_data) {
let releaseDate = ProductDetail.date.published.split('-');
// Release information global to all Beatport releases
let release = {
artist_credit: [],
title: ProductDetail.name,
year: releaseDate[0],
month: releaseDate[1],
day: releaseDate[2],
format: 'Digital Media',
packaging: 'None',
country: 'XW',
status: 'official',
language: 'eng',
script: 'Latn',
type: '',
urls: [],
labels: [],
2023-06-30 05:58:41 +00:00
barcode: release_data.upc,
2020-04-05 14:01:21 +00:00
discs: [],
};
// URLs
release.urls.push({
url: release_url,
2020-04-05 14:01:21 +00:00
link_type: MBImport.URL_TYPES.purchase_for_download,
});
release.labels.push({
name: ProductDetail.label.name,
2020-04-05 14:01:21 +00:00
catno: ProductDetail.catalog,
});
// Reload Playables if empty
2020-03-14 00:43:40 +00:00
if (!Object.prototype.hasOwnProperty.call(unsafeWindow.Playables, 'tracks')) {
eval($('#data-objects').text());
unsafeWindow.Playables = window.Playables;
}
// Tracks
let tracks = [];
let the_tracks = unsafeWindow.Playables.tracks;
let seen_tracks = {}; // to shoot duplicates ...
let release_artists = [];
2020-04-05 14:01:21 +00:00
$.each(the_tracks, function (idx, track) {
if (track.release.id !== ProductDetail.id) {
return;
2014-10-03 23:50:48 +00:00
}
if (seen_tracks[track.id]) {
return;
}
seen_tracks[track.id] = true;
let artists = [];
2020-04-05 14:01:21 +00:00
$.each(track.artists, function (idx2, artist) {
artists.push(artist.name);
release_artists.push(artist.name);
});
let title = track.name;
if (track.mix && track.mix !== 'Original Mix') {
title += ` (${track.mix})`;
}
tracks.push({
artist_credit: MBImport.makeArtistCredits(artists),
title: title,
2020-04-05 14:01:21 +00:00
duration: track.duration.minutes,
});
});
let unique_artists = [];
2020-04-05 14:01:21 +00:00
$.each(release_artists, function (i, el) {
if ($.inArray(el, unique_artists) === -1) {
unique_artists.push(el);
}
});
if (unique_artists.length > 4) {
release.artist_credit = [MBImport.specialArtist('various_artists')];
} else {
release.artist_credit = MBImport.makeArtistCredits(unique_artists);
}
release.discs.push({
tracks: tracks,
2020-04-05 14:01:21 +00:00
format: release.format,
});
LOGGER.info('Parsed release: ', release);
return release;
2014-10-03 23:50:48 +00:00
}
// Insert button into page under label information
function insertLink(release, release_url) {
let edit_note = MBImport.makeEditNote(release_url, 'Beatport');
let parameters = MBImport.buildFormParameters(release, edit_note);
let mbUI = $(
`<li class="interior-release-chart-content-item musicbrainz-import">${MBImport.buildFormHTML(
parameters
)}${MBImport.buildSearchButton(release)}</li>`
).hide();
$('.interior-release-chart-content-list').append(mbUI);
$('form.musicbrainz_import').css({ display: 'inline-block', 'margin-left': '5px' });
$('form.musicbrainz_import button').css({ width: '120px' });
mbUI.slideDown();
2015-06-10 22:22:38 +00:00
}