mirror of
https://github.com/murdos/musicbrainz-userscripts
synced 2024-12-13 20:02:27 +00:00
138 lines
4.6 KiB
JavaScript
138 lines
4.6 KiB
JavaScript
// ==UserScript==
|
|
// @name Import Beatport releases to MusicBrainz
|
|
// @description One-click importing of releases from beatport.com/release pages into MusicBrainz
|
|
// @version 2015.07.14.0
|
|
// @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
|
|
// @include http*://classic.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
|
|
// @icon https://raw.githubusercontent.com/murdos/musicbrainz-userscripts/master/assets/images/Musicbrainz_import_logo.png
|
|
// ==/UserScript==
|
|
|
|
// prevent JQuery conflicts, see http://wiki.greasespot.net/@grant
|
|
this.$ = this.jQuery = jQuery.noConflict(true);
|
|
|
|
if (!unsafeWindow) unsafeWindow = window;
|
|
|
|
$(document).ready(function(){
|
|
MBImportStyle();
|
|
|
|
var release_url = window.location.href.replace('/\?.*$/', '').replace(/#.*$/, '');
|
|
var release = retrieveReleaseInfo(release_url);
|
|
insertLink(release, release_url);
|
|
|
|
});
|
|
|
|
function retrieveReleaseInfo(release_url) {
|
|
function contains_or(selector, list) {
|
|
selectors = [];
|
|
$.each(list, function(ind, value) {
|
|
selectors.push(selector + ':contains("' + value.replace('"', '\\"') + '")');
|
|
});
|
|
return selectors.join(',');
|
|
}
|
|
var release_date_strings = [
|
|
'Release Date', 'Fecha de lanzamiento', 'Date de sortie', 'Erscheinungsdatum', 'Data de lançamento', 'Releasedatum', "Data di uscita", "リリース予定日"
|
|
];
|
|
var release_strings = [
|
|
'Release', 'Lanzamiento', 'Sortie', 'Album', 'Lançamento'
|
|
];
|
|
var labels_strings = [
|
|
'Labels', 'Sello', 'Gravadoras', "Label", "Etichetta", "Editora", "レーベル"
|
|
];
|
|
var catalog_strings = [
|
|
'Catalog', 'Catálogo', 'Catalogue', 'Katalog', 'Catalogus', "Catalogo", "カタログ"
|
|
];
|
|
var release = {};
|
|
|
|
// Release information global to all Beatport releases
|
|
release.packaging = 'None';
|
|
release.country = "XW";
|
|
release.status = 'official';
|
|
release.urls = [];
|
|
release.urls.push({
|
|
'url': release_url,
|
|
'link_type': MBImport.URL_TYPES.purchase_for_download
|
|
});
|
|
|
|
var releaseDate = $(contains_or("td.meta-data-label", release_date_strings)).next().text().split("-");
|
|
release.year = releaseDate[0];
|
|
release.month = releaseDate[1];
|
|
release.day = releaseDate[2];
|
|
|
|
release.labels = [];
|
|
release.labels.push(
|
|
{
|
|
name: $(contains_or("td.meta-data-label", labels_strings)).next().text(),
|
|
catno: $(contains_or("td.meta-data-label", catalog_strings)).next().text()
|
|
}
|
|
);
|
|
|
|
var release_artists = [];
|
|
|
|
// Tracks
|
|
var tracks = [];
|
|
unsafeWindow.$( "span[data-json]" ).each(
|
|
function ( index, tagSoup ) {
|
|
var t = $.parseJSON($(tagSoup).attr('data-json'));
|
|
release.title = t.release.name;
|
|
|
|
var artists = [];
|
|
t.artists.forEach(
|
|
function ( artist, index, arr ) {
|
|
artists.push(artist.name);
|
|
release_artists.push(artist.name);
|
|
}
|
|
);
|
|
var title = t.name;
|
|
if (t.mixName && t.mixName != 'Original Mix' && t.mixName != 'Original') {
|
|
title += ' (' + t.mixName + ')';
|
|
}
|
|
tracks.push({
|
|
'artist_credit': MBImport.makeArtistCredits(artists),
|
|
'title': title,
|
|
'duration': t.lengthMs
|
|
});
|
|
}
|
|
);
|
|
|
|
var unique_artists = [];
|
|
$.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 = [];
|
|
release.discs.push( {
|
|
'tracks': tracks,
|
|
'format': "Digital Media"
|
|
} );
|
|
|
|
LOGGER.info("Parsed release: ", release);
|
|
return release;
|
|
}
|
|
|
|
// Insert button into page under label information
|
|
function insertLink(release, release_url) {
|
|
var edit_note = MBImport.makeEditNote(release_url, 'BeatPort');
|
|
var parameters = MBImport.buildFormParameters(release, edit_note);
|
|
|
|
var mbUI = $('<div class="musicbrainz-import">'
|
|
+ MBImport.buildFormHTML(parameters)
|
|
+ MBImport.buildSearchButton(release)
|
|
+ '</div>').hide();
|
|
|
|
$(".release-detail-metadata").append(mbUI);
|
|
$('form.musicbrainz_import').css({'display': 'inline-block', 'margin': '1px'});
|
|
$('form.musicbrainz_import img').css({'display': 'inline-block'});
|
|
mbUI.slideDown();
|
|
}
|