|
1 | 1 | // ==UserScript== |
2 | 2 | // @name Digitally Imported Userscript |
3 | 3 | // @namespace LTKDIFMU |
4 | | -// @version 2017.8.0 |
| 4 | +// @version 2017.8.1 |
5 | 5 | // @author LethaK Maas |
6 | 6 | // @description Removes afk popup and minimize ads if possible |
7 | 7 | // @include http://www.di.fm* |
|
12 | 12 | // @updateURL https://github.com/lethak/digitally_imported_userscript/raw/master/DIU.meta.js |
13 | 13 | // @icon http://i.imgur.com/7yj2PGY.png |
14 | 14 | // @grant none |
| 15 | +// @run-at document-start |
15 | 16 | // ==/UserScript== |
16 | 17 | (function(){ |
17 | | - |
18 | 18 | console.warn('[DIUserscript] Initializing'); |
19 | 19 |
|
20 | | - window.trackCandidate = null; |
21 | | - |
22 | | - |
23 | 20 | var defineProp = function(obj, propName, propValue){ |
24 | 21 | delete obj[propName]; |
25 | 22 | Object.defineProperty(obj, propName, { |
|
31 | 28 | return obj; |
32 | 29 | }; |
33 | 30 |
|
34 | | - var WebplayerApp = di.app.module("WebplayerApp"); |
35 | | - |
36 | | - // Ads Adblocks... |
37 | | - defineProp(WebplayerApp.Ads.Adblocks, 'logger', new di.log.Console("(DIUserscript) WebplayerApp.Ads.Adblocks ")); |
| 31 | + var adSilencer = function(){ |
| 32 | + console.warn('[DIUserscript] adSilencer'); |
38 | 33 |
|
39 | | - defineProp(WebplayerApp.Ads.Adblocks, 'adHasVisual', function(){ |
40 | | - console.warn('[DIUserscript] Ads.Adblocks.adHasVisual: false'); |
41 | | - return false; // Prevents the player popup from displaying during 'Sponsored Message' ad |
42 | | - }); |
43 | | - |
44 | | - // Ads Supervisor... |
45 | | - NS('di.app.WebplayerApp.Ads.Supervisor'); |
46 | | - defineProp(di.app.WebplayerApp.Ads.Supervisor, 'logger', new di.log.Console("(DIUserscript) WebplayerApp.Ads.Supervisor ")); |
| 34 | + // Silence ads whenever they get played ... (should not be happening, but we never know, the rascals ;) |
| 35 | + di.app.vent.on('webplayer:ad:begin', function(t) { |
| 36 | + console.warn('[DIUserscript] webplayer:ad:begin (mute)', t); |
| 37 | + di.app.commands.execute('webplayer:mute'); |
| 38 | + }); |
47 | 39 |
|
48 | | - defineProp(di.app.WebplayerApp.Ads.Supervisor, 'selectAds_', function(e){ |
49 | | - console.warn('[DIUserscript] Ads.Supervisor.selectAds_: []', this); |
50 | | - return []; |
51 | | - }); |
52 | | - defineProp(di.app.WebplayerApp.Ads.Supervisor, 'requestAd', function(e){ |
53 | | - console.warn('[DIUserscript] Ads.Supervisor.requestAd: false'); |
54 | | - return jQuery.Deferred().reject().promise(); |
55 | | - }); |
56 | | - defineProp(di.app.WebplayerApp.Ads.Supervisor, 'eligibleForPreroll', function(){ |
57 | | - console.warn('[DIUserscript] Ads.Supervisor.eligibleForPreroll: false'); |
58 | | - return false; |
59 | | - }); |
60 | | - defineProp(di.app.WebplayerApp.Ads.Supervisor, 'eligibleForMidroll', function(){ |
61 | | - console.warn('[DIUserscript] Ads.Supervisor.eligibleForMidroll: false'); |
62 | | - return false; |
63 | | - }); |
64 | | - defineProp(di.app.WebplayerApp.Ads.Supervisor, 'startAd', function(){ |
65 | | - console.warn('[DIUserscript] Ads.Supervisor.startAd: void 0'); |
66 | | - return jQuery.Deferred().reject().promise(); |
67 | | - }); |
| 40 | + di.app.vent.on('webplayer:ad:end', function(t) { |
| 41 | + console.warn('[DIUserscript] webplayer:ad:end (unmute)', t); |
| 42 | + di.app.commands.execute('webplayer:unmute'); |
| 43 | + }); |
| 44 | + }; |
68 | 45 |
|
69 | | - // AdManagers ! |
70 | | - /* |
71 | | - (AudioAddict.WP.wp.adManager) instanceof (window.AdManager) // true |
72 | | - (AudioAddict.WP.AdManager) instanceof (window.AdManager) // false, object |
73 | | - (AudioAddict.WP.wp.adManager) // object |
74 | | - */ |
75 | | - |
76 | | - // Silence ads whenever they get played ... |
77 | | - jQuery(document).off("ad-begin.diu").on("ad-begin.diu", function(e, x){ |
78 | | - console.warn('[DIUserscript] Ad begin (muting)', e, x); |
79 | | - if(trackCandidate!==null){ |
80 | | - //AudioAddict.WP.wp.adapter.load(trackCandidate); |
| 46 | + var redefineTimers = function(){ |
| 47 | + console.warn('[DIUserscript] redefineTimers'); |
| 48 | + try{ |
| 49 | + di.app.WebplayerApp.Ads.Supervisor.timers.gracePeriod.getTimeRemaining = function() { return 1337; }; |
| 50 | + di.app.WebplayerApp.Ads.Supervisor.timers.midroll.getTimeRemaining = function() { return 1337; }; |
| 51 | + di.app.WebplayerApp.Ads.Supervisor.timers.session.getTimeRemaining = function() { return 1337; }; |
| 52 | + } catch(err) { |
| 53 | + console.error('[DIUserscript] redefineTimers error', err.message); |
81 | 54 | } |
82 | | - AudioAddict.WP.wp.tempMute(); |
83 | | - }); |
84 | | - jQuery(document).off("ad-end.diu").on("ad-end.diu", function(e, x){ |
85 | | - console.warn('[DIUserscript] Ad end (unmuting)', e, x); |
86 | | - AudioAddict.WP.wp.tempUnMute(); |
87 | | - }); |
88 | | - |
89 | | - // WebPlayer... |
90 | | - |
91 | | - /* |
92 | | - (AudioAddict.WP.wp) instanceof (AudioAddict.WP.WebPlayer) //true |
93 | | - (AudioAddict.WP.wp.channel) instanceof (window.Channel) // true |
94 | | - */ |
95 | | - |
96 | | - NS('AudioAddict.WP.WebPlayer').prototype.logger = new di.log.Console("(DIUserscript) AudioAddict.WP.WebPlayer"); |
| 55 | + }; |
97 | 56 |
|
98 | | - // Member... |
99 | | - defineProp(window, 'Member', function(e) { |
100 | | - if (this.getAccess = function() { |
101 | | - console.warn('[DIUserscript] Member getAccess (premium) instead of ', n); |
102 | | - return 'premium'; |
| 57 | + var redefineReqres = function(){ |
| 58 | + console.warn('[DIUserscript] redefineReqres'); |
| 59 | + |
| 60 | + try { |
| 61 | + |
| 62 | + NS('di.app.reqres._wreqrHandlers'); |
| 63 | + |
| 64 | + // Rejecting ad request |
| 65 | + defineProp(di.app.reqres._wreqrHandlers['webplayer:ads:requestAd'], 'callback', function () { |
| 66 | + console.warn('[DIUserscript] webplayer:ads:requestAd', 'rejected'); |
| 67 | + return jQuery.Deferred().reject().promise(); |
| 68 | + }); |
| 69 | + |
| 70 | + // Should we show midroll ads ? Nope, no thanks. |
| 71 | + defineProp(di.app.reqres._wreqrHandlers['webplayer:ads:shouldShowMidroll'], 'callback', function () { |
| 72 | + console.warn('[DIUserscript] webplayer:ads:shouldShowMidroll', false); |
| 73 | + return false; |
| 74 | + }); |
| 75 | + |
| 76 | + // Rejecting midroll ad request |
| 77 | + defineProp(di.app.reqres._wreqrHandlers['webplayer:ads:requestMidrollAd'], 'callback', function () { |
| 78 | + console.warn('[DIUserscript] webplayer:ads:requestMidrollAd', 'rejected'); |
| 79 | + return jQuery.Deferred().reject().promise(); |
| 80 | + }); |
| 81 | + |
| 82 | + // Should we show preroll ads ? Nope, no thanks. |
| 83 | + defineProp(di.app.reqres._wreqrHandlers['webplayer:ads:shouldShowPreroll'], 'callback', function () { |
| 84 | + console.warn('[DIUserscript] webplayer:ads:shouldShowPreroll', false); |
| 85 | + return false; |
| 86 | + }); |
| 87 | + |
| 88 | + // Rejecting preroll ad request |
| 89 | + defineProp(di.app.reqres._wreqrHandlers['webplayer:ads:requestPrerollAd'], 'callback', function () { |
| 90 | + console.warn('[DIUserscript] webplayer:ads:requestPrerollAd', 'rejected'); |
| 91 | + return jQuery.Deferred().reject().promise(); |
| 92 | + }); |
| 93 | + |
| 94 | + // Anti Adblocker ? kill this with fire ! (mostly impacting free unregistered users) |
| 95 | + defineProp(di.app.reqres._wreqrHandlers['adblocker:detected'], 'callback', function () { |
| 96 | + console.warn('[DIUserscript] adblocker:detected', false); |
| 97 | + return false; |
| 98 | + }); |
| 99 | + |
| 100 | + // Make Adblocker Great Again |
| 101 | + defineProp(di.app.reqres._wreqrHandlers['adblocker:isWallEnforced'], 'callback', function () { |
| 102 | + console.warn('[DIUserscript] adblocker:isWallEnforced', false); |
| 103 | + return false; |
| 104 | + }); |
| 105 | + |
| 106 | + var userType = di.app.reqres.request('current_user:type'); // guest|public|premium |
| 107 | + if (userType === 'public') { |
| 108 | + |
| 109 | + // Always judging people ... |
| 110 | + defineProp(di.app.reqres._wreqrHandlers['current_user:isPremium'], 'callback', function () { |
| 111 | + console.warn('[DIUserscript] current_user:isPremium', true); |
| 112 | + return true; |
| 113 | + }); |
| 114 | + |
| 115 | + // Lets pretend |
| 116 | + defineProp(di.app.reqres._wreqrHandlers['current_user:type'], 'callback', function () { |
| 117 | + console.warn('[DIUserscript] current_user:type', 'premium'); |
| 118 | + return 'premium'; |
| 119 | + }); |
103 | 120 | } |
104 | | - , |
105 | | - this.setAccess = function(e) { |
106 | | - e != n && (n = e, |
107 | | - $(document).trigger("member-access", 'premium')); |
108 | | - } |
109 | | - , |
110 | | - this.getListenKey = function() { |
111 | | - return i; |
112 | | - } |
113 | | - , |
114 | | - this.setListenKey = function(e) { |
115 | | - e != i && (i = e ? e : "", |
116 | | - $(document).trigger("member-listenkey", e)); |
117 | | - } |
118 | | - , |
119 | | - this.getSpeed = function() { |
120 | | - var e = t.wp.streamlist.getSpeeds(t.wp.member.getAccess(), "webplayer"); |
121 | | - return e[r] && "object" == typeof e[r] ? r : ($.log(LogPrefix() + "(DIUserscript) AudioAddict.WP.Member: Current speed {" + r + "} is invalid; defaulting to first available {" + Object.keys(e)[0] + "}"), |
122 | | - r = Object.keys(e)[0]); |
123 | | - } |
124 | | - , |
125 | | - "undefined" == typeof e) |
126 | | - throw "(DIUserscript) AudioAddict.WP.Member: FATAL: No parameters provided"; |
127 | | - if ("premium" == e.access && !e.listenKey) |
128 | | - throw "(DIUserscript) AudioAddict.WP.Member: FATAL: listenKey is required for Premium users"; |
129 | | - var t = NS("AudioAddict.WP") |
130 | | - , n = "premium"/*e.access*/ |
131 | | - , i = e.listenKey ? e.listenKey : "" |
132 | | - , r = e.speed; |
133 | | - $.log(LogPrefix() + "(DIUserscript) AudioAddict.WP.Member: Initialized"); |
134 | | - }); |
135 | | - |
136 | | - |
137 | | - setInterval(function(){ |
138 | | - // Removing Premium ad display |
139 | | - jQuery('.premium-upsell').remove(); |
140 | | - jQuery('.menu-item.go-premium').remove(); |
141 | | - jQuery('.sidebar-ad-component').remove(); |
142 | | - |
143 | | - // Breaking anti AFK system |
144 | | - di.eventbus.trigger('user:active'); |
145 | | - di.app.timedAlerts.stop(); |
146 | | - jQuery('.modal-btn.continue').click(); |
147 | | - jQuery('.modal-btn.countdown-btn').click(); |
148 | | - }, 1000); |
149 | | - |
150 | | - |
151 | | - |
152 | | - // R&D |
153 | | - //jQuery('#player').get(0)._stop(); |
| 121 | + } |
| 122 | + catch(err) { |
| 123 | + console.error('[DIUserscript] redefineReqres error', err.message); |
| 124 | + } |
154 | 125 |
|
155 | | - //jQuery(document).on('add-new', function(e, d){ |
156 | | - // console.warn('[DIUserscript] on add-new (nope)', e, d); |
157 | | - //}); |
| 126 | + }; |
158 | 127 |
|
159 | | - // Trying to bypass audio ads |
160 | | - jQuery(document).off("metadata-load.diu").on("metadata-load.diu", function(e,d){ |
161 | | - console.warn('[DIUserscript] metadata-load.diu trackCandidate', e, d); |
162 | | - trackCandidate = d; |
| 128 | + // jQuery(window.document).ready(function() { |
| 129 | + document.addEventListener("DOMContentLoaded", function(event) { |
| 130 | + console.warn('[DIUserscript] window.document ready'); |
| 131 | + |
| 132 | + redefineReqres(); |
| 133 | + redefineTimers(); |
| 134 | + adSilencer(); |
| 135 | + |
| 136 | + setTimeout(function(){ |
| 137 | + // // Improved webplayer quality (3 = High) (disabled, Free Listeners can change it via their account settings) |
| 138 | + // console.warn('[DIUserscript] preferredQuality:set', 3); |
| 139 | + // di.app.commands.execute('preferredQuality:set', 3); |
| 140 | + // setTimeout(function(){ |
| 141 | + // var audioQuality = di.app.reqres.request('audioQualities:selected').attributes; |
| 142 | + // di.app.commands.execute('message:success', 'Webplayer audio quality is now: '+audioQuality.name+' '+audioQuality.content_quality.name+' '+audioQuality.content_format.name); |
| 143 | + // }, 2000); |
| 144 | + |
| 145 | + di.app.commands.execute('message:notice', 'DIUserscript is enabled ! enjoy free uninterrupted music'); |
| 146 | + }, 2000); |
| 147 | + |
| 148 | + setInterval(function(){ |
| 149 | + // Removing Premium ad display |
| 150 | + jQuery('.premium-upsell').remove(); |
| 151 | + jQuery('.menu-item.go-premium').remove(); |
| 152 | + jQuery('.sidebar-ad-component').remove(); |
| 153 | + jQuery('#panel-ad').remove(); |
| 154 | + |
| 155 | + // Breaking anti AFK system |
| 156 | + try { di.eventbus.trigger('user:active'); } catch(err) { console.error('(DIUserscript) : '+err.message); } |
| 157 | + try { di.app.vent.trigger('user:active'); } catch(err) { console.error('(DIUserscript) : '+err.message); } |
| 158 | + try { di.app.timedAlerts.stop(); } catch(err) { console.error('(DIUserscript) : '+err.message); } |
| 159 | + }, 1000); |
163 | 160 | }); |
164 | 161 |
|
165 | | - |
166 | 162 | })(); |
0 commit comments