aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAjay Ramachandran <[email protected]>2020-02-10 22:35:54 -0500
committerGitHub <[email protected]>2020-02-10 22:35:54 -0500
commitc19e2bea29af509b365cf371f847718306744068 (patch)
tree0f89a78ebc29a7f6a8295225a9667387a7ae9ed7
parent79b02c7ae775989be45d8e248219b16d80acfc79 (diff)
parent2f2c1ad49b1ee20bf3e2ba999509594fca66d4e6 (diff)
downloadSponsorBlock-c19e2bea29af509b365cf371f847718306744068.tar.gz
SponsorBlock-c19e2bea29af509b365cf371f847718306744068.zip
Merge pull request #274 from ajayyy/experimental1.2.9
Various fixes
-rw-r--r--README.md2
-rw-r--r--manifest/manifest.json8
-rw-r--r--src/content.ts82
-rw-r--r--src/popup.ts33
4 files changed, 75 insertions, 50 deletions
diff --git a/README.md b/README.md
index 89053539..3bb7dfd6 100644
--- a/README.md
+++ b/README.md
@@ -68,7 +68,7 @@ The result is in `dist`.
# Credit
-The awesome [Invidious API](https://github.com/omarroth/invidious/wiki/API) is used to grab the time the video was published.
+The awesome [Invidious API](https://github.com/omarroth/invidious/wiki/API) used to be used.
Original code from [YTSponsorSkip](https://github.com/OfficialNoob/YTSponsorSkip), but not much of the code is left.
diff --git a/manifest/manifest.json b/manifest/manifest.json
index ef72db83..d32d3ef3 100644
--- a/manifest/manifest.json
+++ b/manifest/manifest.json
@@ -1,11 +1,10 @@
{
"name": "__MSG_fullName__",
"short_name": "__MSG_Name__",
- "version": "1.2.8",
+ "version": "1.2.9",
"default_locale": "en",
"description": "__MSG_Description__",
- "content_scripts": [
- {
+ "content_scripts": [{
"run_at": "document_start",
"matches": [
"https://*.youtube.com/*",
@@ -21,8 +20,7 @@
"./libs/Source+Sans+Pro.css",
"popup.css"
]
- }
- ],
+ }],
"web_accessible_resources": [
"icons/LogoSponsorBlocker256px.png",
"icons/IconSponsorBlocker256px.png",
diff --git a/src/content.ts b/src/content.ts
index 05255f4b..6e51aab3 100644
--- a/src/content.ts
+++ b/src/content.ts
@@ -27,7 +27,7 @@ var hiddenSponsorTimes = [];
var sponsorSkipped = [];
//the video
-var v;
+var video: HTMLVideoElement;
var onInvidious;
@@ -49,6 +49,10 @@ var channelWhitelisted = false;
// create preview bar
var previewBar = null;
+// When not null, a sponsor is currently being previewed and auto skip should be enabled.
+// This is set to a timeout function when that happens that will reset it after 3 seconds.
+var previewResetter: NodeJS.Timeout = null;
+
//the player controls on the YouTube player
var controls = null;
@@ -85,7 +89,7 @@ var skipNoticeContentContainer = () => ({
unskipSponsorTime,
sponsorTimes,
UUIDs,
- v,
+ v: video,
reskipSponsorTime,
hiddenSponsorTimes,
updatePreviewBar
@@ -132,16 +136,29 @@ function messageListener(request: any, sender: any, sendResponse: (response: any
break;
case "getVideoDuration":
sendResponse({
- duration: v.duration
+ duration: video.duration
});
break;
case "skipToTime":
- v.currentTime = request.time;
+ video.currentTime = request.time;
+
+ // Unpause the video if needed
+ if (video.paused){
+ video.play();
+ }
+
+ // Start preview resetter
+ if (previewResetter !== null){
+ clearTimeout(previewResetter);
+ }
+
+ previewResetter = setTimeout(() => previewResetter = null, 4000);
+
return
case "getCurrentTime":
sendResponse({
- currentTime: v.currentTime
+ currentTime: video.currentTime
});
break;
@@ -346,9 +363,9 @@ async function videoIDChange(id) {
function sponsorsLookup(id: string, channelIDPromise?) {
- v = document.querySelector('video') // Youtube video player
+ video = document.querySelector('video') // Youtube video player
//there is no video here
- if (v == null) {
+ if (video == null) {
setTimeout(() => sponsorsLookup(id, channelIDPromise), 100);
return;
}
@@ -357,7 +374,7 @@ function sponsorsLookup(id: string, channelIDPromise?) {
durationListenerSetUp = true;
//wait until it is loaded
- v.addEventListener('durationchange', updatePreviewBar);
+ video.addEventListener('durationchange', updatePreviewBar);
}
if (channelIDPromise !== undefined) {
@@ -415,7 +432,7 @@ function sponsorsLookup(id: string, channelIDPromise?) {
//update the preview bar
//leave the type blank for now until categories are added
- if (lastPreviewBarUpdate == id || (lastPreviewBarUpdate == null && !isNaN(v.duration))) {
+ if (lastPreviewBarUpdate == id || (lastPreviewBarUpdate == null && !isNaN(video.duration))) {
//set it now
//otherwise the listener can handle it
updatePreviewBar();
@@ -427,12 +444,19 @@ function sponsorsLookup(id: string, channelIDPromise?) {
//check if this video was uploaded recently
//use the invidious api to get the time published
- sendRequestToCustomServer('GET', "https://invidio.us/api/v1/videos/" + id + '?fields=published', function(xmlhttp, error) {
+ sendRequestToCustomServer('GET', "https://www.youtube.com/get_video_info?video_id=" + id, function(xmlhttp, error) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
- let unixTimePublished = JSON.parse(xmlhttp.responseText).published;
+ let decodedData = decodeURIComponent(xmlhttp.responseText).match(/(?<=player_response=)[^&]*/)[0];
+
+ if (decodedData === undefined) {
+ console.error("[SB] Failed at getting video upload date info from YouTube.");
+ return;
+ }
+
+ let dateUploaded = JSON.parse(decodedData).microformat.playerMicroformatRenderer.uploadDate;
//if less than 3 days old
- if ((Date.now() / 1000) - unixTimePublished < 259200) {
+ if (Date.now() - new Date(dateUploaded).getTime() < 259200000) {
//TODO lower when server becomes better
setTimeout(() => sponsorsLookup(id, channelIDPromise), 180000);
}
@@ -453,7 +477,7 @@ function sponsorsLookup(id: string, channelIDPromise?) {
//add the event to run on the videos "ontimeupdate"
if (!Config.config.disableSkipping) {
- v.ontimeupdate = function () {
+ video.ontimeupdate = function () {
sponsorCheck();
};
}
@@ -568,7 +592,7 @@ function updatePreviewBar() {
types.push("previewSponsor");
}
- utils.wait(() => previewBar !== null).then((result) => previewBar.set(allSponsorTimes, types, v.duration));
+ utils.wait(() => previewBar !== null).then((result) => previewBar.set(allSponsorTimes, types, video.duration));
//update last video id
lastPreviewBarUpdate = sponsorVideoID;
@@ -588,7 +612,7 @@ function whitelistCheck() {
function sponsorCheck() {
if (Config.config.disableSkipping) {
// Make sure this isn't called again
- v.ontimeupdate = null;
+ video.ontimeupdate = null;
return;
} else if (channelWhitelisted) {
return;
@@ -619,20 +643,20 @@ function sponsorCheck() {
//don't keep track until they are loaded in
if (sponsorTimes !== null || sponsorTimesSubmitting.length > 0) {
- lastTime = v.currentTime;
+ lastTime = video.currentTime;
}
}
function checkSponsorTime(sponsorTimes, index, openNotice): boolean {
//this means part of the video was just skipped
- if (Math.abs(v.currentTime - lastTime) > 1 && lastTime != -1) {
+ if (Math.abs(video.currentTime - lastTime) > 1 && lastTime != -1) {
//make lastTime as if the video was playing normally
- lastTime = v.currentTime - 0.0001;
+ lastTime = video.currentTime - 0.0001;
}
- if (checkIfTimeToSkip(v.currentTime, sponsorTimes[index][0], sponsorTimes[index][1]) && !hiddenSponsorTimes.includes(index)) {
+ if (checkIfTimeToSkip(video.currentTime, sponsorTimes[index][0], sponsorTimes[index][1]) && !hiddenSponsorTimes.includes(index)) {
//skip it
- skipToTime(v, index, sponsorTimes, openNotice);
+ skipToTime(video, index, sponsorTimes, openNotice);
//something was skipped
return true;
@@ -652,7 +676,7 @@ function checkIfTimeToSkip(currentVideoTime, startTime, endTime) {
//skip fromt he start time to the end time for a certain index sponsor time
function skipToTime(v, index, sponsorTimes, openNotice) {
- if (!Config.config.disableAutoSkip) {
+ if (!Config.config.disableAutoSkip || previewResetter !== null) {
v.currentTime = sponsorTimes[index][1];
}
@@ -690,14 +714,14 @@ function skipToTime(v, index, sponsorTimes, openNotice) {
function unskipSponsorTime(UUID) {
if (sponsorTimes != null) {
//add a tiny bit of time to make sure it is not skipped again
- v.currentTime = sponsorTimes[UUIDs.indexOf(UUID)][0] + 0.001;
+ video.currentTime = sponsorTimes[UUIDs.indexOf(UUID)][0] + 0.001;
}
}
function reskipSponsorTime(UUID) {
if (sponsorTimes != null) {
//add a tiny bit of time to make sure it is not skipped again
- v.currentTime = sponsorTimes[UUIDs.indexOf(UUID)][1];
+ video.currentTime = sponsorTimes[UUIDs.indexOf(UUID)][1];
}
}
@@ -786,7 +810,7 @@ function startSponsorClicked() {
//send back current time with message
chrome.runtime.sendMessage({
message: "addSponsorTime",
- time: v.currentTime,
+ time: video.currentTime,
videoID: sponsorVideoID
}, function(response) {
//see if the sponsorTimesSubmitting needs to be updated
@@ -875,6 +899,8 @@ function openInfoMenu() {
closeButton.classList.add("smallLink");
closeButton.setAttribute("align", "center");
closeButton.addEventListener("click", closeInfoMenu);
+ // Theme based color
+ closeButton.style.color = "var(--yt-spec-text-primary)";
//add the close button
popup.prepend(closeButton);
@@ -1012,11 +1038,11 @@ function dontShowNoticeAgain() {
}
function sponsorMessageStarted(callback) {
- v = document.querySelector('video');
+ video = document.querySelector('video');
//send back current time
callback({
- time: v.currentTime
+ time: video.currentTime
})
//update button
@@ -1039,8 +1065,8 @@ function submitSponsorTimes() {
if (sponsorTimes != undefined && sponsorTimes.length > 0) {
//check if a sponsor exceeds the duration of the video
for (let i = 0; i < sponsorTimes.length; i++) {
- if (sponsorTimes[i][1] > v.duration) {
- sponsorTimes[i][1] = v.duration;
+ if (sponsorTimes[i][1] > video.duration) {
+ sponsorTimes[i][1] = video.duration;
}
}
//update sponsorTimes
diff --git a/src/popup.ts b/src/popup.ts
index 478f1fd3..e47edf31 100644
--- a/src/popup.ts
+++ b/src/popup.ts
@@ -38,7 +38,7 @@ class MessageHandler {
//make this a function to allow this to run on the content page
async function runThePopup(messageListener?: MessageListener) {
- var messageHandler = new MessageHandler();
+ var messageHandler = new MessageHandler(messageListener);
utils.localizeHtmlPage();
@@ -656,9 +656,9 @@ async function runThePopup(messageListener?: MessageListener) {
tabs[0].id,
{message: "getCurrentTime"},
function (response) {
- let minutes = <HTMLInputElement> <unknown> document.getElementById(idStartName + "Minutes" + index);
+ let minutes = <HTMLInputElement> <unknown> document.getElementById(idStartName + "Minutes" + index);
let seconds = <HTMLInputElement> <unknown> document.getElementById(idStartName + "Seconds" + index);
-
+
minutes.value = String(getTimeInMinutes(response.currentTime));
seconds.value = getTimeInFormattedSeconds(response.currentTime);
});
@@ -667,11 +667,11 @@ async function runThePopup(messageListener?: MessageListener) {
//id start name is whether it is the startTime or endTime
//gives back the time in seconds
- function getSponsorTimeEditTimes(idStartName, index) {
+ function getSponsorTimeEditTimes(idStartName, index): number {
let minutes = <HTMLInputElement> <unknown> document.getElementById(idStartName + "Minutes" + index);
let seconds = <HTMLInputElement> <unknown> document.getElementById(idStartName + "Seconds" + index);
- return parseInt(minutes.value) * 60 + seconds.value;
+ return parseInt(minutes.value) * 60 + parseInt(seconds.value);
}
function saveSponsorTimeEdit(index, closeEditMode = true) {
@@ -679,16 +679,17 @@ async function runThePopup(messageListener?: MessageListener) {
sponsorTimes[index][1] = getSponsorTimeEditTimes("endTime", index);
//save this
- Config.config.sponsorTimes.set(currentVideoID, sponsorTimes);
- messageHandler.query({
- active: true,
- currentWindow: true
- }, tabs => {
- messageHandler.sendMessage(
- tabs[0].id,
- {message: "sponsorDataChanged"}
- );
- });
+ Config.config.sponsorTimes.set(currentVideoID, sponsorTimes);
+
+ messageHandler.query({
+ active: true,
+ currentWindow: true
+ }, tabs => {
+ messageHandler.sendMessage(
+ tabs[0].id,
+ {message: "sponsorDataChanged"}
+ );
+ });
if (closeEditMode) {
displaySponsorTimes();
@@ -968,7 +969,7 @@ async function runThePopup(messageListener?: MessageListener) {
secondsDisplay = "0" + secondsDisplay;
}
- let formatted = minutes+ ":" + secondsDisplay;
+ let formatted = minutes + ":" + secondsDisplay;
return formatted;
}