diff --git a/.gitignore b/.gitignore index a98ca8ff..0af10d9b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -content-config.js +config.js ignored \ No newline at end of file diff --git a/config.js b/config.js deleted file mode 100644 index 005793a7..00000000 --- a/config.js +++ /dev/null @@ -1,3 +0,0 @@ -//this file is loaded along iwth content.js -//this file sets the server to connect to, and is gitignored -var serverAddress = "http://localhost"; \ No newline at end of file diff --git a/content.css b/content.css index 6126768a..c4e8e7bf 100644 --- a/content.css +++ b/content.css @@ -1,4 +1,4 @@ -.playerButton { +.playerButtonImage { height: 60%; top: 0; bottom: 0; @@ -6,6 +6,10 @@ margin: auto; } +.playerButton { + vertical-align: top; +} + .sponsorSkipObject { font-family: 'Source Sans Pro', sans-serif; } diff --git a/content.js b/content.js index 1fdccecc..970ab199 100644 --- a/content.js +++ b/content.js @@ -21,6 +21,9 @@ var v; //the last time looked at (used to see if this time is in the interval) var lastTime; +//the last time skipped to +var lastTimeSkippedTo = -1; + //the last time in the video a sponsor was skipped //used for the go back button var lastSponsorTimeSkipped = null; @@ -117,7 +120,6 @@ function videoIDChange(id) { function sponsorsLookup(id) { v = document.querySelector('video') // Youtube video player - let xmlhttp = new XMLHttpRequest(); //check database for sponsor times sendRequestToServer('GET', "/api/getVideoSponsorTimes?videoID=" + id, function(xmlhttp) { @@ -151,28 +153,34 @@ function sponsorsLookup(id) { } function sponsorCheck(sponsorTimes) { // Video skipping - //see if any sponsor start time was just passed - for (let i = 0; i < sponsorTimes.length; i++) { - //the sponsor time is in between these times, skip it - //if the time difference is more than 1 second, than the there was probably a skip in time, - // and it's not due to playback - if (Math.abs(v.currentTime - lastTime) < 1 && sponsorTimes[i][0] >= lastTime && sponsorTimes[i][0] <= v.currentTime) { - //skip it - v.currentTime = sponsorTimes[i][1]; + //see if any sponsor start time was just passed + for (let i = 0; i < sponsorTimes.length; i++) { + //the sponsor time is in between these times, skip it + //if the time difference is more than 1 second, than the there was probably a skip in time, + // and it's not due to playback + //also check if the last time skipped to is not too close to now, to make sure not to get too many + // sponsor times in a row (from one troll) + if (Math.abs(v.currentTime - lastTime) < 1 && sponsorTimes[i][0] >= lastTime && sponsorTimes[i][0] <= v.currentTime && + (lastTimeSkippedTo == -1 || Math.abs(v.currentTime - lastTimeSkippedTo) > 1)) { + //skip it + v.currentTime = sponsorTimes[i][1]; + lastTimeSkippedTo = sponsorTimes[i][1]; - lastSponsorTimeSkipped = sponsorTimes[i][0]; - - let currentUUID = UUIDs[i]; - lastSponsorTimeSkippedUUID = currentUUID; + lastSponsorTimeSkipped = sponsorTimes[i][0]; + + let currentUUID = UUIDs[i]; + lastSponsorTimeSkippedUUID = currentUUID; - //send out the message saying that a sponsor message was skipped - openSkipNotice(); + //send out the message saying that a sponsor message was skipped + openSkipNotice(); - setTimeout(() => closeSkipNotice(currentUUID), 7000); - } + setTimeout(() => closeSkipNotice(currentUUID), 7000); - lastTime = v.currentTime; + //send telemetry that a this sponsor was skipped happened + sendRequestToServer("GET", "/api/viewedVideoSponsorTime?UUID=" + currentUUID); } + } + lastTime = v.currentTime; } function goBackToPreviousTime(UUID) { @@ -193,13 +201,13 @@ function addPlayerControlsButton() { let startSponsorButton = document.createElement("button"); startSponsorButton.id = "startSponsorButton"; - startSponsorButton.className = "ytp-button"; + startSponsorButton.className = "ytp-button playerButton"; startSponsorButton.setAttribute("title", "Sponsor Starts Now"); startSponsorButton.addEventListener("click", startSponsorClicked); let startSponsorImage = document.createElement("img"); startSponsorImage.id = "startSponsorImage"; - startSponsorImage.className = "playerButton"; + startSponsorImage.className = "playerButtonImage"; startSponsorImage.src = chrome.extension.getURL("icons/PlayerStartIconSponsorBlocker256px.png"); //add the image to the button @@ -269,7 +277,7 @@ function addSubmitButton() { //make a submit button let submitButton = document.createElement("button"); submitButton.id = "submitButton"; - submitButton.className = "ytp-button"; + submitButton.className = "ytp-button playerButton"; submitButton.setAttribute("title", "Submit Sponsor Times"); submitButton.addEventListener("click", submitSponsorTimes); //hide it at the start @@ -277,7 +285,7 @@ function addSubmitButton() { let submitImage = document.createElement("img"); submitImage.id = "submitButtonImage"; - submitImage.className = "playerButton"; + submitImage.className = "playerButtonImage"; submitImage.src = chrome.extension.getURL("icons/PlayerUploadIconSponsorBlocker256px.png"); //add the image to the button diff --git a/firefox_manifest.json b/firefox_manifest.json new file mode 100644 index 00000000..642c4a3e --- /dev/null +++ b/firefox_manifest.json @@ -0,0 +1,61 @@ +{ + "name": "SponsorBlock - YouTube Sponsorship Blocker", + "short_name": "SponsorBlock", + "version": "1.0.1", + "description": "Skip over sponsorship on YouTube videos. Report sponsors on videos you watch to save the time of others.", + "content_scripts": [ + { + "matches": [ + "https://*.youtube.com/*" + ], + "js": [ + "config.js", + "content.js" + ], + "css": [ + "content.css", + "./libs/Source+Sans+Pro.css" + ] + } + ], + "web_accessible_resources": [ + "icons/LogoSponsorBlocker256px.png", + "icons/IconSponsorBlocker256px.png", + "icons/PlayerStartIconSponsorBlocker256px.png", + "icons/PlayerStopIconSponsorBlocker256px.png", + "icons/PlayerUploadIconSponsorBlocker256px.png", + "icons/PlayerUploadFailedIconSponsorBlocker256px.png", + "icons/upvote.png", + "icons/downvote.png" + ], + "permissions": [ + "tabs", + "storage", + "notifications", + "https://sponsor.ajay.app/*" + ], + "browser_action": { + "default_title": "SponsorBlock", + "default_popup": "popup.html" + }, + "background": { + "scripts":[ + "config.js", + "background.js" + ] + }, + "icons": { + "16": "icons/IconSponsorBlocker16px.png", + "32": "icons/IconSponsorBlocker32px.png", + "64": "icons/LogoSponsorBlocker64px.png", + "128": "icons/LogoSponsorBlocker128px.png", + "256": "icons/LogoSponsorBlocker256px.png" + }, + "browser_specific_settings": { + "gecko": { + "id": "sponsorBlocker@ajay.app", + "strict_min_version": "57.0" + } + }, + "manifest_version": 2 +} diff --git a/icons/LogoSponsorBlocker128px.png b/icons/LogoSponsorBlocker128px.png index dbf305de..d299a294 100644 Binary files a/icons/LogoSponsorBlocker128px.png and b/icons/LogoSponsorBlocker128px.png differ diff --git a/icons/LogoSponsorBlocker256px.png b/icons/LogoSponsorBlocker256px.png index db351b15..06ec5127 100644 Binary files a/icons/LogoSponsorBlocker256px.png and b/icons/LogoSponsorBlocker256px.png differ diff --git a/icons/LogoSponsorBlocker64px.png b/icons/LogoSponsorBlocker64px.png index 933f635c..87e24791 100644 Binary files a/icons/LogoSponsorBlocker64px.png and b/icons/LogoSponsorBlocker64px.png differ diff --git a/manifest.json b/manifest.json index f0a4ba7b..25c1104f 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,8 @@ { - "name": "YTSponsorSkip", - "version": "1.0", - "description": "Skip youtube video sponsors.", + "name": "SponsorBlock - YouTube Sponsorship Blocker", + "short_name": "SponsorBlock", + "version": "1.0.1", + "description": "Skip over sponsorship on YouTube videos. Report sponsors on videos you watch to save the time of others.", "content_scripts": [ { "matches": [ @@ -30,7 +31,8 @@ "permissions": [ "tabs", "storage", - "notifications" + "notifications", + "https://sponsor.ajay.app/*" ], "browser_action": { "default_title": "SponsorBlock", diff --git a/popup.html b/popup.html index b180d788..99f7b099 100644 --- a/popup.html +++ b/popup.html @@ -41,8 +41,26 @@
+ + +
@@ -103,5 +121,8 @@ + + +