// ==UserScript== // @name Import Juno Download releases to MusicBrainz // @namespace https://github.com/murdos/musicbrainz-userscripts/ // @description One-click importing of releases from junodownload.com/products pages into MusicBrainz // @version 2018.2.18.1 // @downloadURL https://raw.githubusercontent.com/murdos/musicbrainz-userscripts/master/juno_download_importer.user.js // @updateURL https://raw.githubusercontent.com/murdos/musicbrainz-userscripts/master/juno_download_importer.user.js // @include http*://www.junodownload.com/products/* // @include http*://secure.junodownload.com/products/* // @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); $(document).ready(function() { MBImportStyle(); let release_url = window.location.href.replace('/?.*$/', '').replace(/#.*$/, ''); let release = retrieveReleaseInfo(release_url); insertLink(release, release_url); }); function parseReleaseDate(rdate) { let months = { January: 1, February: 2, March: 3, April: 4, May: 5, June: 6, July: 7, August: 8, September: 9, October: 10, November: 11, December: 12 }; let m = rdate.match(/(\d{1,2}) ([a-z]+), (\d{4})/i); if (m) { return { year: m[3], month: months[m[2]], day: m[1] }; } return false; } function retrieveReleaseInfo(release_url) { // Release defaults let release = { artist_credit: [], title: $('#product_heading_title') .text() .trim(), year: 0, month: 0, day: 0, format: 'Digital Media', packaging: 'None', country: 'XW', status: 'official', language: 'eng', script: 'Latn', type: '', urls: [], labels: [], discs: [] }; // Release date let parsed_releaseDate = parseReleaseDate( $('#product_info_released_on') .text() .trim() ); if (parsed_releaseDate) { release.year = parsed_releaseDate.year; release.month = parsed_releaseDate.month; release.day = parsed_releaseDate.day; } // URLs release.urls.push({ url: release_url, link_type: MBImport.URL_TYPES.purchase_for_download }); release.labels.push({ name: $('#product_heading_label') .text() .trim(), catno: $('#product_info_cat_no') .text() .trim() }); // Tracks let tracks = []; $(".product_tracklist_records[itemprop='tracks']").each(function() { let artists = []; let trackno = $(this) .find('.product_tracklist_heading_records_sn') .text() .trim() - 1; let trackname = $(this) .find('.product_tracklist_heading_records_title') .text() .trim(); let tracklength = $(this) .find('.product_tracklist_heading_records_length') .text() .trim(); let m = trackname.match(/^([^-]+) - (.*)$/); if (m) { artists = [m[1]]; trackname = m[2]; } tracks.push({ artist_credit: MBImport.makeArtistCredits(artists), title: trackname, duration: tracklength }); }); let parsed_release_artist = $('#product_heading_artist') .text() .trim(); if (parsed_release_artist == 'VARIOUS') { release.artist_credit = [MBImport.specialArtist('various_artists')]; } else { release.artist_credit = MBImport.makeArtistCredits([parsed_release_artist]); } release.discs.push({ tracks: tracks, format: release.format }); 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, 'Juno Download'); let parameters = MBImport.buildFormParameters(release, edit_note); let mbUI = $(`
${MBImport.buildFormHTML(parameters)}${MBImport.buildSearchButton(release)}
`).hide(); $('div.sociald').before(mbUI); $('#mb_buttons').css({ background: '#759d44', border: '2px solid #ddd', 'text-align': 'center' }); $('form.musicbrainz_import button').css({ width: '80%' }); mbUI.slideDown(); }