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