@@ -155,6 +155,9 @@ let isAdPlaying = false;
155155let lastResponseStatus : number ;
156156let retryCount = 0 ;
157157
158+ // flips between true/false on server request failure
159+ let fallbackServer = false ;
160+
158161// Contains all of the functions and variables needed by the skip notice
159162const skipNoticeContentContainer : ContentContainer = ( ) => ( {
160163 vote,
@@ -1008,9 +1011,8 @@ async function sponsorsLookup(keepOldSubmissions = true) {
10081011 const extraRequestData : Record < string , unknown > = { } ;
10091012 const hashParams = getHashParams ( ) ;
10101013 if ( hashParams . requiredSegment ) extraRequestData . requiredSegment = hashParams . requiredSegment ;
1011-
10121014 const hashPrefix = ( await utils . getHash ( sponsorVideoID , 1 ) ) . slice ( 0 , 4 ) as VideoID & HashedValue ;
1013- const response = await utils . asyncRequestToServer ( 'GET' , "/api/skipSegments/" + hashPrefix , {
1015+ const response = await utils . asyncRequestToServer ( 'GET' , "/api/skipSegments/" + hashPrefix , fallbackServer , {
10141016 categories,
10151017 actionTypes : getEnabledActionTypes ( showChapterMessage ) ,
10161018 userAgent : `${ chrome . runtime . id } ` ,
@@ -1019,7 +1021,6 @@ async function sponsorsLookup(keepOldSubmissions = true) {
10191021
10201022 // store last response status
10211023 lastResponseStatus = response ?. status ;
1022-
10231024 if ( response ?. ok ) {
10241025 let recievedSegments : SponsorTime [ ] = JSON . parse ( response . responseText )
10251026 ?. filter ( ( video ) => video . videoID === sponsorVideoID )
@@ -1170,7 +1171,7 @@ function getEnabledActionTypes(forceFullVideo = false): ActionType[] {
11701171
11711172async function lockedCategoriesLookup ( ) : Promise < void > {
11721173 const hashPrefix = ( await utils . getHash ( sponsorVideoID , 1 ) ) . slice ( 0 , 4 ) ;
1173- const response = await utils . asyncRequestToServer ( "GET" , "/api/lockCategories/" + hashPrefix ) ;
1174+ const response = await utils . asyncRequestToServer ( "GET" , "/api/lockCategories/" + hashPrefix , fallbackServer ) ;
11741175
11751176 if ( response . ok ) {
11761177 try {
@@ -1192,9 +1193,16 @@ function retryFetch(errorCode: number): void {
11921193 return ;
11931194 }
11941195
1196+ fallbackServer = retryCount % 2 === 0
11951197 retryCount ++ ;
1196-
1197- const delay = errorCode === 404 ? ( 30000 + Math . random ( ) * 30000 ) : ( 2000 + Math . random ( ) * 10000 ) ;
1198+ let delay : number ;
1199+ switch ( errorCode ) {
1200+ case 404 :
1201+ delay = ( 30000 + Math . random ( ) * 30000 ) ;
1202+ break ;
1203+ default :
1204+ delay = retryCount <= 2 ? 0 : ( 2000 + Math . random ( ) * 10000 ) ;
1205+ }
11981206 retryFetchTimeout = setTimeout ( ( ) => {
11991207 if ( sponsorVideoID && sponsorTimes ?. length === 0
12001208 || sponsorTimes . every ( ( segment ) => segment . source !== SponsorSourceType . Server ) ) {
@@ -1630,7 +1638,7 @@ function sendTelemetryAndCount(skippingSegments: SponsorTime[], secondsSkipped:
16301638 counted = true ;
16311639 }
16321640
1633- if ( fullSkip ) utils . asyncRequestToServer ( "POST" , "/api/viewedVideoSponsorTime?UUID=" + segment . UUID ) ;
1641+ if ( fullSkip ) utils . asyncRequestToServer ( "POST" , "/api/viewedVideoSponsorTime?UUID=" + segment . UUID , false ) ;
16341642 }
16351643 }
16361644}
@@ -2236,7 +2244,7 @@ async function sendSubmitMessage() {
22362244 }
22372245 }
22382246
2239- const response = await utils . asyncRequestToServer ( "POST" , "/api/skipSegments" , {
2247+ const response = await utils . asyncRequestToServer ( "POST" , "/api/skipSegments" , false , {
22402248 videoID : sponsorVideoID ,
22412249 userID : Config . config . userID ,
22422250 segments : sponsorTimesSubmitting ,
0 commit comments