// ==UserScript== // @name Di.fm Ad silencer // @namespace http://qmegas.info/difm // @version 3.3 // @description Remove ads on di.fm radio // @include https://*.di.fm/* // @include https://*.classicalradio.com/* // @include https://*.radiotunes.com/* // @include https://*.jazzradio.com/* // @include https://*.rockradio.com/* // @copyright Megas (qmegas.info) // @grant none // // ==/UserScript== (() => { const logger = msg => { const t = new Date(); const timeStr = di.math.pad(t.getHours()) + ":" + di.math.pad(t.getMinutes()) + ":" + di.math.pad(t.getSeconds()) + "." + t.getMilliseconds(); console.log('[' + timeStr + '] Ad silencer - ' + msg); }; const silencer = { method1Silence: () => { di.app.vent.on("webplayer:ad:begin", () => { const muting = () => { if (!di.app.request("webplayer:muted")) { logger('muting try'); di.app.commands.execute("webplayer:mute"); setTimeout(muting, 300); } }; muting(); }); di.app.vent.on("webplayer:ad:end", () => { logger('unmuting'); di.app.commands.execute("webplayer:unmute"); }); }, method2Remover: () => { di.app.reqres.setHandler('webplayer:interruptible', () => { logger('handled interruptible = false'); return false; }); di.app.reqres.setHandler('webplayer:ads:requestMidrollAd', () => { logger('handled requestMidrollAd'); return { fail: e => { logger('requestMidrollAd fail'); e(); }, done: e => false, }; }); }, method3RemoverExperimental: () => di.app.WebplayerApp.Ads.Supervisor.timers.session.stop(), keepActive: () => setInterval(() => di.app.vent.trigger("user:active"), 60000), }; const initVars = () => { if (!di || !di.app || !di.app.vent) { return false; } logger('init'); silencer.method1Silence(); silencer.method2Remover(); silencer.keepActive(); return true; }; const init = () => { if (!initVars()) { setTimeout(init, 1000); } }; $(init()); })();