From 6cd672f9e636a907af637a4f0e14647ac11f6a24 Mon Sep 17 00:00:00 2001 From: Joe-Dowd Date: Fri, 24 Apr 2020 18:11:09 +0100 Subject: [PATCH 1/2] allow submissions when duration is parsed as 0 --- src/routes/postSkipSegments.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/routes/postSkipSegments.js b/src/routes/postSkipSegments.js index d8fe2a3..66cc4b0 100644 --- a/src/routes/postSkipSegments.js +++ b/src/routes/postSkipSegments.js @@ -105,9 +105,11 @@ async function autoModerateSubmission(submission, callback) { } else { let duration = data.items[0].contentDetails.duration; duration = isoDurations.toSeconds(isoDurations.parse(duration)); - - // Reject submission if over 80% of the video - if ((submission.endTime - submission.startTime) > (duration/100)*80) { + if (duration === 0) { + // Allow submission if the duration is 0 (bug in youtube api) + return false; + } else if ((submission.endTime - submission.startTime) > (duration/100)*80) { + // Reject submission if over 80% of the video return "Sponsor segment is over 80% of the video."; } else { return false; From fd397de6b4b75e6658489b0919fc38b504cb05b1 Mon Sep 17 00:00:00 2001 From: Joe-Dowd Date: Fri, 24 Apr 2020 18:20:40 +0100 Subject: [PATCH 2/2] allow submission if duration is 0 --- src/routes/postSkipSegments.js | 4 ++-- test/cases/postSkipSegments.js | 10 ++++++++++ test/youtubeMock.js | 25 +++++++++++++++++++++++-- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/routes/postSkipSegments.js b/src/routes/postSkipSegments.js index 66cc4b0..d410568 100644 --- a/src/routes/postSkipSegments.js +++ b/src/routes/postSkipSegments.js @@ -101,11 +101,11 @@ async function autoModerateSubmission(submission, callback) { } else { // Check to see if video exists if (data.pageInfo.totalResults === 0) { - callback("No video exists with id " + submission.videoID); + return "No video exists with id " + submission.videoID; } else { let duration = data.items[0].contentDetails.duration; duration = isoDurations.toSeconds(isoDurations.parse(duration)); - if (duration === 0) { + if (duration == 0) { // Allow submission if the duration is 0 (bug in youtube api) return false; } else if ((submission.endTime - submission.startTime) > (duration/100)*80) { diff --git a/test/cases/postSkipSegments.js b/test/cases/postSkipSegments.js index 05c7374..3f1492f 100644 --- a/test/cases/postSkipSegments.js +++ b/test/cases/postSkipSegments.js @@ -99,6 +99,16 @@ describe('postSkipSegments', () => { else done("non 403 status code: " + res.statusCode + " ("+body+")"); }); }); + + it('Should be allowed if youtube thinks duration is 0', (done) => { + request.get(utils.getbaseURL() + + "/api/postVideoSponsorTimes?videoID=noDuration&startTime=30&endTime=10000&userID=testing", null, + (err, res, body) => { + if (err) done("Couldn't call endpoint"); + else if (res.statusCode === 200) done(); // pass + else done("non 200 status code: " + res.statusCode + " ("+body+")"); + }); + }); it('Should be rejected if not a valid videoID', (done) => { request.get(utils.getbaseURL() diff --git a/test/youtubeMock.js b/test/youtubeMock.js index 0a9998d..dd64898 100644 --- a/test/youtubeMock.js +++ b/test/youtubeMock.js @@ -10,14 +10,35 @@ YouTubeAPI.videos.list({ const YouTubeAPI = { videos: { list: (obj, callback) => { - if (obj.videoID === "knownWrongID") { + if (obj.id === "knownWrongID") { callback(undefined, { pageInfo: { totalResults: 0 }, items: [] }); - } else { + } if (obj.id === "noDuration") { + callback(undefined, { + pageInfo: { + totalResults: 1 + }, + items: [ + { + contentDetails: { + duration: "PT0S" + }, + snippet: { + title: "Example Title", + thumbnails: { + maxres: { + url: "https://sponsor.ajay.app/LogoSponsorBlockSimple256px.png" + } + } + } + } + ] + }); + } else { callback(undefined, { pageInfo: { totalResults: 1