Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into add-invidious

This commit is contained in:
Ajay Ramachandran
2019-12-19 00:40:32 -05:00
11 changed files with 420 additions and 105 deletions

318
_locales/de/messages.json Normal file
View File

@@ -0,0 +1,318 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock for YouTube - Skip Sponsorships",
"description": "Name of the extension."
},
"Description": {
"message": "Überspringe die gesponserten Inhalte in YouTube-Videos. Melde gesponsorte Inhalte in den von dir angesehenen Videos und erspare anderen die Zeit.",
"description": "Description of the extension."
},
"helpPage": {
"message": "index_en.html"
},
"400": {
"message": "Ungültige Anforderung"
},
"429": {
"message": "Du hast zu viele Segmente in diesem Video eingereicht. Bist du dir sicher?"
},
"409": {
"message": "Dieser Inhalt wurde bereits eingereicht."
},
"channelWhitelisted": {
"message": "Kanal auf Whitelist gesetzt!"
},
"Sponsor": {
"message": "Sponsor"
},
"Sponsors": {
"message": "Sponsoren"
},
"Segment": {
"message": "gesponsorter Inhalt"
},
"Segments": {
"message": "gesponsorte Inhalte"
},
"noticeTitle": {
"message": "Sponsor übersprungen"
},
"reportButtonTitle": {
"message": "Melden"
},
"reportButtonInfo": {
"message": "Melde dieses Segment als unzulässig."
},
"Dismiss": {
"message": "Abbrechen"
},
"Loading": {
"message": "Laden..."
},
"Mins": {
"message": "Minuten"
},
"Secs": {
"message": "Sekunden"
},
"Hide": {
"message": "Verstecken"
},
"hitGoBack": {
"message": "Klicke Zurück um die Aktion rückgängig zu machen."
},
"unskip": {
"message": "Zurück"
},
"reskip": {
"message": "Vorwärts"
},
"paused": {
"message": "Pausiert"
},
"confirmMSG": {
"message": "\n\nUm einzelne Werte zu löschen oder zu ändern, klicke auf den Info-Button, oder öffne die Erweiterungs-Übersicht, indem du das Erweiterungssymbol in der rechten oberen Ecke anklickst."
},
"clearThis": {
"message": "Bist du sicher, dass du Folgendes löschen möchtest?\n\n"
},
"Unknown": {
"message": "Deine Segmente konnte nicht gesendet werden, bitte versuche es später erneut."
},
"sponsorFound": {
"message": "Die gesponsorten Inhalte dieses Videos befindet sich bereits in der Datenbank!"
},
"sponsor404": {
"message": "Keine Sponsoren gefunden"
},
"sponsorStart": {
"message": "Gesponserter Inhalt beginnt"
},
"sponsorEnd": {
"message": "Gesponserter Inhalt endet"
},
"noVideoID": {
"message": "Keine YouTube-Videos in diesem Tab gefunden. Wenn dies ein Youtube-Tab ist, schließe dieses Pop-up und öffne es erneut. Wenn das nicht hilft, versuche den Tab neu zu laden."
},
"success": {
"message": "Erfolg!"
},
"voted": {
"message": "Abgestimmt!"
},
"voteFail": {
"message": "Du hast bereits so abgestimmt."
},
"serverDown": {
"message": "Der Server ist scheinbar offline. Bitte unverzüglich dem Entwickler melden."
},
"connectionError": {
"message": "Ein Verbindungsfehler ist aufgetreten. Fehlermeldung: "
},
"wantToSubmit": {
"message": "Möchtest du die Segmente für die Video ID senden?"
},
"leftTimes": {
"message": "Scheinbar hast du einige Segmente noch nicht gesendet. Kehre zur Seite zurück um sie zu senden (sie sind noch gespeichert)."
},
"clearTimes": {
"message": "Lösche Auswahl"
},
"openPopup": {
"message": "Öffne SponsorBlock-Popup"
},
"SubmitTimes": {
"message": "Sende Auswahl"
},
"submitCheck": {
"message": "Bist du sicher, dass die Auswahl abgeschickt werden soll?"
},
"whitelistChannel": {
"message": "Kanal auf Whitelist setzen "
},
"removeFromWhitelist": {
"message": "Kanal von Whitelist entfernen"
},
"voteOnTime": {
"message": "Stimme für Zeiten ab"
},
"recordTimes": {
"message": "Lege das Zeitfenster eines gesponsorten Inhalts fest"
},
"soFarUHSubmited": {
"message": "Gemeldet wurden von dir bisher"
},
"savedPeopleFrom": {
"message": "Du hast andere Benutzer bewahrt vor"
},
"viewLeaderboard": {
"message": "Siehe Rangliste"
},
"here": {
"message": "hier"
},
"recordTimesDescription": {
"message": "Klicke den Knopf unten, wenn der gesponsorte Inhalt beginnt und endet, um aufzunehmen und\n einzusenden"
},
"popupHint": {
"message": "Hinweis: In den Optionen lässt sich eine Taste für das Festlegen von Anfang/Ende des gesponsorten Inhalts, sowie für das Einsenden festlegen"
},
"lastTimes": {
"message": "Letzte ausgewählte Zeitabschnitte"
},
"clearTimesButton": {
"message": "Zeiten löschen"
},
"submitTimesButton": {
"message": "Zeiten einsenden"
},
"publicStats": {
"message": "Dies ist wichtig für die öffentliche Nutzerstatistik. Siehe"
},
"setUsername": {
"message": "Alias festlegen"
},
"discordAdvert": {
"message": "Tritt dem offiziellen Discord-Kanal bei und teile Anregungen und Feedback!"
},
"hideThis": {
"message": "Verstecken"
},
"Options": {
"message": "Optionen"
},
"showButtons": {
"message": "Knöpfe in YouTube-Leiste zeigen"
},
"hideButtons": {
"message": "Knöpfe in YouTube-Leiste verstecken"
},
"hideButtonsDescription": {
"message": "Die Einstellung versteckt den Einsende-Knopf in der Youtube-Leiste. Ich kann verstehen, weshalb manchen diese Funktion\n an dieser Stelle stört. Stattdessen kann dafür dieses Pop-up genutzt werden. Um die transparente Benachrichtigung zu verstecken, klicke auf den \"Verstecken\"-Knopf \n der Benachrichtigung. Diese Einstellungen können wieder rückgängig gemacht werden."
},
"showInfoButton": {
"message": "Zeige Info-Knopf in Youtube-Leiste"
},
"hideInfoButton": {
"message": "Verstecke Info-Knopf in Youtube-Leiste"
},
"whatInfoButton": {
"message": "Dieser Knopf öffnet ein Pop-up auf der Youtube-Seite."
},
"hideDeleteButton": {
"message": "Verstecke Löschen-Knopf in Youtube Leiste"
},
"showDeleteButton": {
"message": "Zeige Löschen-Knopf in Youtube Leiste"
},
"whatDeleteButton": {
"message": "Dieser Knopf entfernt sämtlich Segmente in der Youtube-Zeitleiste."
},
"disableViewTracking": {
"message": "Deaktiviere mitzählen übersprungener Sponsoren"
},
"enableViewTracking": {
"message": "Aktiviere mitzählen übersprungener Sponsoren"
},
"whatViewTracking": {
"message": "Diese Funktion hält fest, welche Sponsoren von dir übersprungen wurden und hilft anderen zu erfahren, was ihre Einsendungen bewirkt haben.\n Außerdem dienen die Werte zusammen mit positiven Rückmeldungen als Anti-Spam-Schutz. \n Wenn ein gesponsorter Inhalt übersprungen wird, sendet die Erweiterung eine Nachricht an den Server. \n Hoffentlich wird diese Funktion auch weiterhin genutzt, damit der Algorithmus funktioniert. :)"
},
"showNotice": {
"message": "Benachrichtigung wieder zeigen"
},
"longDescription": {
"message": "SponsorBlock ist eine Erweiterung, die gesponsorte Segmente in YouTube-Videos überspringt. SponsorBlock ist ein Benutzernetzwerk, bei dem jeder Anfang und Ende eines Werbeblocks einreichen kann. Sobald die Information von einem Nutzer eingereicht wurde, überspringen die Erweiterungen der anderen dieses Segment automatisch.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Webseite",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Quellcode",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "Die Benachrichtigung wurde verbessert!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "Gefällt dir immer noch nicht? Dann klicke den Verstecken-Knopf.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setStartSponsorShortcut": {
"message": "Segment aufnehmen Taste festlegen"
},
"setSubmitKeybind": {
"message": "Segment einsenden Taste festlegen"
},
"keybindDescription": {
"message": "Taste drücken, um festzulegen"
},
"keybindDescriptionComplete": {
"message": "Die Taste wurde festgelegt auf: "
},
"0": {
"message": "Verbindungsüberschreibung. Überprüfe deine Internetverbindung. Bist du mit dem Internet verbunden, ist der Server wahrscheinlich offline."
},
"disableSkipping": {
"message": "SponsorBlock ausschalten"
},
"enableSkipping": {
"message": "SponsorBlock einschalten"
},
"yourWork": {
"message": "Deine Statistik",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "Der Server scheint überlastet zu sein. Probiere es in ein paar Sekunden erneut."
},
"errorCode": {
"message": "Fehlermeldung: "
},
"noticeTitleNotSkipped": {
"message": "Sponsor überspringen?"
},
"skip": {
"message": "Überspringen"
},
"disableAutoSkip": {
"message": "Auto-Überspringen deaktivieren"
},
"enableAutoSkip": {
"message": "Auto-Überspringen aktivieren"
},
"autoSkipDescription": {
"message": "Auto-Überspringen überspringt gesponsorte Inhalte für dich. Wenn deaktiviert, fragt die Benachrichtigung, ob übersprungen werden soll."
},
"youHaveSkipped": {
"message": "Du hast übersprungen "
},
"youHaveSaved": {
"message": "Du hast dir erspart "
},
"minLower": {
"message": "Minute"
},
"minsLower": {
"message": "Minuten"
},
"hourLower": {
"message": "Stunde"
},
"hoursLower": {
"message": "Stunden"
},
"youHaveSavedTime": {
"message": "Du erspartest anderen"
},
"youHaveSavedTimeEnd": {
"message": " ihrer Zeit."
}
}

