Skip to content

Commit 1fc57d5

Browse files
committed
2017.8.1
1 parent d3f136a commit 1fc57d5

File tree

4 files changed

+360
-139
lines changed

4 files changed

+360
-139
lines changed

DIU.meta.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// ==UserScript==
22
// @name Digitally Imported Userscript
33
// @namespace LTKDIFMU
4-
// @version 2017.8.0
4+
// @version 2017.8.1
55
// @author LethaK Maas
66
// @description Removes afk popup and minimize ads if possible
77
// @include http://www.di.fm*
@@ -12,4 +12,5 @@
1212
// @updateURL https://github.com/lethak/digitally_imported_userscript/raw/master/DIU.meta.js
1313
// @icon http://i.imgur.com/7yj2PGY.png
1414
// @grant none
15+
// @run-at document-start
1516
// ==/UserScript==

DIU.user.js

Lines changed: 123 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// ==UserScript==
22
// @name Digitally Imported Userscript
33
// @namespace LTKDIFMU
4-
// @version 2017.8.0
4+
// @version 2017.8.1
55
// @author LethaK Maas
66
// @description Removes afk popup and minimize ads if possible
77
// @include http://www.di.fm*
@@ -12,14 +12,11 @@
1212
// @updateURL https://github.com/lethak/digitally_imported_userscript/raw/master/DIU.meta.js
1313
// @icon http://i.imgur.com/7yj2PGY.png
1414
// @grant none
15+
// @run-at document-start
1516
// ==/UserScript==
1617
(function(){
17-
1818
console.warn('[DIUserscript] Initializing');
1919

20-
window.trackCandidate = null;
21-
22-
2320
var defineProp = function(obj, propName, propValue){
2421
delete obj[propName];
2522
Object.defineProperty(obj, propName, {
@@ -31,136 +28,135 @@
3128
return obj;
3229
};
3330

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');
3833

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+
});
4739

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+
};
6845

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);
8154
}
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+
};
9756

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+
});
103120
}
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+
}
154125

155-
//jQuery(document).on('add-new', function(e, d){
156-
// console.warn('[DIUserscript] on add-new (nope)', e, d);
157-
//});
126+
};
158127

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);
163160
});
164161

165-
166162
})();

README.md

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@ userscript aimed to minimize and block ads
55

66
## Features
77

8-
* Removes "premium" ad popup
9-
* Removes "premium" ad section on all pages
10-
* Prevents **some** ads to reach your ears by bypassing them
11-
* Auto mute when an ad is playing, auto unmute when finished
12-
* Breaks the anti-AFK system, so you can let the music run for hours without any human interaction
13-
8+
* Prevents **almost all** ads to reach your ears by bypassing them.
9+
* Removes some over-intrusive "premium" ad menu entry, popup and panel on all pages.
10+
* Breaks the anti-AFK system, so you can let the music run for hours without any human interaction.
11+
* Breaks the anti-adblocker system.
12+
* Auto mute whenever an ad is playing, auto unmute when finished (just in case !).
1413

1514
## Installation
1615

@@ -23,8 +22,3 @@ Userscript: https://github.com/lethak/digitally_imported_userscript/raw/master/D
2322
Let me know via the "issue" section of this repository, or submit a pull request if you know how to fix the script.
2423

2524
If you can afford it, please consider [becoming premium](https://www.di.fm/premium). You will get access to DI in high quality and can listen from VLC or other players.
26-
27-
28-
## Looking for maintainers
29-
30-
I am not listening to DI as often as I used to, please let me know if you want to be involved with this repo

0 commit comments

Comments
 (0)