// ==UserScript== // @name RED : Spotify & Deezer Search Links // @description Adds a Spotify or Deezer search link to torrents on redacted.ch // @version 1.2 // @include http*://redacted.ch/* // @include http*://apollo.rip/* // @include http*://notwhat.cd/* // @grant none // @namespace https://greasyfork.org/users/165243 // @downloadURL none // ==/UserScript== // Quoph's scaled-down version, credits to duskyliability, orkyl, aphex80 and spacepandas for all the original Spotify Integration script. // CHANGELOG // // 1.2 02/01/2018 // // add: Deezer Links // add: Support for more trackers: APL and NWCD. // add: Support for secure and non-secure domain URLs. // change: Moved from pastebin to Greasy Fork. /*******************************/ /****** Player Preference ******/ /*******************************/ var Deezer = false; var Spotify = true; var spotifyPlayer = "APP"; // Enter "APP" or "WEB" for your preferred player /** End of Preference Section **/ if (spotifyPlayer == "WEB") { var spotURL = 'https://open.spotify.com/search/results/'; } else if (spotifyPlayer == "APP") { var spotURL = 'spotify:search:'; } var deezURL = 'http://www.deezer.com/search/'; function createLink(link, imageSource) { var a = document.createElement('a'); a.href = link; a.title = 'Listen in Spotify'; a.setAttribute('target', '_blank'); var img = document.createElement('img'); img.style.border = 'none'; img.style.marginLeft = '3px'; img.style.marginRight = '3px'; img.style.position = "relative"; img.style.top = '2px'; img.src = imageSource; img.width = 14; a.appendChild(img); return a; } function createSpotifyLinkGreen(link) { return createLink(link, 'data:image/png;charset=utf-8;base64,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'); } function createDeezerLink(link) { return createLink(link, 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKNSURBVFhH7dfvSxNxHAdw/4p6Hj2ydjftrt3Nu1UTIirBSItl5s+VurTNprPpbE1xM9ZkaitTKyVMk9iTIRkUpYjSk7IQeuCTwp4UZESE0IN3uyuaH08RJLaCPXhxx32+3Pd9n+99H3wzMllev4vhopk6bjl+RTL8niuqzJ2h3KwuJlk0I5lfvpYyt9KBdYvJkg6QDpCUAN7xSfTNvyOKXT61lpQAjuvD6IhNEQU1TrW2pQDNJ2ux0PGQeGDvWnes4tJwFOGZBcJS71FrWwrgLKjCnPceMWQLrDtWcbFvBFcfzxEnal1q7f8M8NeXINcoYdpl1eCyDZqXKRzHz+J5yx1ioLodzb5KjMe8hMtTtvlPeEiSseS3axg4QTO54kqRA++vTRCxhgiCvXWYnQ8TgS7b5tvwgJCDCUepxkYdsOWXI9YYIborPXC6S3B31E3YG4thC95E6+gEkW+tU9+lBjgsm/A15NTYqAP+Mw1Y7n1GPG0eRE9/PV4v3iBCkQvxlk9jaPEzUdry66dVA+xjsjDG7NA4dYzD2G2RGOwRYWXzMcLaiQBbhrLzInxhiSipFrHXFYQYuk9kWaoSAY4wLFZ02zWazvFYWZKJD28kdLLl+KaPEFN6D9p6JDx6ZSYuhyTIIzMwv/hC8M7ORACZycYAs1OjMI/DQLdIhAMCSpg83GJriFb2NIqsIpr8EmGpEMDb2yC09xNZhRWJAEfjHYBum4a7mgc+ysSntxKCbAV+6PuIWb0XHREZTxbMhLIM8tgccl9+J5RlSXfgTwAmTtkJa2Vz8ef7eUI28eAYASbGRBiZHHACDzFeX22PgYfOaIZOPkjs5qVEgFRKB0h9gH/haJbiw2lKj+e8/if7hYp3VOy3mwAAAABJRU5ErkJggg=='); } /*****************************************/ /** Top 10 / Collage Updates / Torrents **/ /*****************************************/ if (window.location.href.indexOf('top10.php') > -1 || window.location.href.indexOf('userhistory.php') > -1 || window.location.href.indexOf('torrents.php') > -1) { var processTable = function (table) { var groups = $('div.group_info', table); $(groups).each(function(i, group) { var whatArtist = $(group).find('a[href*="artist.php"]')[0]; var whatAlbum = $(group).find('a[href*="torrents.php?id"]')[0]; whatAlbum = $(whatAlbum).text(); whatArtist = $(whatArtist).text(); d = createDeezerLink(deezURL + encodeURIComponent(whatArtist) + "%20" + encodeURIComponent(whatAlbum) + "/album"); s = createSpotifyLinkGreen(spotURL + encodeURIComponent(whatArtist) + "%20" + encodeURIComponent(whatAlbum)); if (Deezer & Spotify){ $(group).prepend(d, s);} else if (Deezer) { $(group).prepend(d);} else {$(group).prepend(s);} }); }; $('.torrent_table').each(function () { processTable(this); }); new MutationObserver(function (mutes) { mutes.forEach(function (m) { $(m.addedNodes).each(function () { if (this.nodeName == 'TABLE') processTable(this); }); }); }).observe(document.querySelector('.thin'), { childList: true }); } /*************************************/ /** Collage & Bookmark torrent page **/ /*************************************/ if (window.location.href.indexOf('collages.php') > -1 || window.location.href.indexOf('collage.php?id') > -1 || window.location.href.indexOf('bookmarks.php?type=torrents') > -1) { var groups = $('.group'); $(groups).each(function(i, group) { var whatArtistElement = $(group).find('a[href*="artist.php"]')[0]; var whatAlbumElement = $(group).find('a[href*="torrents.php?id"]')[0]; whatAlbum = $(whatAlbumElement).text(); whatArtist = $(whatArtistElement).text(); d = createDeezerLink(deezURL + encodeURIComponent(whatArtist) + "%20" + encodeURIComponent(whatAlbum) + "/album"); s = createSpotifyLinkGreen(spotURL + encodeURIComponent(whatArtist) + "%20" + encodeURIComponent(whatAlbum)); if (Deezer & Spotify){ $(whatArtistElement).before(d, s);} else if (Deezer) { $(whatArtistElement).before(d);} else {$(whatArtistElement).before(s);} }); } /*************************************/ /*********** Artist page *************/ /*************************************/ if (window.location.href.indexOf('artist.php') > -1) { var whatArtist = $('h2').first().text(); d = createDeezerLink(deezURL + encodeURIComponent(whatArtist) + "/artist"); s = createSpotifyLinkGreen(spotURL + encodeURIComponent(whatArtist)); if (Deezer & Spotify){ $('h2').append(d, s);} else if (Deezer) { $('h2').append(d);} else {$('h2').append(s);} var groups = $('#torrents_album, #torrents_ep').find('div.group_info'); $(groups).each(function(i, group) { var whatAlbum = $(group).find('a[href*="torrents.php?id"]')[0]; whatAlbum = $(whatAlbum).text(); d = createDeezerLink(deezURL + encodeURIComponent(whatArtist) + "%20" + encodeURIComponent(whatAlbum) + "/album"); s = createSpotifyLinkGreen(spotURL + encodeURIComponent(whatArtist) + "%20" + encodeURIComponent(whatAlbum)); if (Deezer & Spotify){ $(group).prepend(d, s);} else if (Deezer) { $(group).prepend(d);} else {$(group).prepend(s);} } ); } /*************************************/ /*********** Torrent page ************/ /*************************************/ if (window.location.href.indexOf('torrents.php?id') > -1) { var whatArtist = $('h2 > a').first().text(); var whatAlbum = $('h2 > span').text(); d = createDeezerLink(deezURL + encodeURIComponent(whatArtist) + "%20" + encodeURIComponent(whatAlbum) + "/album"); s = createSpotifyLinkGreen(spotURL + encodeURIComponent(whatArtist) + "%20" + encodeURIComponent(whatAlbum)); if (Deezer & Spotify){ $('h2').append(d, s);} else if (Deezer) { $('h2').append(d);} else {$('h2').append(s);} } /*************************************/ /******* Bookmark artist page ********/ /*************************************/ if (window.location.href.indexOf('bookmarks.php?type=artists') > -1) { var tds = $('.artist_table').find('.rowa, .rowb').find('td'); var artists = $('.artist_table').find('a[href*="artist.php?id"]'); $(artists).each(function(i, artistElement) { artist = $(artistElement).text(); d = createDeezerLink(deezURL + encodeURIComponent(whatArtist) + "/artist"); s = createSpotifyLinkGreen(spotURL + encodeURIComponent(whatArtist)); var x = $('div.group_info')[i]; if (Deezer & Spotify){ $(tds[i]).prepend(d, s);} else if (Deezer) { $(tds[i]).prepend(d);} else {$(tds[i]).prepend(s);} }); }