View File

@@ -76,7 +76,7 @@
"message": "Paused" "message": "Paused"
}, },
"confirmMSG": { "confirmMSG": {
"message": "\n\nTo edit or delete individual values, click the info button or open the extension popup by clicking the extension icon in the top right corner." "message": "To edit or delete individual values, click the info button or open the extension popup by clicking the extension icon in the top right corner."
}, },
"clearThis": { "clearThis": {
"message": "Are you sure you want to clear this?\n\n" "message": "Are you sure you want to clear this?\n\n"
@@ -314,5 +314,11 @@
}, },
"youHaveSavedTimeEnd": { "youHaveSavedTimeEnd": {
"message": " of their lives." "message": " of their lives."
},
"guildlinesSummary": {
"message": "- Make sure your segment only contains paid promotion segment, nothing else.\n- Make sure skipping this segment will not skip valuable content\n- If the whole video is a sponsor, please do not report it. A full video reporting system will come out soon.\n- Please do not report disclaimers that could show bias (if a review video is sponsored, don't skip when they mention that)."
},
"statusReminder": {
"message": "Check status.sponsor.ajay.app for server status."
} }
} }

View File

@@ -33,7 +33,7 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
case "alertPrevious": case "alertPrevious":
chrome.notifications.create("stillThere" + Math.random(), { chrome.notifications.create("stillThere" + Math.random(), {
type: "basic", type: "basic",
title: chrome.i18n.getMessage("wantToSubmit") + request.previousVideoID + "?", title: chrome.i18n.getMessage("wantToSubmit") + " " + request.previousVideoID + "?",
message: chrome.i18n.getMessage("leftTimes"), message: chrome.i18n.getMessage("leftTimes"),
iconUrl: "./icons/LogoSponsorBlocker256px.png" iconUrl: "./icons/LogoSponsorBlocker256px.png"
}); });
@@ -216,21 +216,3 @@ function sendRequestToServer(type, address, callback) {
//submit this request //submit this request
xmlhttp.send(); xmlhttp.send();
} }
function generateUserID(length = 36) {
let charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let result = "";
if (window.crypto && window.crypto.getRandomValues) {
values = new Uint32Array(length);
window.crypto.getRandomValues(values);
for (i = 0; i < length; i++) {
result += charset[values[i] % charset.length];
}
return result;
} else {
for (let i = 0; i < length; i++) {
result += charset[Math.floor(Math.random() * charset.length)];
}
return result;
}
}

