Swyter Tweaks for Spotify

Mutes the audio ads on play.spotify.com, while they are still being played, so *everyone* is happy.

Versión del día 15/06/2015. Echa un vistazo a la versión más reciente.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name          Swyter Tweaks for Spotify
// @description   Mutes the audio ads on play.spotify.com, while they are still being played, so *everyone* is happy.
// @homepage      https://swyterzone.appspot.com
// @namespace     https://greatest.deepsurf.us/users/4813
// @match         https://play.spotify.com/*
// @grant         none
// @run-at        document-end
// @version       2015.06.15
// @author        Swyter
// @icon          https://i.imgur.com/LHkCkka.png
// ==/UserScript==

if (window.parent !== window)
  throw 'stop execution';

function when_external_loaded()
{

  // Bruteforce our way to get the instance reference, nice spaguetti code, JS at its finest!
  // F*ck you Firefox, I'm elegant!— Said the angry programmer with the hair-raising voice of a stud.
  var _core = Spotify.Instances.get(
    (document.querySelector("object[id*='SPFBIn_']")||{id:"firefoxsux69"}).id.match(/.+\d+/)
  );

  if (typeof _core === 'undefined')
  {
    // Wait in cycles of 100 ms until the client finally loads
    setTimeout(arguments.callee, 100);
  }
  
  else
  {
    // Here's the real meat...
    console.log("Binding Swyter Tweaks for Spotify on the player's code.");

    _core.audioManager.bind('PLAYING', function(e)
    {
        var isAd = document.getElementById("app-player").contentDocument.getElementById("shuffle").classList.contains('disabled');

        if (isAd)
        {
            console.log("We're loading an ad, skipping “"+ document.title.match(/^▶?\s?(.+) -/)[1] +"”");

            var timestamp = document.getElementById('app-player').contentDocument.getElementById('track-length').innerHTML.split(':');
                timestamp = timestamp[0]*60 + timestamp[1]*1;
                timestamp*= 1000;

            _core.audioManager.getActivePlayer().seek(
                _core.audioManager.getActivePlayer().getDuration() || timestamp
            );
        }
    });

  }
}

// Ugly as hell so it stays crossplatform, damn you Spotify engineers for a nicely done work! :-)
document.head.appendChild(
  inject_fn = document.createElement('script')
);

inject_fn.innerHTML = '(' + when_external_loaded.toString() + ')()';