Compare commits

...

40 Commits

Author SHA1 Message Date
Ajay Ramachandran
ff41251f17 Merge pull request #171 from ajayyy/experimental-ajay
Fixed error message, prevented double counting contributions and delayed userID generation
2019-11-23 12:49:19 -05:00
Ajay Ramachandran
c7c1cb79a8 Increased version number. 2019-11-23 12:48:10 -05:00
Ajay Ramachandran
fc155ccdfa Prevented contributions from counting twice. 2019-11-23 12:47:00 -05:00
Ajay Ramachandran
dfad1a5636 Added delayed startup after install. 2019-11-23 12:44:38 -05:00
Ajay Ramachandran
6790952f86 Fixed error messages not working. Added message for error 503 and 0. 2019-11-23 12:26:24 -05:00
Ajay Ramachandran
1a28f714a1 Update README.md 2019-11-17 21:32:31 -05:00
Ajay Ramachandran
55a55fefba Update README.md 2019-11-17 21:32:01 -05:00
Ajay Ramachandran
fe74f7caa3 Merge pull request #169 from ajayyy/experimental-ajay
Decreased requests to help with server load issues
2019-11-14 15:05:57 -05:00
Ajay Ramachandran
108aac0e79 Improved non YouTube tab message. 2019-11-14 15:04:46 -05:00
Ajay Ramachandran
008c07acc3 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into experimental-ajay 2019-11-14 14:59:55 -05:00
Ajay Ramachandran
831a3c1b5a Increased retry timeout when the server is down. 2019-11-14 14:59:44 -05:00
Ajay Ramachandran
dc7b63d735 Merge pull request #164 from Otiel/french-translation
Improve French translation
2019-11-14 14:58:50 -05:00
Ajay Ramachandran
9267f36165 Raised retry time from 10 seconds to 180 seconds (3 mins). 2019-11-14 14:53:40 -05:00
Ajay Ramachandran
ae6d63c3ab Merge pull request #168 from ajayyy/experimental-ajay
Fixed notice never hiding
2019-11-07 13:05:22 -05:00
Ajay Ramachandran
a3214f0fa7 Fixed notice never hiding. 2019-11-07 13:04:31 -05:00
Otiel
d4bd5313fc french: add missing translation 2019-10-31 21:07:37 +01:00
Otiel
c69fe53ea6 french: improve existing translation 2019-10-31 21:07:12 +01:00
Otiel
d7c496847f french: fix spelling 2019-10-31 20:20:48 +01:00
Ajay Ramachandran
44516648a1 Merge pull request #163 from ajayyy/experimental-ajay
Keybind edit, show notice again, ignore rate limits
2019-10-30 23:39:18 -04:00
Ajay Ramachandran
fbeabc830b Merge branch 'firefox-optimizations' of https://github.com/ajayyy/SponsorBlock into experimental-ajay 2019-10-30 23:38:56 -04:00
Ajay Ramachandran
f370746382 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into experimental-ajay 2019-10-30 23:38:18 -04:00
Ajay Ramachandran
e82beb861a Merge pull request #153 from owendaprile/firefox-optimizations
Some Firefox Optimizations
2019-10-30 23:38:13 -04:00
Ajay Ramachandran
1791d31681 Revert "Moved browser specific settings into manifest"
This reverts commit 047432af03.
2019-10-30 23:37:36 -04:00
Ajay Ramachandran
784ddea34a Updated version number. 2019-10-30 23:33:10 -04:00
Ajay Ramachandran
69c93a0563 Removed deprecated show install page code 2019-10-30 23:32:32 -04:00
Ajay Ramachandran
4e4d50de82 Fixed feature to show the notice to users again. 2019-10-30 23:30:30 -04:00
Ajay Ramachandran
25b9edabf8 Changed hint to say that you can change the keybind. 2019-10-28 16:16:13 -04:00
Ajay Ramachandran
6851470547 Added the ability to change the keybind. 2019-10-28 16:13:37 -04:00
Ajay Ramachandran
73c1fc17b3 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock into experimental-ajay 2019-10-28 11:59:10 -04:00
Ajay Ramachandran
cba5b05c0c Merge pull request #160 from ptalmeida/master
Add european portuguese translation
2019-10-27 20:17:22 -04:00
Pedro Almeida
3f1573f1b3 Improve portuguese locales 2019-10-27 22:11:47 +01:00
Pedro Almeida
93ffc93943 Improve Brazilian Portuguese locale 2019-10-27 19:28:16 +01:00
Pedro Almeida
4214af4d56 Add support for European Portuguese 2019-10-27 19:27:22 +01:00
Owen D'Aprile
01405dd32e Ignore WebStorm project configuration folder 2019-10-15 17:49:01 -04:00
Owen D'Aprile
047432af03 Moved browser specific settings into manifest 2019-10-15 17:48:40 -04:00
Owen D'Aprile
a8bd5d0068 Suppress Firefox error when changing tabs 2019-10-15 17:46:42 -04:00
Ajay Ramachandran
eeb6d20e96 Fixed grammar 2019-10-13 12:09:14 -04:00
Ajay Ramachandran
8bb8511bf4 Fixed indenting. 2019-09-24 18:21:47 -04:00
Ajay Ramachandran
563610cbcd Made it show the new notice again. 2019-09-24 18:16:57 -04:00
Ajay Ramachandran
04190b27d8 Made it ignore rate limits for voting. 2019-09-24 17:55:07 -04:00
12 changed files with 726 additions and 93 deletions

