diff --git a/base/base.user.js b/base/base.user.js index 53477f4..5a8dbf0 100644 --- a/base/base.user.js +++ b/base/base.user.js @@ -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'); diff --git a/dyn-skip-midroll-alt/dyn-skip-midroll-alt-ublock-origin.js b/dyn-skip-midroll-alt/dyn-skip-midroll-alt-ublock-origin.js index 7f20318..ee12a5d 100644 --- a/dyn-skip-midroll-alt/dyn-skip-midroll-alt-ublock-origin.js +++ b/dyn-skip-midroll-alt/dyn-skip-midroll-alt-ublock-origin.js @@ -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'); diff --git a/dyn-skip-midroll-alt/dyn-skip-midroll-alt.user.js b/dyn-skip-midroll-alt/dyn-skip-midroll-alt.user.js index 67af5ca..87afdf4 100644 --- a/dyn-skip-midroll-alt/dyn-skip-midroll-alt.user.js +++ b/dyn-skip-midroll-alt/dyn-skip-midroll-alt.user.js @@ -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'); diff --git a/dyn-skip-midroll/dyn-skip-midroll-ublock-origin.js b/dyn-skip-midroll/dyn-skip-midroll-ublock-origin.js index 3e58cec..8e3df87 100644 --- a/dyn-skip-midroll/dyn-skip-midroll-ublock-origin.js +++ b/dyn-skip-midroll/dyn-skip-midroll-ublock-origin.js @@ -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'); diff --git a/dyn-skip-midroll/dyn-skip-midroll.user.js b/dyn-skip-midroll/dyn-skip-midroll.user.js index cd7c76a..2a13510 100644 --- a/dyn-skip-midroll/dyn-skip-midroll.user.js +++ b/dyn-skip-midroll/dyn-skip-midroll.user.js @@ -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'); diff --git a/dyn-skip/dyn-skip-ublock-origin.js b/dyn-skip/dyn-skip-ublock-origin.js index 14d1dca..3ae445e 100644 --- a/dyn-skip/dyn-skip-ublock-origin.js +++ b/dyn-skip/dyn-skip-ublock-origin.js @@ -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'); diff --git a/dyn-skip/dyn-skip.user.js b/dyn-skip/dyn-skip.user.js index 703a248..d86dc39 100644 --- a/dyn-skip/dyn-skip.user.js +++ b/dyn-skip/dyn-skip.user.js @@ -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'); diff --git a/dyn-video-swap/dyn-video-swap-ublock-origin.js b/dyn-video-swap/dyn-video-swap-ublock-origin.js index 8989c29..97382c7 100644 --- a/dyn-video-swap/dyn-video-swap-ublock-origin.js +++ b/dyn-video-swap/dyn-video-swap-ublock-origin.js @@ -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'); diff --git a/dyn-video-swap/dyn-video-swap.user.js b/dyn-video-swap/dyn-video-swap.user.js index 2e69c9f..46f8423 100644 --- a/dyn-video-swap/dyn-video-swap.user.js +++ b/dyn-video-swap/dyn-video-swap.user.js @@ -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'); diff --git a/dyn/dyn-ublock-origin.js b/dyn/dyn-ublock-origin.js index e46667c..6d1a2e5 100644 --- a/dyn/dyn-ublock-origin.js +++ b/dyn/dyn-ublock-origin.js @@ -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'); diff --git a/dyn/dyn.user.js b/dyn/dyn.user.js index 9d21378..c71e64d 100644 --- a/dyn/dyn.user.js +++ b/dyn/dyn.user.js @@ -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'); diff --git a/mute-black/mute-black-ublock-origin.js b/mute-black/mute-black-ublock-origin.js index 3f47fec..1e15579 100644 --- a/mute-black/mute-black-ublock-origin.js +++ b/mute-black/mute-black-ublock-origin.js @@ -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'); diff --git a/mute-black/mute-black.user.js b/mute-black/mute-black.user.js index 11e3599..be48e12 100644 --- a/mute-black/mute-black.user.js +++ b/mute-black/mute-black.user.js @@ -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'); diff --git a/proxy-m3u8/proxy-m3u8-ublock-origin.js b/proxy-m3u8/proxy-m3u8-ublock-origin.js index 285828d..de2dcdf 100644 --- a/proxy-m3u8/proxy-m3u8-ublock-origin.js +++ b/proxy-m3u8/proxy-m3u8-ublock-origin.js @@ -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'); diff --git a/proxy-m3u8/proxy-m3u8.user.js b/proxy-m3u8/proxy-m3u8.user.js index f06c194..d3c9b6a 100644 --- a/proxy-m3u8/proxy-m3u8.user.js +++ b/proxy-m3u8/proxy-m3u8.user.js @@ -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');