From 286bc0113e51bffd442a7ad326a79f4895b0e629 Mon Sep 17 00:00:00 2001 From: Araxeus <78568641+Araxeus@users.noreply.github.com> Date: Sat, 30 Oct 2021 12:43:51 +0300 Subject: [PATCH] fix sponsorblock plugin --- plugins/disable-autoplay/front.js | 2 +- plugins/sponsorblock/back.js | 15 ++++++++++++++- plugins/sponsorblock/front.js | 28 ++++++++++++++-------------- providers/video-element.js | 22 ---------------------- 4 files changed, 29 insertions(+), 38 deletions(-) delete mode 100644 providers/video-element.js diff --git a/plugins/disable-autoplay/front.js b/plugins/disable-autoplay/front.js index 70a9b867..c532d0db 100644 --- a/plugins/disable-autoplay/front.js +++ b/plugins/disable-autoplay/front.js @@ -1,5 +1,5 @@ module.exports = () => { - document.addEventListener('apiLoaded', e => { + document.addEventListener('apiLoaded', () => { document.querySelector('video').addEventListener('loadeddata', e => { e.target.pause(); }) diff --git a/plugins/sponsorblock/back.js b/plugins/sponsorblock/back.js index 3c7eb5b4..775b1c0a 100644 --- a/plugins/sponsorblock/back.js +++ b/plugins/sponsorblock/back.js @@ -1,4 +1,12 @@ const fetch = require("node-fetch"); +const is = require("electron-is"); + +// see https://github.com/node-fetch/node-fetch/issues/568#issuecomment-932200523 +// will not be needed if project's electron version >= v15.1.0 (https://github.com/node-fetch/node-fetch/issues/568#issuecomment-932435180) +const https = require("https"); +const agent = new https.Agent({ + rejectUnauthorized: false, +}); const defaultConfig = require("../../config/defaults"); const registerCallback = require("../../providers/song-info"); @@ -24,6 +32,7 @@ module.exports = (win, options) => { }); }; + const fetchSegments = async (apiURL, categories) => { const sponsorBlockURL = `${apiURL}/api/skipSegments?videoID=${videoID}&categories=${JSON.stringify( categories @@ -35,6 +44,7 @@ const fetchSegments = async (apiURL, categories) => { "Content-Type": "application/json", }, redirect: "follow", + agent // fixes error: 'CERT_HAS_EXPIRED' }); if (resp.status !== 200) { return []; @@ -45,7 +55,10 @@ const fetchSegments = async (apiURL, categories) => { ); return sortedSegments; - } catch { + } catch (e) { + if (is.dev()) { + console.log('error on sponsorblock request:', e); + } return []; } }; diff --git a/plugins/sponsorblock/front.js b/plugins/sponsorblock/front.js index 4f248bfa..7ae2aa43 100644 --- a/plugins/sponsorblock/front.js +++ b/plugins/sponsorblock/front.js @@ -2,8 +2,6 @@ const { ipcRenderer } = require("electron"); const is = require("electron-is"); -const { ontimeupdate } = require("../../providers/video-element"); - let currentSegments = []; module.exports = () => { @@ -11,17 +9,19 @@ module.exports = () => { currentSegments = segments; }); - ontimeupdate((videoElement) => { - currentSegments.forEach((segment) => { - if ( - videoElement.currentTime >= segment[0] && - videoElement.currentTime <= segment[1] - ) { - videoElement.currentTime = segment[1]; - if (is.dev()) { - console.log("SponsorBlock: skipping segment", segment); + document.addEventListener('apiLoaded', () => { + document.querySelector('video').addEventListener('timeupdate', e => { + currentSegments.forEach((segment) => { + if ( + e.target.currentTime >= segment[0] && + e.target.currentTime <= segment[1] + ) { + e.target.currentTime = segment[1]; + if (is.dev()) { + console.log("SponsorBlock: skipping segment", segment); + } } - } - }); - }); + }); + }) + }, { once: true, passive: true}) }; diff --git a/providers/video-element.js b/providers/video-element.js deleted file mode 100644 index 7be61c89..00000000 --- a/providers/video-element.js +++ /dev/null @@ -1,22 +0,0 @@ -let videoElement = null; - -module.exports.ontimeupdate = (cb) => { - const observer = new MutationObserver((mutations, observer) => { - if (!videoElement) { - videoElement = document.querySelector("video"); - if (videoElement) { - observer.disconnect(); - videoElement.ontimeupdate = () => cb(videoElement); - } - } - }); - - if (!videoElement) { - observer.observe(document, { - childList: true, - subtree: true, - }); - } else { - videoElement.ontimeupdate = () => cb(videoElement); - } -};