3
.gitignore vendored
View File

@@ -1,2 +1,3 @@
config.js
ignored
ignored
.idea/

View File

@@ -32,7 +32,7 @@ The backend server code is available here: https://github.com/ajayyy/SponsorBloc
It is a simple Sqlite database that will hold all the timing data.
To make sure that this project doesn't die, I have made the database publicly downloadable at https://sponsor.ajay.app/database.db. So, you can download a backup or get archive.org to take a backup if you do desire.
To make sure that this project doesn't die, I have made the database publicly downloadable at https://sponsor.ajay.app/database.db. So, you can download a backup or get archive.org to take a backup for you if you want.
Hopefully this project can be combined with projects like [this](https://github.com/Sponsoff/sponsorship_remover) and use this data to create a neural network to predict when sponsored segments happen. That project is sadly abandoned now, so I have decided to attempt to revive this idea.
@@ -48,6 +48,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>

View File

@@ -87,7 +87,6 @@
"Unknown": {
"message": "There was an error submitting your sponsor times, please try again later."
},
"sponsorFound": {
"message": "This video's sponsors are in the database!"
},
@@ -101,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!"
@@ -167,7 +166,7 @@
"message": "Click the button below when the sponsorship starts and ends to record and\nsubmit it to the database."
},
"popupHint": {
"message": "Hint: Press the semicolon key while focused on a video report the start/end of a sponsor and quote to submit."
"message": "Hint: Press the semicolon key while focused on a video report the start/end of a sponsor and quote to submit. (This can be changed in the options)"
},
"lastTimes": {
"message": "Latest Sponsor Message Times Chosen"
@@ -243,5 +242,28 @@
"sourceCode": {
"message": "Source Code",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "The notice has been upgraded!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "If you still don't like it, hit the never show button.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setStartSponsorShortcut": {
"message": "Set key for start sponsor keybind"
},
"setSubmitKeybind": {
"message": "Set key for submission keybind"
},
"keybindDescription": {
"message": "Select a key by typing it"
},
"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."
}
}

View File

@@ -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": "Cacher les boutons sur le lecteur YouTube"
},
"hideButtons": {
"message": "Montrer 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 : "
}
}

View File