View File

@@ -493,7 +493,12 @@ function updatePreviewBar() {
//create an array of the sponsor types //create an array of the sponsor types
let types = []; let types = [];
for (let i = 0; i < localSponsorTimes.length; i++) { for (let i = 0; i < localSponsorTimes.length; i++) {
if (!hiddenSponsorTimes.includes(i)) {
types.push("sponsor"); types.push("sponsor");
} else {
// Don't show this sponsor
types.push(null);
}
} }
for (let i = 0; i < sponsorTimesSubmitting.length; i++) { for (let i = 0; i < sponsorTimesSubmitting.length; i++) {
types.push("previewSponsor"); types.push("previewSponsor");
@@ -507,19 +512,18 @@ function updatePreviewBar() {
function getChannelID() { function getChannelID() {
//get channel id //get channel id
let channelContainers = document.querySelectorAll(".ytd-channel-name#text"); let channelNameContainer = document.getElementById("channel-name");
let channelURLContainer = null;
for (let i = 0; i < channelContainers.length; i++) { if (channelNameContainer === null) {
let child = channelContainers[i].firstElementChild; //try later
if (child != null && child.getAttribute("href") != "") { return false;
channelURLContainer = child;
}
} }
if (channelContainers.length == 0) { let channelURLContainer = channelNameContainer.querySelector("#container").querySelector("#text-container").querySelector("#text").firstElementChild;
if (channelURLContainer === null) {
//old YouTube theme //old YouTube theme
channelContainers = document.getElementsByClassName("yt-user-info"); let channelContainers = document.getElementsByClassName("yt-user-info");
if (channelContainers.length != 0) { if (channelContainers.length != 0) {
channelURLContainer = channelContainers[0].firstElementChild; channelURLContainer = channelContainers[0].firstElementChild;
} else if (onInvidious) { } else if (onInvidious) {
@@ -531,7 +535,7 @@ function getChannelID() {
} }
} }
if (channelURLContainer == null) { if (channelURLContainer === null) {
//try later //try later
return false; return false;
} }
@@ -568,11 +572,9 @@ function whitelistCheck() {
chrome.storage.sync.get(["whitelistedChannels"], function(result) { chrome.storage.sync.get(["whitelistedChannels"], function(result) {
let whitelistedChannels = result.whitelistedChannels; let whitelistedChannels = result.whitelistedChannels;
if (whitelistedChannels != undefined && whitelistedChannels.includes(channelURL)) { console.log(channelURL)
//reset sponsor times to nothing
sponsorTimes = [];
UUIDs = [];
if (whitelistedChannels != undefined && whitelistedChannels.includes(channelURL)) {
channelWhitelisted = true; channelWhitelisted = true;
} }
}); });
@@ -584,6 +586,8 @@ function sponsorCheck() {
// Make sure this isn't called again // Make sure this isn't called again
v.ontimeupdate = null; v.ontimeupdate = null;
return; return;
} else if (channelWhitelisted) {
return;
} }
let skipHappened = false; let skipHappened = false;
@@ -1013,14 +1017,8 @@ function vote(type, UUID, skipNotice) {
skipNotice.addNoticeInfoMessage.bind(skipNotice)(chrome.i18n.getMessage("voteFail")) skipNotice.addNoticeInfoMessage.bind(skipNotice)(chrome.i18n.getMessage("voteFail"))
skipNotice.resetVoteButtonInfo.bind(skipNotice)(); skipNotice.resetVoteButtonInfo.bind(skipNotice)();
} else if (response.successType == -1) { } else if (response.successType == -1) {
if (response.statusCode == 502) { skipNotice.addNoticeInfoMessage.bind(skipNotice)(getErrorMessage(response.statusCode))
skipNotice.addNoticeInfoMessage.bind(skipNotice)(chrome.i18n.getMessage("serverDown"))
skipNotice.resetVoteButtonInfo.bind(skipNotice)(); skipNotice.resetVoteButtonInfo.bind(skipNotice)();
} else {
//failure: unknown error
skipNotice.addNoticeInfoMessage.bind(skipNotice)(chrome.i18n.getMessage("connectionError") + response.statusCode);
skipNotice.resetVoteButtonInfo.bind(skipNotice)();
}
} }
} }
} }
@@ -1080,8 +1078,11 @@ function submitSponsorTimes() {
//update sponsorTimes //update sponsorTimes
chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes}); chrome.storage.sync.set({[sponsorTimeKey]: sponsorTimes});
let confirmMessage = chrome.i18n.getMessage("submitCheck") + "\n\n" + getSponsorTimesMessage(sponsorTimes); //update sponsorTimesSubmitting
confirmMessage += "\n\n" + chrome.i18n.getMessage("confirmMSG"); sponsorTimesSubmitting = sponsorTimes;
let confirmMessage = chrome.i18n.getMessage("submitCheck") + "\n\n" + getSponsorTimesMessage(sponsorTimes)
+ "\n\n" + chrome.i18n.getMessage("confirmMSG") + "\n\n" + chrome.i18n.getMessage("guildlinesSummary");
if(!confirm(confirmMessage)) return; if(!confirm(confirmMessage)) return;
sendSubmitMessage(); sendSubmitMessage();
@@ -1099,8 +1100,6 @@ function sendSubmitMessage(){
let currentVideoID = sponsorVideoID; let currentVideoID = sponsorVideoID;
let currentSponsorTimes = submitSponsorTimes;
chrome.runtime.sendMessage({ chrome.runtime.sendMessage({
message: "submitTimes", message: "submitTimes",
videoID: currentVideoID videoID: currentVideoID
@@ -1124,24 +1123,25 @@ function sendSubmitMessage(){
//clear the sponsor times //clear the sponsor times
let sponsorTimeKey = "sponsorTimes" + currentVideoID; let sponsorTimeKey = "sponsorTimes" + currentVideoID;
chrome.storage.sync.set({[sponsorTimeKey]: []}, () => void updatePreviewBar()); chrome.storage.sync.set({[sponsorTimeKey]: []});
//add submissions to current sponsors list //add submissions to current sponsors list
sponsorTimes = sponsorTimes.concat(sponsorTimesSubmitting); sponsorTimes = sponsorTimes.concat(sponsorTimesSubmitting);
for (let i = 0; i < sponsorTimesSubmitting.length; i++) {
// Add some random IDs
UUIDs.push(generateUserID());
}
// Empty the submitting times
sponsorTimesSubmitting = []; sponsorTimesSubmitting = [];
updatePreviewBar();
} else { } else {
//show that the upload failed //show that the upload failed
document.getElementById("submitButton").style.animation = "unset"; document.getElementById("submitButton").style.animation = "unset";
document.getElementById("submitImage").src = chrome.extension.getURL("icons/PlayerUploadFailedIconSponsorBlocker256px.png"); document.getElementById("submitImage").src = chrome.extension.getURL("icons/PlayerUploadFailedIconSponsorBlocker256px.png");
if([400, 429, 409, 502, 0].includes(response.statusCode)) { alert(getErrorMessage(response.statusCode));
//treat them the same
if (response.statusCode == 503) response.statusCode = 502;
alert(chrome.i18n.getMessage(response.statusCode + "") + " " + chrome.i18n.getMessage("errorCode") + response.statusCode);
} else {
alert(chrome.i18n.getMessage("connectionError") + response.statusCode);
}
} }
} }
}); });

