Compare commits

...

29 Commits

Author SHA1 Message Date
Ajay Ramachandran
1abc1b9b28 Merge pull request #212 from ajayyy/experimental-ajay
UserID import, ID fixes, view count fix, embed error fix
2019-12-29 00:29:51 -05:00
Ajay Ramachandran
d10c8041bf Update build number 2019-12-29 00:28:56 -05:00
Ajay Ramachandran
c14c795474 Improved channel name query selector.
Resolves https://github.com/ajayyy/SponsorBlock/issues/199
2019-12-29 00:21:38 -05:00
Ajay Ramachandran
e5937431c3 Prevented error on embed.
Resolves https://github.com/ajayyy/SponsorBlock/issues/202
2019-12-29 00:14:51 -05:00
Ajay Ramachandran
b24a688e63 Improved view count 2019-12-29 00:10:08 -05:00
Ajay Ramachandran
10fd22f49c Fixed view counting being broken. 2019-12-29 00:08:57 -05:00
Ajay Ramachandran
f1dda95847 Merge branch 'experimental' of https://github.com/ajayyy/SponsorBlock into experimental-ajay
# Conflicts:
#	content.js
2019-12-29 00:08:41 -05:00
Ajay Ramachandran
f3f6dd171b Switched vote and view to POST. 2019-12-28 23:56:38 -05:00
Ajay Ramachandran
c802212a62 Added ability to import/export your userID. 2019-12-28 22:13:03 -05:00
Ajay Ramachandran
afb666797d Fixed IDs being localized in some parts. 2019-12-28 11:04:36 -05:00
Ajay Ramachandran
85a591c984 Merge pull request #207 from ImMaax/master
Fixed German translation
2019-12-23 21:01:04 -05:00
Max
3edaea8102 Removed word 2019-12-22 22:57:04 +01:00
Max
93c39c3ecc Fixed German translation 2019-12-22 22:54:43 +01:00
Ajay Ramachandran
ab2f0ef395 Crowdin fixes 2019-12-21 00:00:23 -05:00
Ajay Ramachandran
005ca73cce Update Crowdin configuration file 2019-12-20 23:56:49 -05:00
Ajay Ramachandran
8dd8897f1f Fixed yaml formatting 2019-12-20 23:08:34 -05:00
Ajay Ramachandran
95555ed3fd Fixed yaml 2019-12-20 23:06:07 -05:00
Ajay Ramachandran
11b71f7366 Added custom language mapping to crowdin file 2019-12-20 23:03:41 -05:00
Ajay Ramachandran
4537c70105 Update Crowdin configuration file 2019-12-20 22:42:22 -05:00
Ajay Ramachandran
42a0cff162 Update crowdin.yml 2019-12-20 17:55:35 -05:00
Ajay Ramachandran
527e6d4c24 Update Crowdin configuration file 2019-12-20 17:43:23 -05:00
Ajay Ramachandran
2c19da2117 Merge pull request #201 from ajayyy/experimental-ajay
Fixed channel whitelisting on old YouTube
2019-12-19 01:06:48 -05:00
Ajay Ramachandran
7ee1cc911f Increase version number. 2019-12-19 01:05:11 -05:00
Ajay Ramachandran
36078acaee Fixed channel whitelisting on old YouTube. 2019-12-19 00:46:37 -05:00
Ajay Ramachandran
c17e47ddd3 Merge pull request #198 from ajayyy/experimental-ajay
German translation + fixes
2019-12-19 00:09:46 -05:00
Ajay Ramachandran
81bf54c42d Upped version number 2019-12-19 00:08:31 -05:00
Ajay Ramachandran
5b693e81fd Added german translation thanks to Floatinger. 2019-12-19 00:08:07 -05:00
Ajay Ramachandran
00115cd707 Fixed string not using language file. 2019-12-17 18:32:20 -05:00
Ajay Ramachandran
e992844fa2 Fixed channel parsing error.
Fixes whitelisting issues.
2019-12-17 18:32:01 -05:00
8 changed files with 402 additions and 18 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 konnten nicht gesendet werden, bitte versuche es später erneut."
},
"sponsorFound": {
"message": "Die gesponsorten Inhalte dieses Videos befinden 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 das Mitzählen übersprungener Sponsoren"
},
"enableViewTracking": {
"message": "Aktiviere das 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 übersprangst "
},
"youHaveSaved": {
"message": "Du erspartest dir "
},
"minLower": {
"message": "Minute"
},
"minsLower": {
"message": "Minuten"
},
"hourLower": {
"message": "Stunde"
},
"hoursLower": {
"message": "Stunden"
},
"youHaveSavedTime": {
"message": "Du erspartest anderen"
},
"youHaveSavedTimeEnd": {
"message": " ihrer Zeit."
}
}