@@ -28,7 +28,7 @@
"message": "Parece que o servidor caiu. Contate o desenvolvedor para informá-los."
},
"channelWhitelisted": {
"message": "Canal adicionado a lista branca!"
"message": "Canal adicionado à lista branca!"
},
"Sponsor": {
"message": "patrocinador"
@@ -40,7 +40,7 @@
"message": "segmento de patrocinador"
},
"Segments": {
"message": "segmento de patrocinadores"
"message": "segmentos de patrocinadores"
},
"noticeTitle": {
"message": "Patrocinador pulado"
@@ -85,7 +85,7 @@
"message": "Tem certeza que quer limpar isso?\n\n"
},
"Unknown": {
"message": "Teve um erro ao enviar seus segmentos, tente novamente depois"
"message": "Teve um erro ao enviar seus segmentos, tente novamente depois."
},
"sponsorFound": {
@@ -101,7 +101,7 @@
"message": "Patrocínio termina agora"
},
"noVideoID": {
"message": "Isso provavelmente não é uma tab do YouTube, ou você clicou muito cedo. \n Se sabe que é uma tab do YouTube,\n fecha esse popup e abre de novo."
"message": "Isso provavelmente não é uma tab do YouTube, ou você clicou muito cedo. \n Se sabe que é uma tab do YouTube,\n feche esse popup e abra de novo."
},
"success": {
"message": "Sucesso!"
@@ -122,6 +122,126 @@
"message": "Quer enviar os segmentos para o vídeo de ID"
},
"leftTimes": {
"message": "Parece que você esqueceu de enviar alguns segmentos. Volta pra página para enviar eles (não foram deletados)."
"message": "Parece que você se esqueceu de enviar alguns segmentos. Volta pra página para os enviar (não foram deletados)."
},
"clearTimes": {
"message": "Apagar intervalos dos patrocínios"
},
"openPopup": {
"message": "Abrir o Popup SponsorBlock"
},
"SubmitTimes": {
"message": "Submeter intervalos dos patrocínios"
},
"submitCheck": {
"message": "Tem a certeza que pretende submeter?"
},
"whitelistChannel": {
"message": "Meter canal na Whitelist"
},
"removeFromWhitelist": {
"message": "Remover canal da Whitelist"
},
"whitelistDescription": {
"message": "Colocar na Whitelist canais com patrocínios éticos que encoragem boas atitude, ou simplesmente canais com patrocínios engraçados. Ou não, é consigo."
},
"voteOnTime": {
"message": "Vote num intervalo de patrocínio"
},
"recordTimes": {
"message": "Registe um intervalo de patrocínio"
},
"soFarUHSubmited": {
"message": "Até agora submeteu"
},
"savedPeopleFrom": {
"message": "Poupaste a outros de "
},
"viewLeaderboard": {
"message": "Ver a leaderboard"
},
"here": {
"message": "aqui"
},
"recordTimesDescription": {
"message": "Carregue neste botão abaixo quando o patrocínio começar e quando\n acabar para registar e submetê-lo à base de dados"
},
"popupHint": {
"message": "Dica: Carregue na tecla ; enquanto num vídeo para registar o começo/fim de um patrocínio e \" para submeter"
},
"lastTimes": {
"message": "Intervalos de Patrocínios Escolhidos mais Recentemente"
},
"clearTimesButton": {
"message": "Limpar Intervalos"
},
"submitTimesButton": {
"message": "Submeter Intervalos"
},
"publicStats": {
"message": "Isto é usado na página pública de estatísticas que mostra o quanto já contríbuíu. Veje-a"
},
"setUsername": {
"message": "Criar nomde de utilizador"
},
"discordAdvert": {
"message": "Junte-se ao discord oficial para sugerir dicas e sugestões!"
},
"hideThis": {
"message": "Esconder isto"
},
"Options": {
"message": "Opções"
},
"showButtons": {
"message": "Esconder botões no player do Youtube"
},
"hideButtons": {
"message": "Mostrar 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."
},
"showInfoButton": {
"message": "Mostrar botão de Informações no player do Youtube"
},
"hideInfoButton": {
"message": "Esconder botão de Informações no player do Youtube"
},
"whatInfoButton": {
"message": "Este é o botão que abre o popup na pagina do Youtube."
},
"hideDeleteButton": {
"message": "Esconder botão de Apagar no player do Youtube"
},
"showDeleteButton": {
"message": "Mostrar botão de Apagar no player do Youtube"
},
"whatDeleteButton": {
"message": "Este é o botão que lhe permite saltar todos os patrocínios do player do Youtube."
},
"disableViewTracking": {
"message": "Desactivar registo de visualização de patrocínios"
},
"enableViewTracking": {
"message": "Activar registo de visualização de patrocínios"
},
"whatViewTracking": {
"message": "Esta funcionalidade regista que patrocínios tem saltado para que outros utilizadores saibam o quanto as suas submições têm ajudado outros\n e é usado como métrica de votos para evitar spam na base de dados. A extenção \n envia uma notificação ao servidor sempre que salta um patrocínio. Quanto menos pessoas desactivarem esta funcionalidade mais precisas serão as estimativas :)"
},
"showNotice": {
"message": "Mostrar notificação outra vez"
},
"longDescription": {
"message": "SponsorBlock é uma extensão que salta segmentos patrocinados em vídeos do YouTube. SponsorBlock é uma extenção crowdfunded que permite a qualquer um submeter o início e o fim de segmentos patrocinados. Assim que uma pessoa submete essa informação todos com a extenção poderam saltar automaticamete o patrocínio.",
"description": "Descrição completa da extençao nas lojas dos browsers."
},
"website": {
"message": "Site",
"description": "Usado na pagina da loja do Firefox"
},
"sourceCode": {
"message": "Código fonte",
"description": "Usado na pagina da loja do Firefox"
}
}