View File

@@ -39,7 +39,7 @@
<br/> <br/>
<br/> <br/>
Whenever you skip a video, you will get a notice report that submission. If the timing seems wrong, report it! You can also vote in the popup. The extension auto upvotes it if you don't report it, so make sure to report when necessary. Whenever you skip a video, you will get a notice report that submission. If the timing seems wrong, report it! You can also vote in the popup. The extension auto upvotes it if you don't report it, so make sure to report when necessary (this can be disabled in the options).
</p> </p>
<center><img height="120px" src="https://user-images.githubusercontent.com/12688112/63067735-5a638700-bede-11e9-8147-f321b57527ec.gif"></center> <center><img height="120px" src="https://user-images.githubusercontent.com/12688112/63067735-5a638700-bede-11e9-8147-f321b57527ec.gif"></center>

View File

@@ -1,7 +1,7 @@
{ {
"name": "__MSG_fullName__", "name": "__MSG_fullName__",
"short_name": "__MSG_Name__", "short_name": "__MSG_Name__",
"version": "1.1.9.8", "version": "1.2.0",
"default_locale": "en", "default_locale": "en",
"description": "__MSG_Description__", "description": "__MSG_Description__",
"content_scripts": [ "content_scripts": [

View File

@@ -140,24 +140,24 @@
<span class="popupElement">__MSG_youHaveSavedTimeEnd__</span> <span class="popupElement">__MSG_youHaveSavedTimeEnd__</span>
</span> </span>
<br/> <div id="sponsorTimesSkipsDoneContainer" class="popupElement" style="display: none">
<br/>
<span id="sponsorTimesSkipsDoneContainer" class="popupElement" style="display: none">
__MSG_youHaveSkipped__ __MSG_youHaveSkipped__
<span id="sponsorTimesSkipsDoneDisplay" class="popupElement"> <span id="sponsorTimesSkipsDoneDisplay" class="popupElement">
0 0
</span> </span>
<span id="sponsorTimesSkipsDoneEndWord" class="popupElement">__MSG_Segments__</span> since December 5th. <span id="sponsorTimesSkipsDoneEndWord" class="popupElement">__MSG_Segments__</span> since December 5th.
</span> </div>
<span id="sponsorTimeSavedContainer" class="popupElement" style="display: none"> <div id="sponsorTimeSavedContainer" class="popupElement" style="display: none">
__MSG_youHaveSaved__ __MSG_youHaveSaved__
<span id="sponsorTimeSavedDisplay" class="popupElement"> <span id="sponsorTimeSavedDisplay" class="popupElement">
0 0
</span> </span>
<span id="sponsorTimeSavedEndWord" class="popupElement">__MSG_minsLower__</span> since December 5th. <span id="sponsorTimeSavedEndWord" class="popupElement">__MSG_minsLower__</span> since December 5th.
</span>
</br/>
</br/>
</div>
<div class="popupElement"> <div class="popupElement">
__MSG_viewLeaderboard__ <a class="popupElement discreteLink" href="https://sponsor.ajay.app/stats" target="_blank">__MSG_here__</a>. __MSG_viewLeaderboard__ <a class="popupElement discreteLink" href="https://sponsor.ajay.app/stats" target="_blank">__MSG_here__</a>.

View File

@@ -390,7 +390,7 @@ function runThePopup() {
SB.whitelistChannel.style.display = "none"; SB.whitelistChannel.style.display = "none";
SB.unwhitelistChannel.style.display = "unset"; SB.unwhitelistChannel.style.display = "unset";
SB.downloadedSponsorMessageTimes.innerText = "Channel Whitelisted!"; SB.downloadedSponsorMessageTimes.innerText = chrome.i18n.getMessage("channelWhitelisted");
SB.downloadedSponsorMessageTimes.style.fontWeight = "bold"; SB.downloadedSponsorMessageTimes.style.fontWeight = "bold";
} }
}); });
@@ -895,18 +895,7 @@ function runThePopup() {
clearTimes(); clearTimes();
} else { } else {
let errorMessage = ""; document.getElementById("submitTimesInfoMessage").innerText = getErrorMessage(response.statusCode);
if([400, 429, 409, 502, 0].includes(response.statusCode)) {
//treat them the same
if (response.statusCode == 503) response.statusCode = 502;
errorMessage = chrome.i18n.getMessage(response.statusCode + "") + " " + chrome.i18n.getMessage("errorCode") + response.statusCode;
} else {
errorMessage = chrome.i18n.getMessage("connectionError") + response.statusCode;
}
document.getElementById("submitTimesInfoMessage").innerText = errorMessage;
document.getElementById("submitTimesInfoMessageContainer").style.display = "unset"; document.getElementById("submitTimesInfoMessageContainer").style.display = "unset";
SB.submitTimesInfoMessageContainer.style.display = "unset"; SB.submitTimesInfoMessageContainer.style.display = "unset";
@@ -1138,7 +1127,7 @@ function runThePopup() {
SB.usernameInput.style.display = "none"; SB.usernameInput.style.display = "none";
SB.setUsernameStatusContainer.style.display = "unset"; SB.setUsernameStatusContainer.style.display = "unset";
SB.setUsernameStatus.innerText = "Couldn't connect to server. Error code: " + xmlhttp.status; SB.setUsernameStatus.innerText = getErrorMessage(xmlhttp.status);
} }
}); });
}); });
@@ -1160,15 +1149,7 @@ function runThePopup() {
SB.setUsernameStatus.innerText = chrome.i18n.getMessage("success"); SB.setUsernameStatus.innerText = chrome.i18n.getMessage("success");
} else if (xmlhttp.readyState == 4) { } else if (xmlhttp.readyState == 4) {
let errorMessage = ""; SB.setUsernameStatus.innerText = getErrorMessageI(xmlhttp.status);
if([400, 429, 409, 502].includes(xmlhttp.status)) {
errorMessage = chrome.i18n.getMessage(xmlhttp.status);
} else {
errorMessage = chrome.i18n.getMessage("connectionError") + xmlhttp.status;
}
SB.setUsernameStatus.innerText = errorMessage;
} }
}); });
}); });
@@ -1224,12 +1205,7 @@ function runThePopup() {
//failure: duplicate vote //failure: duplicate vote
addVoteMessage(chrome.i18n.getMessage("voteFail"), UUID) addVoteMessage(chrome.i18n.getMessage("voteFail"), UUID)
} else if (response.successType == -1) { } else if (response.successType == -1) {
if (response.statusCode == 502) { addVoteMessage(getErrorMessage(response.statusCode), UUID)
addVoteMessage(chrome.i18n.getMessage("serverDown"), UUID)
} else {
//failure: unknown error
addVoteMessage(chrome.i18n.getMessage("connectionError") + response.statusCode, UUID)
}
} }
} }
}); });
@@ -1279,7 +1255,7 @@ function runThePopup() {
SB.whitelistChannel.style.display = "none"; SB.whitelistChannel.style.display = "none";
SB.unwhitelistChannel.style.display = "unset"; SB.unwhitelistChannel.style.display = "unset";
SB.downloadedSponsorMessageTimes.innerText = "Channel Whitelisted!"; SB.downloadedSponsorMessageTimes.innerText = chrome.i18n.getMessage("channelWhitelisted");
SB.downloadedSponsorMessageTimes.style.fontWeight = "bold"; SB.downloadedSponsorMessageTimes.style.fontWeight = "bold";
//save this //save this

View File

@@ -73,3 +73,42 @@ function localizeHtmlPage() {
} }
} }
function generateUserID(length = 36) {
let charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let result = "";
if (window.crypto && window.crypto.getRandomValues) {
values = new Uint32Array(length);
window.crypto.getRandomValues(values);
for (i = 0; i < length; i++) {
result += charset[values[i] % charset.length];
}
return result;
} else {
for (let i = 0; i < length; i++) {
result += charset[Math.floor(Math.random() * charset.length)];
}
return result;
}
}
/**
* Gets the error message in a nice string
*
* @param {int} statusCode
* @returns {string} errorMessage
*/
function getErrorMessage(statusCode) {
let errorMessage = "";
if([400, 429, 409, 502, 0].includes(statusCode)) {
//treat them the same
if (statusCode == 503) statusCode = 502;
errorMessage = chrome.i18n.getMessage(statusCode + "") + " " + chrome.i18n.getMessage("errorCode") + statusCode
+ "\n\n" + chrome.i18n.getMessage("statusReminder");
} else {
errorMessage = chrome.i18n.getMessage("connectionError") + statusCode;
}
return errorMessage;
}

View File

@@ -59,6 +59,8 @@ class PreviewBar {
duration = Math.floor(duration * 100) / 100; duration = Math.floor(duration * 100) / 100;
let width; let width;
for (let i = 0; i < timestamps.length; i++) { for (let i = 0; i < timestamps.length; i++) {
if (types[i] == null) continue;
width = (timestamps[i][1] - timestamps[i][0]) / duration * 100; width = (timestamps[i][1] - timestamps[i][0]) / duration * 100;
width = Math.floor(width * 100) / 100; width = Math.floor(width * 100) / 100;

View File

@@ -324,15 +324,7 @@ class SkipNotice {
//add this as a hidden sponsorTime //add this as a hidden sponsorTime
hiddenSponsorTimes.push(i); hiddenSponsorTimes.push(i);
let sponsorTimesLeft = sponsorTimes.slice(); updatePreviewBar();
for (let j = 0; j < hiddenSponsorTimes.length; j++) {
//remove this sponsor time
sponsorTimesLeft.splice(hiddenSponsorTimes[j], 1);
}
//update the preview
previewBar.set(sponsorTimesLeft, [], v.duration);
break; break;
} }
} }