View File

@@ -320,5 +320,17 @@
},
"statusReminder": {
"message": "Check status.sponsor.ajay.app for server status."
},
"changeUserID": {
"message": "Import/Export Your UserID"
},
"whatChangeUserID": {
"message": "This should be kept private. This is like a password and should not be shared with anyone. If someone has this, they can impersonate you."
},
"setUserID": {
"message": "Set UserID"
},
"userIDChangeWarning": {
"message": "Warning: Changing the UserID is permanent. Are you sure you would like to do this? Make sure to backup your old one just in case."
}
}

View File

@@ -109,7 +109,7 @@ function submitVote(type, UUID, callback) {
}
//publish this vote
sendRequestToServer("GET", "/api/voteOnSponsorTime?UUID=" + UUID + "&userID=" + userID + "&type=" + type, function(xmlhttp, error) {
sendRequestToServer("POST", "/api/voteOnSponsorTime?UUID=" + UUID + "&userID=" + userID + "&type=" + type, function(xmlhttp, error) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
callback({
successType: 1

View File

@@ -498,12 +498,12 @@ function updatePreviewBar() {
function getChannelID() {
//get channel id
let channelNameContainer = document.getElementById("channel-name");
let channelURLContainer = channelNameContainer.querySelector("#container").querySelector("#text-container").querySelector("#text").firstElementChild;
let channelURLContainer = null;
if (channelURLContainer === null) {
channelURLContainer = document.querySelector("#channel-name > #container > #text-container > #text");
if (channelURLContainer !== null) {
channelURLContainer = channelURLContainer.firstElementChild;
} else {
//old YouTube theme
let channelContainers = document.getElementsByClassName("yt-user-info");
if (channelContainers.length != 0) {
@@ -651,9 +651,9 @@ function skipToTime(v, index, sponsorTimes, openNotice) {
}
}
//send telemetry that a this sponsor was skipped happened
//send telemetry that a this sponsor was skipped
if (trackViewCount && !sponsorSkipped[index]) {
sendRequestToServer("GET", "/api/viewedVideoSponsorTime?UUID=" + currentUUID);
sendRequestToServer("POST", "/api/viewedVideoSponsorTime?UUID=" + currentUUID);
if (!disableAutoSkip) {
// Count this as a skip
@@ -940,11 +940,13 @@ function vote(type, UUID, skipNotice) {
let sponsorIndex = UUIDs.indexOf(UUID);
// See if the local time saved count and skip count should be reverted
// See if the local time saved count and skip count should be saved
if (type == 0 && sponsorSkipped[sponsorIndex] || type == 1 && !sponsorSkipped[sponsorIndex]) {
let factor = 1;
if (type == 0) {
factor = -1;
sponsorSkipped[sponsorIndex] = false;
}
// Count this as a skip
@@ -958,8 +960,6 @@ function vote(type, UUID, skipNotice) {
chrome.storage.sync.set({"skipCount": result.skipCount + factor * 1 });
});
sponsorSkipped[sponsorIndex] = !sponsorSkipped[sponsorIndex];
}
chrome.runtime.sendMessage({

9
crowdin.yml Normal file
View File

@@ -0,0 +1,9 @@
files:
- source: /_locales/en/*
translation: /_locales/%two_letters_code%/%original_file_name%
languages_mapping:
two_letters_code:
pr-BR: "pt_BR"
pr-PT: "pt_PT"
zh-CN: "zh_CH"
zh-TW: "zh_TW"

View File

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

View File

@@ -253,6 +253,28 @@
<br/>
<br/>
<button id="changeUserIDButton" class="warningButton popupElement">__MSG_changeUserID__</button>
<br/>
<sub class="popupElement">
__MSG_whatChangeUserID__
</sub>
<div id="changeUserID" class="popupElement" style="display: none">
<br/>
<br/>
<input id="userIDInput" hint="userID"></input>
<br/>
<br/>
<button id="setUserID" class="warningButton popupElement">__MSG_setUserID__</button>
</div>
<br/>
<br/>
<button id="disableSponsorViewTracking" class="warningButton popupElement">__MSG_disableViewTracking__</button>
<button id="enableSponsorViewTracking" style="display: none" class="warningButton popupElement">__MSG_enableViewTracking__</button>
<br/>

View File

@@ -82,6 +82,11 @@ function runThePopup() {
"setUsername",
"usernameInput",
"submitUsername",
// UserID
"changeUserID",
"changeUserIDButton",
"userIDInput",
"setUserID",
// More
"submissionSection",
"mainControls",
@@ -118,6 +123,8 @@ function runThePopup() {
SB.enableSponsorViewTracking.addEventListener("click", enableSponsorViewTracking);
SB.setUsernameButton.addEventListener("click", setUsernameButton);
SB.submitUsername.addEventListener("click", submitUsername);
SB.changeUserIDButton.addEventListener("click", changeUserIDButton);
SB.setUserID.addEventListener("click", setUserID);
SB.optionsButton.addEventListener("click", openOptions);
SB.reportAnIssue.addEventListener("click", reportAnIssue);
SB.hideDiscordButton.addEventListener("click", hideDiscordButton);
@@ -390,7 +397,7 @@ function runThePopup() {
SB.whitelistChannel.style.display = "none";
SB.unwhitelistChannel.style.display = "unset";
SB.downloadedSponsorMessageTimes.innerText = "Channel Whitelisted!";
SB.downloadedSponsorMessageTimes.innerText = chrome.i18n.getMessage("channelWhitelisted");
SB.downloadedSponsorMessageTimes.style.fontWeight = "bold";
}
});
@@ -740,8 +747,8 @@ function runThePopup() {
tabs[0].id,
{message: "getCurrentTime"},
function (response) {
let minutes = document.getElementById(idStartName + chrome.i18n.getMessage("Mins") + index);
let seconds = document.getElementById(idStartName + chrome.i18n.getMessage("Secs") + index);
let minutes = document.getElementById(idStartName + "Minutes" + index);
let seconds = document.getElementById(idStartName + "Seconds" + index);
minutes.value = getTimeInMinutes(response.currentTime);
seconds.value = getTimeInFormattedSeconds(response.currentTime);
@@ -752,8 +759,8 @@ function runThePopup() {
//id start name is whether it is the startTime or endTime
//gives back the time in seconds
function getSponsorTimeEditTimes(idStartName, index) {
let minutes = document.getElementById(idStartName + chrome.i18n.getMessage("Mins") + index);
let seconds = document.getElementById(idStartName + chrome.i18n.getMessage("Secs") + index);
let minutes = document.getElementById(idStartName + "Minutes" + index);
let seconds = document.getElementById(idStartName + "Seconds" + index);
return parseInt(minutes.value) * 60 + parseFloat(seconds.value);
}
@@ -1158,6 +1165,22 @@ function runThePopup() {
SB.setUsernameContainer.style.display = "none";
SB.setUsername.style.display = "unset";
}
function changeUserIDButton() {
//get the user ID
chrome.storage.sync.get(["userID"], function(result) {
SB.userIDInput.value = result.userID;
SB.setUserID.style.display = "unset";
SB.userIDInput.style.display = "unset";
SB.changeUserID.style.display = "unset";
});
}
function setUserID() {
if (!confirm(chrome.i18n.getMessage("userIDChangeWarning"))) return;
chrome.storage.sync.set({"userID": SB.userIDInput.value});
}
//this is not a YouTube video page
function displayNoVideo() {
@@ -1255,7 +1278,7 @@ function runThePopup() {
SB.whitelistChannel.style.display = "none";
SB.unwhitelistChannel.style.display = "unset";
SB.downloadedSponsorMessageTimes.innerText = "Channel Whitelisted!";
SB.downloadedSponsorMessageTimes.innerText = chrome.i18n.getMessage("channelWhitelisted");
SB.downloadedSponsorMessageTimes.style.fontWeight = "bold";
//save this