mirror of
https://github.com/pixeltris/TwitchAdSolutions.git
synced 2025-04-29 14:14:36 +02:00
Reduce number of requests and improve ad banner
This commit is contained in:
parent
ac645eaa17
commit
8e87d53987
@ -41,6 +41,8 @@
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -147,10 +149,13 @@
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -429,7 +434,7 @@
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -474,10 +479,12 @@
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -485,6 +492,7 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -496,10 +504,12 @@
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -32,6 +32,8 @@ twitch-videoad.js application/javascript
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -138,10 +140,13 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -420,7 +425,7 @@ twitch-videoad.js application/javascript
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -465,10 +470,12 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -476,6 +483,7 @@ twitch-videoad.js application/javascript
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -487,10 +495,12 @@ twitch-videoad.js application/javascript
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -41,6 +41,8 @@
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -147,10 +149,13 @@
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -429,7 +434,7 @@
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -474,10 +479,12 @@
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -485,6 +492,7 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -496,10 +504,12 @@
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -32,6 +32,8 @@ twitch-videoad.js application/javascript
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -138,10 +140,13 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -420,7 +425,7 @@ twitch-videoad.js application/javascript
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -465,10 +470,12 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -476,6 +483,7 @@ twitch-videoad.js application/javascript
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -487,10 +495,12 @@ twitch-videoad.js application/javascript
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -41,6 +41,8 @@
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -147,10 +149,13 @@
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -429,7 +434,7 @@
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -474,10 +479,12 @@
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -485,6 +492,7 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -496,10 +504,12 @@
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -32,6 +32,8 @@ twitch-videoad.js application/javascript
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -138,10 +140,13 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -420,7 +425,7 @@ twitch-videoad.js application/javascript
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -465,10 +470,12 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -476,6 +483,7 @@ twitch-videoad.js application/javascript
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -487,10 +495,12 @@ twitch-videoad.js application/javascript
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -41,6 +41,8 @@
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -147,10 +149,13 @@
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -429,7 +434,7 @@
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -474,10 +479,12 @@
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -485,6 +492,7 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -496,10 +504,12 @@
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -32,6 +32,8 @@ twitch-videoad.js application/javascript
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -138,10 +140,13 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -420,7 +425,7 @@ twitch-videoad.js application/javascript
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -465,10 +470,12 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -476,6 +483,7 @@ twitch-videoad.js application/javascript
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -487,10 +495,12 @@ twitch-videoad.js application/javascript
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -41,6 +41,8 @@
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -147,10 +149,13 @@
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -429,7 +434,7 @@
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -474,10 +479,12 @@
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -485,6 +492,7 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -496,10 +504,12 @@
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -32,6 +32,8 @@ twitch-videoad.js application/javascript
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -138,10 +140,13 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -420,7 +425,7 @@ twitch-videoad.js application/javascript
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -465,10 +470,12 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -476,6 +483,7 @@ twitch-videoad.js application/javascript
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -487,10 +495,12 @@ twitch-videoad.js application/javascript
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -41,6 +41,8 @@
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -147,10 +149,13 @@
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -429,7 +434,7 @@
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -474,10 +479,12 @@
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -485,6 +492,7 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -496,10 +504,12 @@
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -32,6 +32,8 @@ twitch-videoad.js application/javascript
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -138,10 +140,13 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -420,7 +425,7 @@ twitch-videoad.js application/javascript
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -465,10 +470,12 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -476,6 +483,7 @@ twitch-videoad.js application/javascript
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -487,10 +495,12 @@ twitch-videoad.js application/javascript
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -41,6 +41,8 @@
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -147,10 +149,13 @@
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -429,7 +434,7 @@
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -474,10 +479,12 @@
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -485,6 +492,7 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -496,10 +504,12 @@
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -32,6 +32,8 @@ twitch-videoad.js application/javascript
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -138,10 +140,13 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -420,7 +425,7 @@ twitch-videoad.js application/javascript
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -465,10 +470,12 @@ twitch-videoad.js application/javascript
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -476,6 +483,7 @@ twitch-videoad.js application/javascript
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -487,10 +495,12 @@ twitch-videoad.js application/javascript
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
@ -41,6 +41,8 @@
|
||||
scope.StreamInfos = [];
|
||||
scope.StreamInfosByUrl = [];
|
||||
scope.CurrentChannelNameFromM3U8 = null;
|
||||
scope.LastAdUrl = null;
|
||||
scope.LastAdTime = 0;
|
||||
}
|
||||
declareOptions(window);
|
||||
////////////////////////////////////
|
||||
@ -147,10 +149,13 @@
|
||||
// NOTE: midroll ads are intertwined with live segments, always display the banner on midroll ads
|
||||
if (haveAdTags && (!textStr.includes(LIVE_SIGNIFIER) || textStr.includes('MIDROLL'))) {
|
||||
postMessage({key:'UboShowAdBanner'});
|
||||
} else {
|
||||
} else if ((LastAdUrl && LastAdUrl == url) || LastAdTime < Date.now() - 10000) {
|
||||
postMessage({key:'UboHideAdBanner'});
|
||||
LastAdTime = 0;
|
||||
}
|
||||
if (haveAdTags) {
|
||||
LastAdUrl = url;
|
||||
LastAdTime = Date.now();
|
||||
if (OPT_MODE_NOTIFY_ADS_WATCHED) {
|
||||
console.log('Stripping ads (instead of skipping ads)');
|
||||
}
|
||||
@ -429,7 +434,7 @@
|
||||
var streamM3u8Response = await realFetch(streamM3u8Url);
|
||||
var streamM3u8 = await streamM3u8Response.text();
|
||||
var res = await tryNotifyAdsWatchedM3U8(streamM3u8);
|
||||
if (res) {
|
||||
if (res == 1) {
|
||||
console.log("no ad at req " + i);
|
||||
} else {
|
||||
console.log('ad at req ' + i);
|
||||
@ -474,10 +479,12 @@
|
||||
// NOTE: This code path is untested
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.sig && responseData.token) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.sig, responseData.token) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
@ -485,6 +492,7 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
resolve(response);
|
||||
} else {
|
||||
resolve(response);
|
||||
}
|
||||
@ -496,10 +504,12 @@
|
||||
if (response.status === 200) {
|
||||
for (var i = 0; i < OPT_MODE_NOTIFY_ADS_WATCHED_ATTEMPTS; i++) {
|
||||
var cloned = response.clone();
|
||||
var responseData = await cloned.json();
|
||||
var responseStr = await cloned.text();
|
||||
var responseData = JSON.parse(responseStr);
|
||||
if (responseData && responseData.data && responseData.data.streamPlaybackAccessToken && responseData.data.streamPlaybackAccessToken.value && responseData.data.streamPlaybackAccessToken.signature) {
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) > 0) {
|
||||
break;
|
||||
if (await tryNotifyAdsWatchedSigTok(realFetch, i, responseData.data.streamPlaybackAccessToken.signature, responseData.data.streamPlaybackAccessToken.value) == 1) {
|
||||
resolve(new Response(responseStr));
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.log('malformed');
|
||||
|
Loading…
x
Reference in New Issue
Block a user