View File

@@ -0,0 +1,246 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Nome da extensão."
},
"fullName": {
"message": "SponsorBlock para o YouTube - Salte patrocínios",
"description": "Nome da extensão."
},
"Description": {
"message": "Salte patrocinadores em vídeos do YouTube. Reporte patrocinadores em vídeos que assista para poupar tempo a outros.",
"description": "Descrição da extensão."
},
"helpPage": {
"message": "index_en.html"
},
"400": {
"message": "O servidor disse que este pedido foi inválido"
},
"429": {
"message": "Enviou muitos segmentos para este vídeo, tem certeza que tem assim tantos?"
},
"409": {
"message": "Isso já foi enviado antes"
},
"502": {
"message": "Parece que o servidor caiu. Contacte o desenvolvedor para o informar."
},
"channelWhitelisted": {
"message": "Canal adicionado à whitelist!"
},
"Sponsor": {
"message": "patrocinador"
},
"Sponsors": {
"message": "patrocinadores"
},
"Segment": {
"message": "segmento de patrocínio"
},
"Segments": {
"message": "segmentos de patrocínio"
},
"noticeTitle": {
"message": "Patrocínio saltado"
},
"reportButtonTitle": {
"message": "Reportar"
},
"reportButtonInfo": {
"message": "Reportar subimissão como inválida."
},
"Dismiss": {
"message": "Ignorar"
},
"Loading": {
"message": "A carregar..."
},
"Mins": {
"message": "Minutos"
},
"Secs": {
"message": "Segundos"
},
"Hide": {
"message": "Nunca mostrar"
},
"hitGoBack": {
"message": "Carregue em reverter salto para voltar a onde estava"
},
"unskip": {
"message": "Reverter salto"
},
"reskip": {
"message": "Saltar novamente"
},
"paused": {
"message": "Pausado"
},
"confirmMSG": {
"message": "\n\nPara editar ou remover linhas individuais, carregue com o botão direito ou abra o popup da extensão pelo icone no canto superior direito."
},
"clearThis": {
"message": "Tem certeza que deseja limpar isto?\n\n"
},
"Unknown": {
"message": "Erro ao enviar os seus segmentos, tente novamente mais tarde."
},
"sponsorFound": {
"message": "Os patrocinadores desse vídeo estão no banco de dados!"
},
"sponsor404": {
"message": "Nenhum patrocinador encontrado"
},
"sponsorStart": {
"message": "Patrocínio começa agora"
},
"sponsorEnd": {
"message": "Patrocínio termina agora"
},
"noVideoID": {
"message": "Isto provavelmente não é uma tab do YouTube, ou pode ter clicado muito cedo. \n Se sabe que é uma tab do YouTube,\n feche este popup e abra de novo."
},
"success": {
"message": "Sucesso!"
},
"voted": {
"message": "Votado!"
},
"voteFail": {
"message": "Já votou antes."
},
"serverDown": {
"message": "Parece que o servidor caiu. Contacte o desenvolvedor o quanto antes."
},
"connectionError": {
"message": "Deu-se um erro de conecção: Código: "
},
"wantToSubmit": {
"message": "Quer enviar os segmentos para o vídeo de ID"
},
"leftTimes": {
"message": "Parece que se esqueceu de enviar alguns segmentos. Retorne à página para os enviar (não foram apagados)."
},
"clearTimes": {
"message": "Apagar intervalos dos patrocínios"
},
"openPopup": {
"message": "Abrir o Popup SponsorBlock"
},
"SubmitTimes": {
"message": "Submeter intervalos dos patrocínios"
},
"submitCheck": {
"message": "Tem a certeza que pretende submeter?"
},
"whitelistChannel": {
"message": "Meter canal na Whitelist"
},
"removeFromWhitelist": {
"message": "Remover canal da Whitelist"
},
"whitelistDescription": {
"message": "Colocar na Whitelist canais com patrocínios éticos que encoragem boas atitude, ou simplesmente canais com patrocínios engraçados. Ou não, é consigo."
},
"voteOnTime": {
"message": "Vote num intervalo de patrocínio"
},
"recordTimes": {
"message": "Registe um intervalo de patrocínio"
},
"soFarUHSubmited": {
"message": "Até agora submeteu"
},
"savedPeopleFrom": {
"message": "Poupaste a outros de "
},
"viewLeaderboard": {
"message": "Ver a leaderboard"
},
"here": {
"message": "aqui"
},
"recordTimesDescription": {
"message": "Carregue neste botão abaixo quando o patrocínio começar e quando\n acabar para registar e submetê-lo à base de dados"
},
"popupHint": {
"message": "Dica: Carregue na tecla ; enquanto num vídeo para registar o começo/fim de um patrocínio e \" para submeter"
},
"lastTimes": {
"message": "Intervalos de Patrocínios Escolhidos mais Recentemente"
},
"clearTimesButton": {
"message": "Limpar Intervalos"
},
"submitTimesButton": {
"message": "Submeter Intervalos"
},
"publicStats": {
"message": "Isto é usado na página pública de estatísticas que mostra o quanto já contríbuíu. Veje-a"
},
"setUsername": {
"message": "Criar nomde de utilizador"
},
"discordAdvert": {
"message": "Junte-se ao discord oficial para sugerir dicas e sugestões!"
},
"hideThis": {
"message": "Esconder isto"
},
"Options": {
"message": "Opções"
},
"showButtons": {
"message": "Esconder botões no player do Youtube"
},
"hideButtons": {
"message": "Mostrar 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."
},
"showInfoButton": {
"message": "Mostrar botão de Informações no player do Youtube"
},
"hideInfoButton": {
"message": "Esconder botão de Informações no player do Youtube"
},
"whatInfoButton": {
"message": "Este é o botão que abre o popup na pagina do Youtube."
},
"hideDeleteButton": {
"message": "Esconder botão de Apagar no player do Youtube"
},
"showDeleteButton": {
"message": "Mostrar botão de Apagar no player do Youtube"
},
"whatDeleteButton": {
"message": "Este é o botão que lhe permite saltar todos os patrocínios do player do Youtube."
},
"disableViewTracking": {
"message": "Desactivar registo de visualização de patrocínios"
},
"enableViewTracking": {
"message": "Activar registo de visualização de patrocínios"
},
"whatViewTracking": {
"message": "Esta funcionalidade regista que patrocínios tem saltado para que outros utilizadores saibam o quanto as suas submições têm ajudado outros\n e é usado como métrica de votos para evitar spam na base de dados. A extenção \n envia uma notificação ao servidor sempre que salta um patrocínio. Quanto menos pessoas desactivarem esta funcionalidade mais precisas serão as estimativas :)"
},
"showNotice": {
"message": "Mostrar notificação outra vez"
},
"longDescription": {
"message": "SponsorBlock é uma extensão que salta segmentos patrocinados em vídeos do YouTube. SponsorBlock é uma extenção crowdfunded que permite a qualquer um submeter o início e o fim de segmentos patrocinados. Assim que uma pessoa submete essa informação todos com a extenção poderam saltar automaticamete o patrocínio.",
"description": "Descrição completa da extençao nas lojas dos browsers."
},
"website": {
"message": "Site",
"description": "Usado na pagina da loja do Firefox"
},
"sourceCode": {
"message": "Código fonte",
"description": "Usado na pagina da loja do Firefox"
}
}

