mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2025-12-12 22:47:18 +03:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f35d34a807 | ||
|
|
468e33eff7 | ||
|
|
600f9e4b85 | ||
|
|
9cb3da4a7f | ||
|
|
a66c7c8063 | ||
|
|
0a84dbd3a5 | ||
|
|
2fa412e574 | ||
|
|
f240416886 | ||
|
|
2a025b7977 | ||
|
|
f44d2b67e5 | ||
|
|
6b15ebac99 | ||
|
|
ff41251f17 | ||
|
|
c7c1cb79a8 | ||
|
|
fc155ccdfa | ||
|
|
dfad1a5636 | ||
|
|
6790952f86 | ||
|
|
1a28f714a1 | ||
|
|
55a55fefba | ||
|
|
fe74f7caa3 | ||
|
|
108aac0e79 | ||
|
|
008c07acc3 | ||
|
|
831a3c1b5a | ||
|
|
dc7b63d735 | ||
|
|
9267f36165 | ||
|
|
d4bd5313fc | ||
|
|
c69fe53ea6 | ||
|
|
d7c496847f |
10
README.md
10
README.md
@@ -1,5 +1,5 @@
|
||||
<p align="center">
|
||||
<img src="icons/LogoSponsorBlocker256px.png" alt="Logo"></img>
|
||||
<a href="https://sponsor.ajay.app"><img src="icons/LogoSponsorBlocker256px.png" alt="Logo"></img></a>
|
||||
|
||||
<br/>
|
||||
<sub>Logo by <a href="https://github.com/munadikieh">@munadikieh</a></sub>
|
||||
@@ -8,12 +8,18 @@
|
||||
<h1 align="center">SponsorBlock</h1>
|
||||
|
||||
<p align="center">
|
||||
<b>Download:</b>
|
||||
<a href="https://chrome.google.com/webstore/detail/mnjggcdmjocbbbhaepdhchncahnbgone">Chrome/Chromium</a> |
|
||||
<a href="https://addons.mozilla.org/addon/sponsorblock/?src=external-github">Firefox</a> |
|
||||
<a href="https://sponsor.ajay.app">Website</a> |
|
||||
<a href="https://sponsor.ajay.app/stats">Stats</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<b>Unofficial Ports:</b>
|
||||
<a href="https://github.com/ajayyy/SponsorBlock/wiki/Unofficial-Ports#mpv-media-player">MPV</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://addons.mozilla.org/addon/sponsorblock/?src=external-github"><img src="https://img.shields.io/amo/users/sponsorblock?label=Firefox%20Users" alt="Badge"></img></a>
|
||||
<a href="https://chrome.google.com/webstore/detail/mnjggcdmjocbbbhaepdhchncahnbgone"><img src="https://img.shields.io/chrome-web-store/users/mnjggcdmjocbbbhaepdhchncahnbgone?label=Chome%20Users" alt="Badge"></img></a>
|
||||
@@ -48,6 +54,8 @@ You can load this project as an unpacked extension. Make sure to rename the `con
|
||||
|
||||
The awesome [Invidious API](https://github.com/omarroth/invidious/wiki/API) is used to grab the time the video was published.
|
||||
|
||||
Original code from [YTSponsorSkip](https://github.com/OfficialNoob/YTSponsorSkip), but not much of the code is left.
|
||||
|
||||
Some icons made by <a href="https://www.flaticon.com/authors/gregor-cresnar" title="Gregor Cresnar">Gregor Cresnar</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> and are licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a>
|
||||
|
||||
Some icons made by <a href="https://www.flaticon.com/authors/freepik" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a> are licensed by <a href="http://creativecommons.org/licenses/by/3.0/" title="Creative Commons BY 3.0" target="_blank">CC 3.0 BY</a>
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
"message": "Sponsorship Ends Now"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "This probably isn't a YouTube tab, or you clicked too early. \n If you know this is a YouTube tab,\n close this popup and open it again."
|
||||
"message": "This probably isn't a YouTube tab, or you clicked too early. \n If you know this is a YouTube tab,\n close this popup and open it again.\n\nYou must refresh your YouTube tab after installing or updating (even auto-update) the extension."
|
||||
},
|
||||
"success": {
|
||||
"message": "Success!"
|
||||
@@ -141,9 +141,6 @@
|
||||
"removeFromWhitelist": {
|
||||
"message": "Remove Channel From Whitelist"
|
||||
},
|
||||
"whitelistDescription": {
|
||||
"message": "Whitelist the channels who do sponsorships ethically to encourage good behavior, or maybe if they are just entertaining and funny. Or don't, that's your call."
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "Vote On A Sponsor Time"
|
||||
},
|
||||
@@ -193,10 +190,10 @@
|
||||
"message": "Options"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Hide Buttons On YouTube Player"
|
||||
"message": "Show Buttons On YouTube Player"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Show Buttons On YouTube Player"
|
||||
"message": "Hide Buttons On YouTube Player"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "This hides the buttons that appear on the YouTube player to submit sponsors. I can see this being annoying for some\n people. Instead of using the button there, this popup can be used to submit sponsors. To hide the notice that appears, \n use the button that appears on the notice saying \"Don't show this again\". You can always enable these settings again later."
|
||||
@@ -262,5 +259,18 @@
|
||||
},
|
||||
"keybindDescriptionComplete": {
|
||||
"message": "The keybind has been set to: "
|
||||
},
|
||||
"0": {
|
||||
"message": "Connection Timeout. Check your internet connection. If your internet is working, the server is probably overloaded or down."
|
||||
},
|
||||
"disableSkipping": {
|
||||
"message": "Disable SponsorBlock"
|
||||
},
|
||||
"enableSkipping": {
|
||||
"message": "Enable SponsorBlock"
|
||||
},
|
||||
"yourWork": {
|
||||
"message": "Your Work",
|
||||
"description": "Used to describe the section that will show you the statistics from your submissions."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
"fullName": {
|
||||
"message": "SponsorBlock pour YouTube - Enlève les messages commerciaux et publicités intégrées",
|
||||
"message": "SponsorBlock pour YouTube - Supprime les messages commerciaux et publicités intégrées",
|
||||
"description": "Name of the extension."
|
||||
},
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"message": "Soumission invalide"
|
||||
},
|
||||
"429": {
|
||||
"message": "Vous cherchez à envoyer beaucoup de segments, il y en a vraiment autant ?"
|
||||
"message": "Vous cherchez à envoyer beaucoup de segments, y en a-t-il vraiment autant ?"
|
||||
},
|
||||
"409": {
|
||||
"message": "Déja soumis"
|
||||
@@ -28,7 +28,7 @@
|
||||
"message": "Le serveur ne fonctionne pas. Contactez le développeur."
|
||||
},
|
||||
"channelWhitelisted": {
|
||||
"message": "Cette chaine est sur la liste blanche !"
|
||||
"message": "Cette chaîne est sur la liste blanche !"
|
||||
},
|
||||
"Sponsor": {
|
||||
"message": "message commercial"
|
||||
@@ -37,19 +37,19 @@
|
||||
"message": "messages commerciaux"
|
||||
},
|
||||
"Segment": {
|
||||
"message": "segment de message commercial"
|
||||
"message": "segment commercial"
|
||||
},
|
||||
"Segments": {
|
||||
"message": "segments de message commercial"
|
||||
"message": "segments commerciaux"
|
||||
},
|
||||
"noticeTitle": {
|
||||
"message": "Message passé"
|
||||
"message": "Message commercial passé"
|
||||
},
|
||||
"reportButtonTitle": {
|
||||
"message": "Incorrect"
|
||||
},
|
||||
"reportButtonInfo": {
|
||||
"message": "Signaler que ce segment est incorrect ou n'existe pas."
|
||||
"message": "Signaler que ce segment commercial est incorrect ou n'existe pas."
|
||||
},
|
||||
"Dismiss": {
|
||||
"message": "Fermer"
|
||||
@@ -67,7 +67,7 @@
|
||||
"message": "Ne plus montrer"
|
||||
},
|
||||
"hitGoBack": {
|
||||
"message": "Cliquez sur revenir en arrière pour revenir avant le saut du segment"
|
||||
"message": "Cliquez sur revenir en arrière pour revenir avant le saut du segment commercial"
|
||||
},
|
||||
"unskip": {
|
||||
"message": "Revenir en arrière"
|
||||
@@ -79,28 +79,28 @@
|
||||
"message": "En pause"
|
||||
},
|
||||
"confirmMSG": {
|
||||
"message": "\n\nPour modifier ou enlever des soumissions, cliquez sur le bouton d'info."
|
||||
"message": "\n\nPour modifier ou supprimer des soumissions, cliquez sur le bouton d'info ou ouvrez la fenêtre de l'extension en cliquant sur son icône dans le coin en haut à droite."
|
||||
},
|
||||
"clearThis": {
|
||||
"message": "Êtes-vous certain(e) que vous voulez enlever vos soumissions ?\n\n"
|
||||
"message": "Êtes-vous certain(e) de vouloir supprimer vos soumissions ?\n\n"
|
||||
},
|
||||
"Unknown": {
|
||||
"message": "Erreur, essayer plus tard."
|
||||
"message": "Une erreur s'est produite lors de la soumission, veuillez ré-essayer plus tard."
|
||||
},
|
||||
"sponsorFound": {
|
||||
"message": "Les messages commerciaux sont déjà dans notre base de donnée pour cette vidéo !"
|
||||
},
|
||||
"sponsor404": {
|
||||
"message": "Pas de messages trouvés"
|
||||
"message": "Pas de messages commerciaux trouvés"
|
||||
},
|
||||
"sponsorStart": {
|
||||
"message": "Début du message"
|
||||
"message": "Début du message commercial"
|
||||
},
|
||||
"sponsorEnd": {
|
||||
"message": "Fin du message"
|
||||
"message": "Fin du message commercial"
|
||||
},
|
||||
"noVideoID": {
|
||||
"message": "Ceci n'est pas un onglet YouTube, ou vous avez cliqué trop tôt. \n Si vous êtes sur(e) que c'est un onglet YouTube, fermez ce menu et réessayer."
|
||||
"message": "Ceci n'est pas un onglet YouTube, ou vous avez cliqué trop tôt. \n Si vous êtes sûr(e) que c'est un onglet YouTube, fermez cette fenêtre et réessayez."
|
||||
},
|
||||
"success": {
|
||||
"message": "Succès !"
|
||||
@@ -109,21 +109,158 @@
|
||||
"message": "A voté !"
|
||||
},
|
||||
"voteFail": {
|
||||
"message": "Vous avez déjà voté pour ce choix auparavant."
|
||||
"message": "Vous avez déjà voté pour ce choix."
|
||||
},
|
||||
"serverDown": {
|
||||
"message": "Le serveur ne fonctionne pas. Contactez le développeur."
|
||||
},
|
||||
"connectionError": {
|
||||
"message": "Erreur de connexion, Code : "
|
||||
"message": "Erreur de connexion. Code d'erreur : "
|
||||
},
|
||||
"wantToSubmit": {
|
||||
"message": "Voulez-vous soumettre les messages pour cette vidéo"
|
||||
"message": "Voulez-vous soumettre les segments commerciaux pour cette vidéo"
|
||||
},
|
||||
"leftTimes": {
|
||||
"message": "Vous avez laissé des messages non soumis. Retournez sur la vidéo pour les soumettre (ils ont été conservés)."
|
||||
"message": "Vous avez laissé des segments commerciaux non soumis. Retournez sur la vidéo pour les soumettre (ils ont été conservés)."
|
||||
},
|
||||
"clearTimes": {
|
||||
"message": "Supprimer les segments commerciaux"
|
||||
},
|
||||
"openPopup": {
|
||||
"message": "Ouvrir l'encart SponsorBlock"
|
||||
},
|
||||
"SubmitTimes": {
|
||||
"message": "Soumettre les segments commerciaux"
|
||||
},
|
||||
"submitCheck": {
|
||||
"message": "Soumettre ce(s) message(s) ?"
|
||||
"message": "Êtes-vous sûr de vouloir soumettre ces segments?"
|
||||
},
|
||||
"whitelistChannel": {
|
||||
"message": "Ajouter la chaîne à la liste blanche"
|
||||
},
|
||||
"removeFromWhitelist": {
|
||||
"message": "Supprimer la chaîne de la liste blanche"
|
||||
},
|
||||
"whitelistDescription": {
|
||||
"message": "Ajouter à la liste blanche les chaînes qui publient des messages commerciaux de façon éthique pour encourager les bons comportements, ou qui publient des messages commerciaux divertissants ou drôles. Ou pas, c'est votre choix."
|
||||
},
|
||||
"voteOnTime": {
|
||||
"message": "Voter sur un segment commercial"
|
||||
},
|
||||
"recordTimes": {
|
||||
"message": "Enregistrer un segment commercial"
|
||||
},
|
||||
"soFarUHSubmited": {
|
||||
"message": "Vous avez soumis jusqu'à présent"
|
||||
},
|
||||
"savedPeopleFrom": {
|
||||
"message": "Vous avez fait gagner aux autres "
|
||||
},
|
||||
"viewLeaderboard": {
|
||||
"message": "Consulter le classement"
|
||||
},
|
||||
"here": {
|
||||
"message": "ici"
|
||||
},
|
||||
"recordTimesDescription": {
|
||||
"message": "Cliquez sur le bouton ci-dessous quand le segment commercial commence puis \nse termine pour l'enregistrer et le soumettre à la base de données."
|
||||
},
|
||||
"popupHint": {
|
||||
"message": "Astuce : utilisez la touche point-virgule lorsque la vidéo est sélectionnée pour enregistrer le début et la fin d'un segment commercial; utilisez la touche guillemet pour le soumettre. (Les touches peuvent être modifiées dans les options)"
|
||||
},
|
||||
"lastTimes": {
|
||||
"message": "Derniers temps choisis pour le segment commercial"
|
||||
},
|
||||
"clearTimesButton": {
|
||||
"message": "Supprimer les temps"
|
||||
},
|
||||
"submitTimesButton": {
|
||||
"message": "Soumettre les temps"
|
||||
},
|
||||
"publicStats": {
|
||||
"message": "Affiché sur le classement public pour montrer vos contributions. Voir sur"
|
||||
},
|
||||
"setUsername": {
|
||||
"message": "Choisir pseudo"
|
||||
},
|
||||
"discordAdvert": {
|
||||
"message": "Rejoignez le serveur Discord officiel pour toutes suggestions ou remarques!"
|
||||
},
|
||||
"hideThis": {
|
||||
"message": "Cacher"
|
||||
},
|
||||
"Options": {
|
||||
"message": "Options"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Montrer les boutons sur le lecteur YouTube"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Cacher les boutons sur le lecteur YouTube"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "Cela permet de cacher du lecteur YouTube les boutons utilisés pour soumettre des segments commerciaux. Je peux \ncomprendre que certaines personnes les trouvent perturbants. Au lieu d'utiliser ces boutons, cette fenêtre peut être utilisée \npour soumettre des segments commerciaux. Pour cacher la notification, utilisez le bouton \"Ne plus montrer\" sur la notification. Vous pouvez toujours réactiver ces paramètres plus tard."
|
||||
},
|
||||
"showInfoButton": {
|
||||
"message": "Montrer le bouton Info sur le lecteur YouTube"
|
||||
},
|
||||
"hideInfoButton": {
|
||||
"message": "Cacher le bouton Info sur le lecteur YouTube"
|
||||
},
|
||||
"whatInfoButton": {
|
||||
"message": "Il s'agit du bouton qui ouvre l'encart sur la page YouTube."
|
||||
},
|
||||
"hideDeleteButton": {
|
||||
"message": "Cacher le bouton Supprimer sur le lecteur YouTube"
|
||||
},
|
||||
"showDeleteButton": {
|
||||
"message": "Montrer le bouton Supprimer sur le lecteur YouTube"
|
||||
},
|
||||
"whatDeleteButton": {
|
||||
"message": "Il s'agit du bouton qui permet de supprimer tous les segments commerciaux depuis le lecteur YouTube."
|
||||
},
|
||||
"disableViewTracking": {
|
||||
"message": "Désactiver le suivi des vues de segments commerciaux"
|
||||
},
|
||||
"enableViewTracking": {
|
||||
"message": "Activer le suivi des vues de segments commerciaux"
|
||||
},
|
||||
"whatViewTracking": {
|
||||
"message": "Cette fonctionnalité suit quels segments commerciaux vous avez sautés afin de calculer le bénéfice des soumissions des \nautres utilisateurs. Elle est également utilisée comme métrique, avec les haut-votes, afin de s'assurer que les spams \nsont ignorés. L'extension envoie un message au serveur à chauqe fois qu'un segment commercial est sauté. Avec un peu de chance, peu de personnes désactiveront cette fonctionnalité afin d'obtenir des nombres de vues exacts. :)"
|
||||
},
|
||||
"showNotice": {
|
||||
"message": "Afficher la notification"
|
||||
},
|
||||
"longDescription": {
|
||||
"message": "SponsorBlock est une extension qui permet de passer les messages commerciaux des vidéos YouTube. SponsorBlock est une extension pour navigateur basée sur le crowdsourcing permettant à n'importe qui de soumettre le début et la fin des segments commerciaux sur les vidéos YouTube. Dès qu'une personne a soumis ces informations, les autres utilisateurs de l'extension en bénéficieront et verront les messages commerciaux automatiquement sautés.",
|
||||
"description": "Full description of the extension on the store pages."
|
||||
},
|
||||
"website": {
|
||||
"message": "Site web",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"sourceCode": {
|
||||
"message": "Code source",
|
||||
"description": "Used on Firefox Store Page"
|
||||
},
|
||||
"noticeUpdate": {
|
||||
"message": "La notification a été mise à jour !",
|
||||
"description": "The first line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"noticeUpdate2": {
|
||||
"message": "Si elle ne vous plaît pas, cliquez sur le bouton \"Ne plus montrer\"",
|
||||
"description": "The second line of the message displayed after the notice was upgraded."
|
||||
},
|
||||
"setStartSponsorShortcut": {
|
||||
"message": "Changer le raccourci pour enregistrer un segment"
|
||||
},
|
||||
"setSubmitKeybind": {
|
||||
"message": "Changer le raccourci pour soumettre les segments"
|
||||
},
|
||||
"keybindDescription": {
|
||||
"message": "Appuyez sur une touche"
|
||||
},
|
||||
"keybindDescriptionComplete": {
|
||||
"message": "Le raccourci choisi est : "
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,10 +194,10 @@
|
||||
"message": "Opzioni"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Nascondi i Pulsanti nel Lettore di YouTube"
|
||||
"message": "Mostra i Pulsanti nel Lettore di YouTube"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Mostra i Pulsanti nel Lettore di YouTube"
|
||||
"message": "Nascondi i Pulsanti nel Lettore di YouTube"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "Nasconde i pulsanti che appaiono nel lettore di YouTube per inviare spezzoni sponsorizzati. Capisco che può essere fastidioso per alcune\n persone. Invece di utilizzare quei pulsanti, è possibile utilizzare questo popup per inviare gli spezzoni sponsorizzati. Per nascondere l'avviso che appare, \nusa il bottone \"Non mostrare più\" nell'avviso. Potrai sempre abilitare nuovamente queste impostazioni in futuro."
|
||||
|
||||
@@ -194,10 +194,10 @@
|
||||
"message": "Opções"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Esconder botões no player do Youtube"
|
||||
"message": "Mostrar botões no player do Youtube"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Mostrar botões no player do Youtube"
|
||||
"message": "Esconder botões no player do Youtube"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "Isto esconde os botões que aparecem no player do Youtube para submeter patrocínios. Entendemos que possa ser\n incómodo a algumas pessoas. Em vez de usar esses botões pode usar os do popup. Para esconder a mensagem que aparece, \n ususe o botão na mesma que diz \"Don't show this again\". Pode sempre reactivar estas definições novamente."
|
||||
|
||||
@@ -193,10 +193,10 @@
|
||||
"message": "Opções"
|
||||
},
|
||||
"showButtons": {
|
||||
"message": "Esconder botões no player do Youtube"
|
||||
"message": "Mostrar botões no player do Youtube"
|
||||
},
|
||||
"hideButtons": {
|
||||
"message": "Mostrar botões no player do Youtube"
|
||||
"message": "Esconder botões no player do Youtube"
|
||||
},
|
||||
"hideButtonsDescription": {
|
||||
"message": "Isto esconde os botões que aparecem no player do Youtube para submeter patrocínios. Entendemos que possa ser\n incómodo a algumas pessoas. Em vez de usar esses botões pode usar os do popup. Para esconder a mensagem que aparece, \n ususe o botão na mesma que diz \"Don't show this again\". Pode sempre reactivar estas definições novamente."
|
||||
|
||||
@@ -42,22 +42,24 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
|
||||
|
||||
//add help page on install
|
||||
chrome.runtime.onInstalled.addListener(function (object) {
|
||||
chrome.storage.sync.get(["userID", "shownInstallPage"], function(result) {
|
||||
const userID = result.userID;
|
||||
setTimeout(function() {
|
||||
chrome.storage.sync.get(["userID"], function(result) {
|
||||
const userID = result.userID;
|
||||
|
||||
// If there is no userID, then it is the first install.
|
||||
if (!userID){
|
||||
//open up the install page
|
||||
chrome.tabs.create({url: chrome.extension.getURL("/help/"+chrome.i18n.getMessage("helpPage"))});
|
||||
// If there is no userID, then it is the first install.
|
||||
if (!userID){
|
||||
//open up the install page
|
||||
chrome.tabs.create({url: chrome.extension.getURL("/help/index_en.html")});
|
||||
|
||||
//generate a userID
|
||||
const newUserID = generateUserID();
|
||||
//save this UUID
|
||||
chrome.storage.sync.set({
|
||||
"userID": newUserID
|
||||
});
|
||||
}
|
||||
});
|
||||
//generate a userID
|
||||
const newUserID = generateUserID();
|
||||
//save this UUID
|
||||
chrome.storage.sync.set({
|
||||
"userID": newUserID
|
||||
});
|
||||
}
|
||||
});
|
||||
}, 1500);
|
||||
});
|
||||
|
||||
//gets the sponsor times from memory
|
||||
@@ -157,6 +159,9 @@ function submitTimes(videoID, callback) {
|
||||
|
||||
//submit these times
|
||||
for (let i = 0; i < sponsorTimes.length; i++) {
|
||||
//to prevent it from happeneing twice
|
||||
let increasedContributionAmount = false;
|
||||
|
||||
//submit the sponsorTime
|
||||
sendRequestToServer("GET", "/api/postVideoSponsorTimes?videoID=" + videoID + "&startTime=" + sponsorTimes[i][0] + "&endTime=" + sponsorTimes[i][1]
|
||||
+ "&userID=" + userID, function(xmlhttp, error) {
|
||||
@@ -175,7 +180,11 @@ function submitTimes(videoID, callback) {
|
||||
}
|
||||
|
||||
//save the amount contributed
|
||||
chrome.storage.sync.set({"sponsorTimesContributed": currentContributionAmount + sponsorTimes.length});
|
||||
if (!increasedContributionAmount) {
|
||||
increasedContributionAmount = true;
|
||||
|
||||
chrome.storage.sync.set({"sponsorTimesContributed": currentContributionAmount + sponsorTimes.length});
|
||||
}
|
||||
});
|
||||
}
|
||||
} else if (error) {
|
||||
|
||||
86
content.js
86
content.js
@@ -67,6 +67,15 @@ var sponsorTimesSubmitting = [];
|
||||
//this is used to close the popup on YouTube when the other popup opens
|
||||
var popupInitialised = false;
|
||||
|
||||
//should skips happen at all
|
||||
var disableSkipping = false;
|
||||
chrome.storage.sync.get(["disableSkipping"], function(result) {
|
||||
let disableSkippingStorage = result.disableSkipping;
|
||||
if (disableSkippingStorage != undefined) {
|
||||
disableSkipping = disableSkippingStorage;
|
||||
}
|
||||
});
|
||||
|
||||
//should view counts be tracked
|
||||
var trackViewCount = false;
|
||||
chrome.storage.sync.get(["trackViewCount"], function(result) {
|
||||
@@ -378,6 +387,18 @@ function sponsorsLookup(id, channelIDPromise) {
|
||||
v.addEventListener('durationchange', updatePreviewBar);
|
||||
}
|
||||
|
||||
if (channelIDPromise != null) {
|
||||
if (channelIDPromise.isFulfilled) {
|
||||
whitelistCheck();
|
||||
} else if (channelIDPromise.isRejected) {
|
||||
//try again
|
||||
wait(getChannelID).then(whitelistCheck).catch();
|
||||
} else {
|
||||
//add it as a then statement
|
||||
channelIDPromise.then(whitelistCheck);
|
||||
}
|
||||
}
|
||||
|
||||
//check database for sponsor times
|
||||
//made true once a setTimeout has been created to try again after a server error
|
||||
let recheckStarted = false;
|
||||
@@ -396,18 +417,6 @@ function sponsorsLookup(id, channelIDPromise) {
|
||||
updatePreviewBar();
|
||||
}
|
||||
|
||||
if (channelIDPromise != null) {
|
||||
if (channelIDPromise.isFulfilled) {
|
||||
whitelistCheck();
|
||||
} else if (channelIDPromise.isRejected) {
|
||||
//try again
|
||||
wait(getChannelID).then(whitelistCheck).catch();
|
||||
} else {
|
||||
//add it as a then statement
|
||||
channelIDPromise.then(whitelistCheck);
|
||||
}
|
||||
}
|
||||
|
||||
sponsorLookupRetries = 0;
|
||||
} else if (xmlhttp.readyState == 4 && xmlhttp.status == 404) {
|
||||
sponsorDataFound = false;
|
||||
@@ -420,7 +429,8 @@ function sponsorsLookup(id, channelIDPromise) {
|
||||
|
||||
//if less than 3 days old
|
||||
if ((Date.now() / 1000) - unixTimePublished < 259200) {
|
||||
setTimeout(() => sponsorsLookup(id), 10000);
|
||||
//TODO lower when server becomes better
|
||||
setTimeout(() => sponsorsLookup(id), 180000);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -429,17 +439,20 @@ function sponsorsLookup(id, channelIDPromise) {
|
||||
} else if (xmlhttp.readyState == 4 && sponsorLookupRetries < 90 && !recheckStarted) {
|
||||
recheckStarted = true;
|
||||
|
||||
//TODO lower when server becomes better (back to 1 second)
|
||||
//some error occurred, try again in a second
|
||||
setTimeout(() => sponsorsLookup(id), 1000);
|
||||
setTimeout(() => sponsorsLookup(id), 10000);
|
||||
|
||||
sponsorLookupRetries++;
|
||||
}
|
||||
});
|
||||
|
||||
//add the event to run on the videos "ontimeupdate"
|
||||
v.ontimeupdate = function () {
|
||||
sponsorCheck();
|
||||
};
|
||||
if (!disableSkipping) {
|
||||
v.ontimeupdate = function () {
|
||||
sponsorCheck();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function updatePreviewBar() {
|
||||
@@ -523,29 +536,18 @@ function whitelistCheck() {
|
||||
UUIDs = [];
|
||||
|
||||
channelWhitelisted = true;
|
||||
|
||||
//make sure the whitelistedChannels array isn't broken and full of null entries
|
||||
//TODO: remove this at some point in the future as the bug that caused this should be patched
|
||||
if (whitelistedChannels.some((el) => el === null)) {
|
||||
//remove the entries that are null
|
||||
let cleanWhitelistedChannelsArray = [];
|
||||
for (let i = 0; i < whitelistedChannels.length; i++) {
|
||||
let channelURL = whitelistedChannels[i];
|
||||
if (channelURL !== null) {
|
||||
//add it
|
||||
cleanWhitelistedChannelsArray.push(channelURL);
|
||||
}
|
||||
}
|
||||
|
||||
//save this value
|
||||
chrome.storage.sync.set({"whitelistedChannels": cleanWhitelistedChannelsArray});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//video skipping
|
||||
function sponsorCheck() {
|
||||
if (disableSkipping) {
|
||||
// Make sure this isn't called again
|
||||
v.ontimeupdate = null;
|
||||
return;
|
||||
}
|
||||
|
||||
let skipHappened = false;
|
||||
|
||||
if (sponsorTimes != null) {
|
||||
@@ -1007,6 +1009,8 @@ function sendSubmitMessage(){
|
||||
|
||||
let currentVideoID = sponsorVideoID;
|
||||
|
||||
let currentSponsorTimes = submitSponsorTimes;
|
||||
|
||||
chrome.runtime.sendMessage({
|
||||
message: "submitTimes",
|
||||
videoID: currentVideoID
|
||||
@@ -1030,17 +1034,21 @@ function sendSubmitMessage(){
|
||||
|
||||
//clear the sponsor times
|
||||
let sponsorTimeKey = "sponsorTimes" + currentVideoID;
|
||||
chrome.storage.sync.set({[sponsorTimeKey]: []});
|
||||
chrome.storage.sync.set({[sponsorTimeKey]: []}, () => void updatePreviewBar());
|
||||
|
||||
//request the sponsors from the server again
|
||||
sponsorsLookup(currentVideoID);
|
||||
//add submissions to current sponsors list
|
||||
sponsorTimes = sponsorTimes.concat(sponsorTimesSubmitting);
|
||||
sponsorTimesSubmitting = [];
|
||||
} else {
|
||||
//show that the upload failed
|
||||
document.getElementById("submitButton").style.animation = "unset";
|
||||
document.getElementById("submitImage").src = chrome.extension.getURL("icons/PlayerUploadFailedIconSponsorBlocker256px.png");
|
||||
|
||||
if([400,429,409,502].includes(response.statusCode)) {
|
||||
alert(chrome.i18n.getMessage(response.statusCode));
|
||||
if([400, 429, 409, 502, 0].includes(response.statusCode)) {
|
||||
//treat them the same
|
||||
if (response.statusCode == 503) response.statusCode = 502;
|
||||
|
||||
alert(chrome.i18n.getMessage(response.statusCode + ""));
|
||||
} else {
|
||||
alert(chrome.i18n.getMessage("connectionError") + response.statusCode);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "__MSG_fullName__",
|
||||
"short_name": "__MSG_Name__",
|
||||
"version": "1.1.9.2",
|
||||
"version": "1.1.9.5",
|
||||
"default_locale": "en",
|
||||
"description": "__MSG_Description__",
|
||||
"content_scripts": [
|
||||
|
||||
@@ -35,6 +35,10 @@ sub.popupElement {
|
||||
}
|
||||
/* end reset */
|
||||
|
||||
#sponsorBlockPopupLogo {
|
||||
vertical-align: text-bottom;
|
||||
}
|
||||
|
||||
.popupElement {
|
||||
font-family: 'Source Sans Pro', sans-serif;
|
||||
|
||||
@@ -43,12 +47,13 @@ sub.popupElement {
|
||||
|
||||
h1.popupElement {
|
||||
margin-top: 0px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.popupBody {
|
||||
font-size: 14px;
|
||||
background-color: #ffd9d9;
|
||||
padding: 5px;
|
||||
padding: 0px 5px;
|
||||
}
|
||||
|
||||
.discreteLink.popupElement {
|
||||
|
||||
138
popup.html
138
popup.html
@@ -8,35 +8,92 @@
|
||||
<body class="popupBody">
|
||||
<center>
|
||||
<div id="app" class="popupBody">
|
||||
<img src="icons/LogoSponsorBlocker256px.png" height="64px" id="sponsorBlockPopupLogo"/>
|
||||
|
||||
<h1 class="popupElement">__MSG_Name__</h1>
|
||||
<h1 class="popupElement">
|
||||
<img src="icons/IconSponsorBlocker256px.png" height="32px" id="sponsorBlockPopupLogo"/>
|
||||
__MSG_Name__
|
||||
</h1>
|
||||
|
||||
<!-- Loading text -->
|
||||
<p id="loadingIndicator" class="popupElement">__MSG_Loading__</p>
|
||||
|
||||
|
||||
<!-- Hidden until loading complete -->
|
||||
<div id="mainControls" class="main popupElement" style="display: none">
|
||||
<!-- If the video was found in the database -->
|
||||
<div id="videoFound">
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div id="downloadedSponsorMessageTimes" class="popupElement">
|
||||
|
||||
</div>
|
||||
|
||||
<p class="popupElement">
|
||||
__MSG_recordTimesDescription__
|
||||
</p>
|
||||
|
||||
<div>
|
||||
<button id="sponsorStart" class="greenButton popupElement">__MSG_sponsorStart__</button>
|
||||
</div>
|
||||
|
||||
<sub class="popupElement">__MSG_popupHint__</sub>
|
||||
|
||||
<div id="submissionSection" class="popupElement" style="display: none">
|
||||
<h3 class="popupElement">__MSG_lastTimes__</h3>
|
||||
<b>
|
||||
<div id="sponsorMessageTimes" class="popupElement">
|
||||
|
||||
</div>
|
||||
</b>
|
||||
|
||||
<br/>
|
||||
|
||||
<button id="clearTimes" class="smallButton popupElement">__MSG_clearTimesButton__</button>
|
||||
|
||||
<div id="submitTimesContainer" class="popupElement" style="display: none">
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<button id="submitTimes" class="smallButton popupElement">__MSG_submitTimesButton__</button>
|
||||
|
||||
<div id="submitTimesInfoMessageContainer" class="popupElement" style="display: none">
|
||||
<h3 id="submitTimesInfoMessage" class="popupElement">
|
||||
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
|
||||
<div id="discordButtonContainer" class="popupElement" style="display: none">
|
||||
<br/>
|
||||
|
||||
<a href="https://discord.gg/QnmVMpU" class="popupElement" target="_blank"><img src="https://www.logolynx.com/images/logolynx/1b/1bcc0f0aefe71b2c8ce66ffe8645d365.png" height="32px"/></a>
|
||||
|
||||
<br/>
|
||||
|
||||
__MSG_discordAdvert__
|
||||
|
||||
<br/>
|
||||
|
||||
<span id="hideDiscordButton" class="smallLink popupElement">__MSG_hideThis__</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<br/>
|
||||
|
||||
<button id="whitelistChannel" class="whitelistButton popupElement">__MSG_whitelistChannel__</button>
|
||||
<button id="unwhitelistChannel" class="whitelistButton popupElement" style="display: none">__MSG_removeFromWhitelist__</button>
|
||||
</div>
|
||||
<sub class="popupElement">
|
||||
__MSG_whitelistDescription__
|
||||
</sub>
|
||||
|
||||
<br/>
|
||||
|
||||
<div>
|
||||
<button id="disableSkipping" class="greenButton popupElement">__MSG_disableSkipping__</button>
|
||||
<button id="enableSkipping" class="whitelistButton popupElement" style="display: none">__MSG_enableSkipping__</button>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
|
||||
<button id="reportAnIssue" class="dangerButton popupElement">__MSG_voteOnTime__</button>
|
||||
@@ -51,7 +108,7 @@
|
||||
|
||||
</div>
|
||||
|
||||
<h2 class="recordingSubtitle popupElement">__MSG_recordTimes__</h2>
|
||||
<h2 class="recordingSubtitle popupElement">__MSG_yourWork__</h2>
|
||||
|
||||
<p class="popupElement">
|
||||
<span id=sponsorTimesContributionsContainer class="popupElement" style="display: none">
|
||||
@@ -80,47 +137,7 @@
|
||||
</div>
|
||||
</p>
|
||||
|
||||
<p class="popupElement">
|
||||
__MSG_recordTimesDescription__
|
||||
</p>
|
||||
|
||||
<div>
|
||||
<button id="sponsorStart" class="greenButton popupElement">__MSG_sponsorStart__</button>
|
||||
</div>
|
||||
|
||||
<sub class="popupElement">__MSG_popupHint__</sub>
|
||||
|
||||
<div id="submissionSection" class="popupElement" style="display: none">
|
||||
<h3 class="popupElement">__MSG_lastTimes__</h3>
|
||||
<b>
|
||||
<div id="sponsorMessageTimes" class="popupElement">
|
||||
|
||||
</div>
|
||||
</b>
|
||||
|
||||
<br/>
|
||||
|
||||
<button id="clearTimes" class="smallButton popupElement">__MSG_clearTimesButton__</button>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<div id="submitTimesContainer" class="popupElement" style="display: none">
|
||||
<button id="submitTimes" class="smallButton popupElement">__MSG_submitTimesButton__</button>
|
||||
|
||||
<div id="submitTimesInfoMessageContainer" class="popupElement" style="display: none">
|
||||
<h3 id="submitTimesInfoMessage" class="popupElement">
|
||||
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="setUsernameContainer" class="popupElement">
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<button id="setUsernameButton" class="warningButton popupElement">__MSG_setUsername__</button>
|
||||
<br/>
|
||||
@@ -130,35 +147,18 @@
|
||||
</div>
|
||||
|
||||
<div id="setUsername" class="popupElement" style="display: none">
|
||||
<br/>
|
||||
|
||||
<h3>__MSG_setUsername__</h3>
|
||||
|
||||
<div id="setUsernameStatusContainer" style="display: none">
|
||||
<h2 id="setUsernameStatus"></h2>
|
||||
</div>
|
||||
|
||||
|
||||
<input id="usernameInput" hint="Username"></input>
|
||||
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<button id="submitUsername" class="warningButton popupElement">Submit Username</button>
|
||||
</div>
|
||||
|
||||
<div id="discordButtonContainer" class="popupElement" style="display: none">
|
||||
<br/>
|
||||
|
||||
<a href="https://discord.gg/QnmVMpU" class="popupElement" target="_blank"><img src="https://www.logolynx.com/images/logolynx/1b/1bcc0f0aefe71b2c8ce66ffe8645d365.png" height="32px"/></a>
|
||||
|
||||
<br/>
|
||||
|
||||
__MSG_discordAdvert__
|
||||
|
||||
<br/>
|
||||
|
||||
<span id="hideDiscordButton" class="smallLink popupElement">__MSG_hideThis__</span>
|
||||
<button id="submitUsername" class="warningButton popupElement">__MSG_setUsername__</button>
|
||||
</div>
|
||||
|
||||
<div id="optionsButtonContainer" class="popupElement">
|
||||
|
||||
54
popup.js
54
popup.js
@@ -26,8 +26,12 @@ function runThePopup() {
|
||||
var SB = {};
|
||||
|
||||
["sponsorStart",
|
||||
// Top toggles
|
||||
"whitelistChannel",
|
||||
"unwhitelistChannel",
|
||||
"disableSkipping",
|
||||
"enableSkipping",
|
||||
// More controls
|
||||
"clearTimes",
|
||||
"submitTimes",
|
||||
"showNoticeAgain",
|
||||
@@ -80,6 +84,8 @@ function runThePopup() {
|
||||
SB.sponsorStart.addEventListener("click", sendSponsorStartMessage);
|
||||
SB.whitelistChannel.addEventListener("click", whitelistChannel);
|
||||
SB.unwhitelistChannel.addEventListener("click", unwhitelistChannel);
|
||||
SB.disableSkipping.addEventListener("click", () => toggleSkipping(true));
|
||||
SB.enableSkipping.addEventListener("click", () => toggleSkipping(false));
|
||||
SB.clearTimes.addEventListener("click", clearTimes);
|
||||
SB.submitTimes.addEventListener("click", submitTimes);
|
||||
SB.showNoticeAgain.addEventListener("click", showNoticeAgain);
|
||||
@@ -120,21 +126,30 @@ function runThePopup() {
|
||||
if (hideDiscordLink == undefined || !hideDiscordLink) {
|
||||
chrome.storage.sync.get(["hideDiscordLaunches"], function(result) {
|
||||
let hideDiscordLaunches = result.hideDiscordLaunches;
|
||||
//only if less than 5 launches
|
||||
//only if less than 10 launches
|
||||
if (hideDiscordLaunches == undefined || hideDiscordLaunches < 10) {
|
||||
SB.discordButtonContainer.style.display = null;
|
||||
|
||||
if (hideDiscordLaunches == undefined) {
|
||||
hideDiscordButton = 1;
|
||||
hideDiscordLaunches = 1;
|
||||
}
|
||||
|
||||
chrome.storage.sync.set({"hideDiscordLaunches": hideDiscordButton + 1});
|
||||
chrome.storage.sync.set({"hideDiscordLaunches": hideDiscordLaunches + 1});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//if the don't show notice again letiable is true, an option to
|
||||
//show proper disable skipping button
|
||||
chrome.storage.sync.get(["disableSkipping"], function(result) {
|
||||
let disableSkipping = result.disableSkipping;
|
||||
if (disableSkipping != undefined && disableSkipping) {
|
||||
SB.disableSkipping.style.display = "none";
|
||||
SB.enableSkipping.style.display = "unset";
|
||||
}
|
||||
});
|
||||
|
||||
//if the don't show notice again variable is true, an option to
|
||||
// disable should be available
|
||||
chrome.storage.sync.get(["dontShowNotice"], function(result) {
|
||||
let dontShowNotice = result.dontShowNotice;
|
||||
@@ -280,7 +295,7 @@ function runThePopup() {
|
||||
|
||||
//remove loading text
|
||||
SB.mainControls.style.display = "unset"
|
||||
SB.loadingIndicator.innerHTML = "";
|
||||
SB.loadingIndicator.style.display = "none";
|
||||
|
||||
if (request.found) {
|
||||
SB.videoFound.innerHTML = chrome.i18n.getMessage("sponsorFound");
|
||||
@@ -811,8 +826,11 @@ function runThePopup() {
|
||||
} else {
|
||||
let errorMessage = "";
|
||||
|
||||
if([400,429,409,502].includes(response.statusCode)) {
|
||||
errorMessage = chrome.i18n.getMessage(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 + "");
|
||||
} else {
|
||||
errorMessage = chrome.i18n.getMessage("connectionError") + response.statusCode;
|
||||
}
|
||||
@@ -1109,8 +1127,10 @@ function runThePopup() {
|
||||
type: type,
|
||||
UUID: UUID
|
||||
}, function(response) {
|
||||
console.log(response)
|
||||
if (response != undefined) {
|
||||
//see if it was a success or failure
|
||||
console.log(response)
|
||||
if (response.successType == 1 || (response.successType == -1 && response.statusCode == 429)) {
|
||||
//success (treat rate limits as a success)
|
||||
addVoteMessage(chrome.i18n.getMessage("voted"), UUID)
|
||||
@@ -1130,7 +1150,7 @@ function runThePopup() {
|
||||
}
|
||||
|
||||
function hideDiscordButton() {
|
||||
chrome.storage.sync.set({"hideDiscordLink": false});
|
||||
chrome.storage.sync.set({"hideDiscordLink": true});
|
||||
|
||||
SB.discordButtonContainer.style.display = "none";
|
||||
}
|
||||
@@ -1246,6 +1266,24 @@ function runThePopup() {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Should skipping be disabled (visuals stay)
|
||||
*/
|
||||
function toggleSkipping(disabled) {
|
||||
chrome.storage.sync.set({"disableSkipping": disabled});
|
||||
|
||||
let hiddenButton = SB.disableSkipping;
|
||||
let shownButton = SB.enableSkipping;
|
||||
|
||||
if (!disabled) {
|
||||
hiddenButton = SB.enableSkipping;
|
||||
shownButton = SB.disableSkipping;
|
||||
}
|
||||
|
||||
shownButton.style.display = "unset";
|
||||
hiddenButton.style.display = "none";
|
||||
}
|
||||
|
||||
function setKeybind(startSponsorKeybind) {
|
||||
document.getElementById("keybindButtons").style.display = "none";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user