-
Notifications
You must be signed in to change notification settings - Fork 92
/
beatport_classic_importer.user.js
131 lines (114 loc) · 4.67 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
// ==UserScript==
// @name Import Beatport Classic releases to MusicBrainz
// @description One-click importing of releases from classic.beatport.com/release pages into MusicBrainz
// @version 2018.2.18.1
// @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
// @grant unsafeWindow
// ==/UserScript==
// prevent JQuery conflicts, see http://wiki.greasespot.net/@grant
this.$ = this.jQuery = jQuery.noConflict(true);
if (!unsafeWindow) unsafeWindow = window;
$(document).ready(function () {
MBImportStyle();
let release_url = window.location.href.replace('/?.*$/', '').replace(/#.*$/, '');
let 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(',');
}
let release_date_strings = [
'Release Date',
'Fecha de lanzamiento',
'Date de sortie',
'Erscheinungsdatum',
'Data de lançamento',
'Releasedatum',
'Data di uscita',
'リリース予定日',
];
let labels_strings = ['Labels', 'Sello', 'Gravadoras', 'Label', 'Etichetta', 'Editora', 'レーベル'];
let catalog_strings = ['Catalog', 'Catálogo', 'Catalogue', 'Katalog', 'Catalogus', 'Catalogo', 'カタログ'];
let 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,
});
let 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(),
});
let release_artists = [];
// Tracks
let tracks = [];
unsafeWindow.$('span[data-json]').each(function (index, tagSoup) {
let t = $.parseJSON($(tagSoup).attr('data-json'));
release.title = t.release.name;
let artists = [];
t.artists.forEach(function (artist) {
artists.push(artist.name);
release_artists.push(artist.name);
});
let 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,
});
});
let 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) {
let edit_note = MBImport.makeEditNote(release_url, 'Beatport Classic');
let parameters = MBImport.buildFormParameters(release, edit_note);
let 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();
}