forked from murdos/musicbrainz-userscripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbeatport_classic_importer.user.js
135 lines (117 loc) · 4.5 KB
/
beatport_classic_importer.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// ==UserScript==
// @name Import Beatport Classic releases to MusicBrainz
// @description One-click importing of releases from classic.beatport.com/release pages into MusicBrainz
// @version 2017.06.13.0
// @downloadURL https://raw.githubusercontent.com/murdos/musicbrainz-userscripts/master/beatport_classic_importer.user.js
// @updateURL https://raw.githubusercontent.com/murdos/musicbrainz-userscripts/master/beatport_classic_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 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) {
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 Classic');
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();
}