Skip to content

Commit

Permalink
Merge pull request #264 from ajayyy/privacy-confirm
Browse files Browse the repository at this point in the history
Added privacy confirmation for unlisted videos
  • Loading branch information
ajayyy authored Feb 9, 2020
2 parents cd5adc1 + b7e83a0 commit 22cc517
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 3 deletions.
9 changes: 9 additions & 0 deletions public/_locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -419,5 +419,14 @@
},
"areYouSureReset": {
"message": "Are you sure you would like to reset this?"
},
"confirmPrivacy": {
"message": "The video has been detected as unlisted. Click cancel if you do not want to check for sponsors."
},
"unlistedCheck": {
"message": "Ignore Unlisted Videos"
},
"whatUnlistedCheck": {
"message": "This setting will significantly slow down SponsorBlock. Sponsor lookups require sending the video ID to the server. If you are concerned about unlisted video IDs being sent over the internet, enable this option."
}
}
17 changes: 17 additions & 0 deletions public/options/options.html
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,23 @@ <h1>__MSG_Options__</h1>

<div class="small-description">__MSG_whatViewTracking__</div>
</div>

<br/>
<br/>

<div option-type="toggle" sync-option="checkForUnlistedVideos">
<label class="switch-container" label-name="__MSG_unlistedCheck__">
<label class="switch">
<input type="checkbox">
<span class="slider round"></span>
</label>
</label>

<br/>
<br/>

<div class="small-description">__MSG_whatUnlistedCheck__</div>
</div>

<br/>
<br/>
Expand Down
6 changes: 4 additions & 2 deletions src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ interface SBConfig {
autoUpvote: boolean,
supportInvidious: boolean,
serverAddress: string,
minDuration: number
minDuration: number,
checkForUnlistedVideos: boolean
}

interface SBObject {
Expand Down Expand Up @@ -119,7 +120,8 @@ var Config: SBObject = {
autoUpvote: true,
supportInvidious: false,
serverAddress: CompileConfig.serverAddress,
minDuration: 0
minDuration: 0,
checkForUnlistedVideos: false
},
localConfig: null,
config: null
Expand Down
41 changes: 40 additions & 1 deletion src/content.ts
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ function resetValues() {
sponsorDataFound = false;
}

function videoIDChange(id) {
async function videoIDChange(id) {
//if the id has not changed return
if (sponsorVideoID === id) return;

Expand All @@ -242,6 +242,19 @@ function videoIDChange(id) {
//id is not valid
if (!id) return;

// Wait for options to be ready
await utils.wait(() => Config.config !== null, 5000, 1);

// If enabled, it will check if this video is private or unlisted and double check with the user if the sponsors should be looked up
if (Config.config.checkForUnlistedVideos) {
await utils.wait(isPrivacyInfoAvailable);

if (isUnlisted()) {
let shouldContinue = confirm(chrome.i18n.getMessage("confirmPrivacy"));
if(!shouldContinue) return;
}
}

// TODO: Use a better method here than using type any
// This is done to be able to do channelIDPromise.isFulfilled and channelIDPromise.isRejected
let channelIDPromise: any = utils.wait(getChannelID);
Expand Down Expand Up @@ -1121,6 +1134,32 @@ function getSponsorTimesMessage(sponsorTimes) {
return sponsorTimesMessage;
}

// Privacy utils
function isPrivacyInfoAvailable(): boolean {
if(document.location.pathname.startsWith("/embed/")) return true;
return document.getElementsByClassName("style-scope ytd-badge-supported-renderer").length >= 2;
}

/**
* What privacy level is this YouTube video?
*/
function getPrivacy(): string {
if(document.location.pathname.startsWith("/embed/")) return "Public";

let privacyElement = <HTMLElement> document.getElementsByClassName("style-scope ytd-badge-supported-renderer")[2];
return privacyElement.innerText;
}

/**
* Is this an unlisted YouTube video.
* Assumes that the the privacy info is available.
*/
function isUnlisted(): boolean {
let privacyElement = <HTMLElement> document.getElementsByClassName("style-scope ytd-badge-supported-renderer")[2];

return privacyElement.innerText.toLocaleLowerCase() === "unlisted";
}

/**
* Adds the CSS to the page if needed. Required on optional sites with Chrome.
*/
Expand Down

0 comments on commit 22cc517

Please sign in to comment.