View File

@@ -1,7 +1,7 @@
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
chrome.tabs.onUpdated.addListener(function(tabId) {
chrome.tabs.sendMessage(tabId, {
message: 'update',
});
}, () => void chrome.runtime.lastError ); // Suppress error on Firefox
});
chrome.runtime.onMessage.addListener(function (request, sender, callback) {
@@ -42,37 +42,24 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
//add help page on install
chrome.runtime.onInstalled.addListener(function (object) {
// TODO (shownInstallPage): remove shownInstallPage logic after sufficient amount of time,
// so that people have time to upgrade and move to shownInstallPage-free code.
chrome.storage.sync.get(["userID", "shownInstallPage"], function(result) {
const userID = result.userID;
// TODO (shownInstallPage): delete row below
const shownInstallPage = result.shownInstallPage;
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){
// Show install page, if there is no user id
// and there is no shownInstallPage.
// TODO (shownInstallPage): remove this if statement, but leave contents
if (!shownInstallPage){
// 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"))});
}
chrome.tabs.create({url: chrome.extension.getURL("/help/index_en.html")});
// TODO (shownInstallPage): delete if statement and contents
// If shownInstallPage is set, remove it.
if (!!shownInstallPage){
chrome.storage.sync.remove("shownInstallPage");
//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
@@ -172,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) {
@@ -190,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) {

View File

@@ -80,11 +80,20 @@ chrome.storage.sync.get(["trackViewCount"], function(result) {
//if the notice should not be shown
//happens when the user click's the "Don't show notice again" button
//option renamed when new notice was made
var dontShowNotice = false;
chrome.storage.sync.get(["dontShowNotice"], function(result) {
let dontShowNoticeAgain = result.dontShowNotice;
if (dontShowNoticeAgain != undefined) {
dontShowNotice = dontShowNoticeAgain;
}
});
//load the legacy option to hide the notice
var dontShowNoticeOld = false;
chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) {
let dontShowNoticeAgain = result.dontShowNoticeAgain;
if (dontShowNoticeAgain != undefined) {
dontShowNotice = dontShowNoticeAgain;
dontShowNoticeOld = dontShowNoticeAgain;
}
});
@@ -195,18 +204,32 @@ function messageListener(request, sender, sendResponse) {
}
//check for hotkey pressed
document.onkeydown = function(e){
document.onkeydown = async function(e){
e = e || window.event;
var key = e.key;
let video = document.getElementById("movie_player");
let startSponsorKey = await new Promise((resolve, reject) => {
chrome.storage.sync.get(["startSponsorKeybind"], (result) => resolve(result));
});
let submitKey = await new Promise((resolve, reject) => {
chrome.storage.sync.get(["submitKeybind"], (result) => resolve(result));
});
if (startSponsorKey.startSponsorKeybind === undefined) {
startSponsorKey.startSponsorKeybind = ";"
}
if (submitKey.submitKeybind === undefined) {
submitKey.submitKeybind = "'"
}
//is the video in focus, otherwise they could be typing a comment
if (document.activeElement === video) {
if(key == ';'){
if(key == startSponsorKey.startSponsorKeybind){
//semicolon
startSponsorClicked();
} else if (key == "'") {
} else if (key == submitKey.submitKeybind) {
//single quote
submitSponsorTimes();
}
@@ -397,7 +420,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);
}
}
});
@@ -406,8 +430,9 @@ 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++;
}
@@ -591,7 +616,16 @@ function skipToTime(v, index, sponsorTimes, openNotice) {
if (openNotice) {
//send out the message saying that a sponsor message was skipped
if (!dontShowNotice) {
new SkipNotice(this, currentUUID);
let skipNotice = new SkipNotice(this, currentUUID);
if (dontShowNoticeOld) {
//show why this notice is showing
skipNotice.addNoticeInfoMessage(chrome.i18n.getMessage("noticeUpdate"), chrome.i18n.getMessage("noticeUpdate2"));
//remove this setting
chrome.storage.sync.remove(["dontShowNoticeAgain"]);
dontShowNoticeOld = false;
}
//auto-upvote this sponsor
if (trackViewCount) {
@@ -879,8 +913,8 @@ function vote(type, UUID, skipNotice) {
if (response != undefined) {
//see if it was a success or failure
if (skipNotice != null) {
if (response.successType == 1) {
//success
if (response.successType == 1 || (response.successType == -1 && response.statusCode == 429)) {
//success (treat rate limits as a success)
if (type == 0) {
skipNotice.afterDownvote.bind(skipNotice)();
}
@@ -912,7 +946,7 @@ function closeAllSkipNotices(){
}
function dontShowNoticeAgain() {
chrome.storage.sync.set({"dontShowNoticeAgain": true});
chrome.storage.sync.set({"dontShowNotice": true});
dontShowNotice = true;
@@ -920,15 +954,15 @@ function dontShowNoticeAgain() {
}
function sponsorMessageStarted(callback) {
v = document.querySelector('video');
v = document.querySelector('video');
//send back current time
callback({
time: v.currentTime
})
//send back current time
callback({
time: v.currentTime
})
//update button
toggleStartSponsorButton();
//update button
toggleStartSponsorButton();
}
function submitSponsorTimes() {
@@ -1007,8 +1041,11 @@ function sendSubmitMessage(){
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);
}

View File

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

View File

@@ -172,6 +172,19 @@
<br/>
<h3>__MSG_Options__</h3>
<span id="keybindButtons">
<button id="setStartSponsorKeybind" class="warningButton popupElement">__MSG_setStartSponsorShortcut__</button>
<br/>
<br/>
<button id="setSubmitKeybind" class="warningButton popupElement">__MSG_setSubmitKeybind__</button>
<br/>
</span>
<h2 id="keybindDescription" style="display: none" class="popupElement">__MSG_keybindDescription__</h2>
<br/>
<br/>
<button id="hideVideoPlayerControls" class="warningButton popupElement">__MSG_hideButtons__</button>
<button id="showVideoPlayerControls" style="display: none" class="warningButton popupElement">__MSG_showButtons__</button>

View File

@@ -70,6 +70,10 @@ function runThePopup() {
"videoFound",
"sponsorMessageTimes",
"downloadedSponsorMessageTimes",
// Keybinds
"setStartSponsorKeybind",
"setSubmitKeybind",
"keybindDescription"
].forEach(id => SB[id] = document.getElementById(id));
//setup click listeners
@@ -79,6 +83,8 @@ function runThePopup() {
SB.clearTimes.addEventListener("click", clearTimes);
SB.submitTimes.addEventListener("click", submitTimes);
SB.showNoticeAgain.addEventListener("click", showNoticeAgain);
SB.setStartSponsorKeybind.addEventListener("click", () => setKeybind(true));
SB.setSubmitKeybind.addEventListener("click", () => setKeybind(false));
SB.hideVideoPlayerControls.addEventListener("click", hideVideoPlayerControls);
SB.showVideoPlayerControls.addEventListener("click", showVideoPlayerControls);
SB.hideInfoButtonPlayerControls.addEventListener("click", hideInfoButtonPlayerControls);
@@ -104,6 +110,9 @@ function runThePopup() {
//is this a YouTube tab?
let isYouTubeTab = false;
// Is the start sponsor keybind currently being set
let setStartSponsorKeybind = false;
//see if discord link can be shown
chrome.storage.sync.get(["hideDiscordLink"], function(result) {
@@ -127,9 +136,9 @@ function runThePopup() {
//if the don't show notice again letiable is true, an option to
// disable should be available
chrome.storage.sync.get(["dontShowNoticeAgain"], function(result) {
let dontShowNoticeAgain = result.dontShowNoticeAgain;
if (dontShowNoticeAgain != undefined && dontShowNoticeAgain) {
chrome.storage.sync.get(["dontShowNotice"], function(result) {
let dontShowNotice = result.dontShowNotice;
if (dontShowNotice != undefined && dontShowNotice) {
SB.showNoticeAgain.style.display = "unset";
}
});
@@ -802,8 +811,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;
}
@@ -819,7 +831,7 @@ function runThePopup() {
}
function showNoticeAgain() {
chrome.storage.sync.set({"dontShowNoticeAgain": false});
chrome.storage.sync.set({"dontShowNotice": false});
chrome.tabs.query({
active: true,
@@ -1100,10 +1112,12 @@ function runThePopup() {
type: type,
UUID: UUID
}, function(response) {
console.log(response)
if (response != undefined) {
//see if it was a success or failure
if (response.successType == 1) {
//success
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)
} else if (response.successType == 0) {
//failure: duplicate vote
@@ -1236,7 +1250,35 @@ function runThePopup() {
);
});
}
function setKeybind(startSponsorKeybind) {
document.getElementById("keybindButtons").style.display = "none";
document.getElementById("keybindDescription").style.display = "initial";
document.getElementById("keybindDescription").innerText = chrome.i18n.getMessage("keybindDescription");
setStartSponsorKeybind = startSponsorKeybind;
document.addEventListener("keydown", onKeybindSet)
}
function onKeybindSet(e) {
e = e || window.event;
var key = e.key;
if (setStartSponsorKeybind) {
chrome.storage.sync.set({"startSponsorKeybind": key});
} else {
chrome.storage.sync.set({"submitKeybind": key});
}
document.removeEventListener("keydown", onKeybindSet);
document.getElementById("keybindDescription").innerText = chrome.i18n.getMessage("keybindDescriptionComplete") + " " + key;
document.getElementById("keybindButtons").style.display = "unset";
}
//converts time in seconds to minutes
function getTimeInMinutes(seconds) {
let minutes = Math.floor(seconds / 60);

View File

@@ -294,21 +294,37 @@ class SkipNotice {
}
}
addNoticeInfoMessage(message) {
addNoticeInfoMessage(message, message2) {
let previousInfoMessage = document.getElementById("sponsorTimesInfoMessage" + this.idSuffix);
if (previousInfoMessage != null) {
//remove it
document.getElementById("sponsorSkipNotice" + this.idSuffix).removeChild(previousInfoMessage);
}
let previousInfoMessage2 = document.getElementById("sponsorTimesInfoMessage" + this.idSuffix + "2");
if (previousInfoMessage2 != null) {
//remove it
document.getElementById("sponsorSkipNotice" + this.idSuffix).removeChild(previousInfoMessage2);
}
//add info
let thanksForVotingText = document.createElement("p");
thanksForVotingText.id = "sponsorTimesInfoMessage" + this.idSuffix;
thanksForVotingText.className = "sponsorTimesInfoMessage";
thanksForVotingText.innerText = message;
//add element to div
document.getElementById("sponsorSkipNotice" + this.idSuffix).insertBefore(thanksForVotingText, document.getElementById("sponsorSkipNoticeSpacer" + this.idSuffix));
if (message2 !== undefined) {
let thanksForVotingText2 = document.createElement("p");
thanksForVotingText2.id = "sponsorTimesInfoMessage" + this.idSuffix + "2";
thanksForVotingText2.className = "sponsorTimesInfoMessage";
thanksForVotingText2.innerText = message2;
//add element to div
document.getElementById("sponsorSkipNotice" + this.idSuffix).insertBefore(thanksForVotingText2, document.getElementById("sponsorSkipNoticeSpacer" + this.idSuffix));
}
}
resetNoticeInfoMessage() {
@@ -337,7 +353,7 @@ class SkipNotice {
thanksForVotingText.id = "sponsorTimesVoteButtonInfoMessage" + this.idSuffix;
thanksForVotingText.className = "sponsorTimesInfoMessage sponsorTimesVoteButtonMessage";
thanksForVotingText.innerText = message;
//add element to div
document.getElementById("sponsorSkipNoticeSecondRow" + this.idSuffix).prepend(thanksForVotingText);
}
@@ -348,13 +364,16 @@ class SkipNotice {
//remove it
document.getElementById("sponsorSkipNoticeSecondRow" + this.idSuffix).removeChild(previousInfoMessage);
}
//show button again
document.getElementById("sponsorTimesDownvoteButtonsContainer" + this.idSuffix).style.removeProperty("display");
}
//close this notice
close() {
//reset message
this.resetNoticeInfoMessage();
let notice = document.getElementById("sponsorSkipNotice" + this.idSuffix);
if (notice != null) {
notice.remove();