diff options
author | Ajay Ramachandran <[email protected]> | 2019-07-23 20:01:23 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2019-07-23 20:01:23 -0400 |
commit | 30c64371604fa3d4cb0fe3d81e37969bb9037f07 (patch) | |
tree | 00c694d7817b297a0637f54626d8cb09d28e45cb | |
parent | 180260088d2ad9af62950928263a3f238aa70d58 (diff) | |
parent | e8ff6171eb6f38e4d852ad73b015301ccbb9a769 (diff) | |
download | SponsorBlock-1.0.1.tar.gz SponsorBlock-1.0.1.zip |
Merge pull request #4 from ajayyy/experimentalv1.0.1
View count additions and fixes
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | config.js | 3 | ||||
-rw-r--r-- | content.css | 6 | ||||
-rw-r--r-- | content.js | 60 | ||||
-rw-r--r-- | firefox_manifest.json | 61 | ||||
-rw-r--r-- | icons/LogoSponsorBlocker128px.png | bin | 8357 -> 9282 bytes | |||
-rw-r--r-- | icons/LogoSponsorBlocker256px.png | bin | 10002 -> 11165 bytes | |||
-rw-r--r-- | icons/LogoSponsorBlocker64px.png | bin | 4085 -> 4403 bytes | |||
-rw-r--r-- | manifest.json | 10 | ||||
-rw-r--r-- | popup.html | 25 | ||||
-rw-r--r-- | popup.js | 57 |
11 files changed, 184 insertions, 40 deletions
@@ -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; } @@ -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]; - - lastSponsorTimeSkipped = sponsorTimes[i][0]; - - let currentUUID = UUIDs[i]; - lastSponsorTimeSkippedUUID = currentUUID; - - //send out the message saying that a sponsor message was skipped - openSkipNotice(); - - setTimeout(() => closeSkipNotice(currentUUID), 7000); - } - - lastTime = v.currentTime; + //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; + + //send out the message saying that a sponsor message was skipped + openSkipNotice(); + + setTimeout(() => closeSkipNotice(currentUUID), 7000); + + //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": "[email protected]", + "strict_min_version": "57.0" + } + }, + "manifest_version": 2 +} diff --git a/icons/LogoSponsorBlocker128px.png b/icons/LogoSponsorBlocker128px.png Binary files differindex dbf305de..d299a294 100644 --- a/icons/LogoSponsorBlocker128px.png +++ b/icons/LogoSponsorBlocker128px.png diff --git a/icons/LogoSponsorBlocker256px.png b/icons/LogoSponsorBlocker256px.png Binary files differindex db351b15..06ec5127 100644 --- a/icons/LogoSponsorBlocker256px.png +++ b/icons/LogoSponsorBlocker256px.png diff --git a/icons/LogoSponsorBlocker64px.png b/icons/LogoSponsorBlocker64px.png Binary files differindex 933f635c..87e24791 100644 --- a/icons/LogoSponsorBlocker64px.png +++ b/icons/LogoSponsorBlocker64px.png 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", @@ -41,8 +41,26 @@ <h2 class="recordingSubtitle">Record the times of a sponsorship</h2> - <p id="sponsorTimesContributionsDisplay" style="display: none"> - So far, you've submitted no sponsor times. + <p> + <span id=sponsorTimesContributionsContainer style="display: none"> + So far, you've submitted + <span id="sponsorTimesContributionsDisplay"> + 0 + </span> + <span id="sponsorTimesContributionsDisplayEndWord"> + sponsors. + </span> + </span> + + <span id=sponsorTimesViewsContainer style="display: none"> + You have saved people from + <span id="sponsorTimesViewsDisplay"> + 0 + </span> + <span id="sponsorTimesViewsDisplayEndWord"> + sponsor segments. + </span> + </span> </p> <p> @@ -103,5 +121,8 @@ </div> </div> </center> + + <!-- Scripts that need to load after the html --> + <script src="config.js"></script> <script src="popup.js"></script> </html>
\ No newline at end of file @@ -41,17 +41,49 @@ chrome.storage.sync.get(["hideVideoPlayerControls"], function(result) { //get the amount of times this user has contributed and display it to thank them chrome.storage.sync.get(["sponsorTimesContributed"], function(result) { if (result.sponsorTimesContributed != undefined) { + let sponsorTimesContributionsContainer = document.getElementById("sponsorTimesContributionsContainer"); let sponsorTimesContributionsDisplay = document.getElementById("sponsorTimesContributionsDisplay"); + let sponsorTimesContributionsDisplayEndWord = document.getElementById("sponsorTimesContributionsDisplayEndWord"); if (result.sponsorTimesContributed > 1) { - sponsorTimesContributionsDisplay.innerText = "So far, you've submitted " + result.sponsorTimesContributed + " sponsor times."; + sponsorTimesContributionsDisplayEndWord.innerText = "sponsors." } else { - sponsorTimesContributionsDisplay.innerText = "So far, you've submitted " + result.sponsorTimesContributed + " sponsor time."; + sponsorTimesContributionsDisplayEndWord.innerText = "sponsor." } - sponsorTimesContributionsDisplay.style.display = "unset"; + sponsorTimesContributionsDisplay.innerText = result.sponsorTimesContributed; + sponsorTimesContributionsContainer.style.display = "unset"; + + //get the userID + chrome.storage.sync.get(["userID"], function(result) { + let userID = result.userID; + if (userID != undefined) { + //there are probably some views on these submissions then + //get the amount of views from the sponsors submitted + sendRequestToServer("GET", "/api/getViewsForUser?userID=" + userID, function(xmlhttp) { + if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { + let viewCount = JSON.parse(xmlhttp.responseText).viewCount; + + if (viewCount != 0) { + let sponsorTimesViewsContainer = document.getElementById("sponsorTimesViewsContainer"); + let sponsorTimesViewsDisplay = document.getElementById("sponsorTimesViewsDisplay"); + let sponsorTimesViewsDisplayEndWord = document.getElementById("sponsorTimesViewsDisplayEndWord"); + + if (viewCount > 1) { + sponsorTimesViewsDisplayEndWord.innerText = "sponsor segments." + } else { + sponsorTimesViewsDisplayEndWord.innerText = "sponsor segment." + } + sponsorTimesViewsDisplay.innerText = viewCount; + sponsorTimesViewsContainer.style.display = "unset"; + } + } + }); + } + }); } }); + chrome.tabs.query({ active: true, currentWindow: true @@ -466,6 +498,25 @@ function getFormattedTime(seconds) { return formatted; } +function sendRequestToServer(type, address, callback) { + let xmlhttp = new XMLHttpRequest(); + + xmlhttp.open(type, serverAddress + address, true); + + if (callback != undefined) { + xmlhttp.onreadystatechange = function () { + callback(xmlhttp, false); + }; + + xmlhttp.onerror = function(ev) { + callback(xmlhttp, true); + }; + } + + //submit this request + xmlhttp.send(); +} + function getYouTubeVideoID(url) { // Return video id or false var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/; var match = url.match(regExp); |