From e917a3e94aeb9e2ed90d5742c2bd91b941d1c233 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Tue, 16 Jun 2020 22:01:08 -0400 Subject: [PATCH 01/18] New Crowdin translations (#369) * New translations messages.json (French) * New translations messages.json (French) * New translations messages.json (Dutch) * New translations messages.json (Portuguese, Brazilian) * New translations messages.json (Finnish) * New translations messages.json (German) * New translations messages.json (German) * New translations messages.json (Hungarian) * New translations messages.json (Swedish) * New translations messages.json (Swedish) * New translations messages.json (Bulgarian) * New translations messages.json (Finnish) * New translations messages.json (French) --- public/_locales/bg/messages.json | 24 +++++++++++ public/_locales/de/messages.json | 17 +++++++- public/_locales/fr/messages.json | 7 +++- public/_locales/hu/messages.json | 4 ++ public/_locales/nl/messages.json | 36 ++++++++++++++++ public/_locales/pt_BR/messages.json | 28 ++++++------- public/_locales/sv/messages.json | 65 +++++++++++++++++++++++++++++ 7 files changed, 164 insertions(+), 17 deletions(-) diff --git a/public/_locales/bg/messages.json b/public/_locales/bg/messages.json index 16ee7a70..7cb7792e 100644 --- a/public/_locales/bg/messages.json +++ b/public/_locales/bg/messages.json @@ -124,5 +124,29 @@ }, "voteOnTime": { "message": "Гласуване за спонсорства" + }, + "savedPeopleFrom": { + "message": "Вие сте помогнали на хора да пропуснат " + }, + "viewLeaderboard": { + "message": "Вижте leaderboard-а" + }, + "here": { + "message": "тук" + }, + "discordAdvert": { + "message": "Елате в официалния Discord сървър за да давате предложения!" + }, + "hideThis": { + "message": "Скрий това" + }, + "Options": { + "message": "Настройки" + }, + "showButtons": { + "message": "Показване на бутоните в YouTube Player-а" + }, + "hideButtons": { + "message": "Скриване на бутоните в YouTube Player-а" } } diff --git a/public/_locales/de/messages.json b/public/_locales/de/messages.json index d11a15f8..4aa446ce 100644 --- a/public/_locales/de/messages.json +++ b/public/_locales/de/messages.json @@ -33,11 +33,17 @@ "message": "gesponsorter Inhalt" }, "Segments": { - "message": "gesponsorte Inhalte" + "message": "gesponserten Inhalten" + }, + "upvoteButtonInfo": { + "message": "Diesen Beitrag aufwerten" }, "reportButtonTitle": { "message": "Melden" }, + "reportButtonInfo": { + "message": "Beitrag als unzulässig melden." + }, "Dismiss": { "message": "Abbrechen" }, @@ -98,6 +104,9 @@ "voted": { "message": "Abgestimmt!" }, + "serverDown": { + "message": "Der Server ist scheinbar offline. Bitte unverzüglich dem Entwickler melden." + }, "connectionError": { "message": "Ein Verbindungsfehler ist aufgetreten. Fehlermeldung: " }, @@ -501,6 +510,9 @@ "category_interaction_short": { "message": "Interaktions-Erinnerung" }, + "category_selfpromo": { + "message": "Unbezahlt/Eigenwerbung" + }, "category_selfpromo_description": { "message": "Ähnlich wie bei \"Sponsor\" mit Ausnahme von unbezahlten oder Selbstpromotion. Dies beinhaltet Abschnitte über Waren, Spenden oder Informationen darüber, mit wem sie zusammengearbeitet haben." }, @@ -596,6 +608,9 @@ "nonMusicCategoryOnMusic": { "message": "Dieses Video ist als Musik kategorisiert. Sind Sie sicher, dass Sie Segmente mit Nicht-Musikkategorien einreichen möchten? Wenn dieses Video nicht wirklich Musik ist, sollten Sie dieses Segment nicht einreichen. Bitte lesen Sie die Richtlinien, wenn Sie verwirrt sind." }, + "multipleSegments": { + "message": "Mehrere Segmente" + }, "guidelines": { "message": "Richtlinien" }, diff --git a/public/_locales/fr/messages.json b/public/_locales/fr/messages.json index e8ecf428..5a8ead1b 100644 --- a/public/_locales/fr/messages.json +++ b/public/_locales/fr/messages.json @@ -84,7 +84,7 @@ "message": "Une erreur s'est produite lors de la soumission, veuillez ré-essayer plus tard." }, "sponsorFound": { - "message": "Les messages commerciaux pour cette vidéo sont déjà dans notre base de donnée !" + "message": "Les messages commerciaux pour cette vidéo sont déjà dans notre base de données !" }, "sponsor404": { "message": "Pas de messages commerciaux trouvés" @@ -348,7 +348,7 @@ "message": ". Il est actuellement réglé sur :" }, "supportInvidious": { - "message": "Soutenir Invidious" + "message": "Supporter Invidious" }, "supportInvidiousDescription": { "message": "Invidious (invidio.us) est un client tiers pour YouTube. Vous devez accepter des permissions supplémentaires pour activer son support. Cette fonctionnalité ne fonctionne pas en mode incognito sur Chrome et les autres variantes de Chromium." @@ -489,6 +489,9 @@ "category_outro": { "message": "Générique de fin" }, + "category_outro_description": { + "message": "Générique de fin ou quand les fiches de fin de vidéo apparaissent. Ne pas utiliser pour les conclusions orales. Ne doit pas inclure de contenu utile. Ne pas utiliser sur les vidéos de musique." + }, "category_interaction": { "message": "Rappel d'interaction (abonnement)" }, diff --git a/public/_locales/hu/messages.json b/public/_locales/hu/messages.json index 1ec2d4ad..ac457e4b 100644 --- a/public/_locales/hu/messages.json +++ b/public/_locales/hu/messages.json @@ -1,4 +1,8 @@ { + "Name": { + "message": "SponsorBlock", + "description": "Name of the extension." + }, "Loading": { "message": "Betöltés..." }, diff --git a/public/_locales/nl/messages.json b/public/_locales/nl/messages.json index 53eea706..a3c61e21 100644 --- a/public/_locales/nl/messages.json +++ b/public/_locales/nl/messages.json @@ -11,15 +11,39 @@ "message": "Sla sponsoring over op YouTube video's. Rapporteer sponsors van video's die je bekijkt om tijd van anderen te besparen.", "description": "Description of the extension." }, + "400": { + "message": "Server zegt dat het verzoek ongeldig is" + }, + "429": { + "message": "Je hebt te veel sponsortijden voor deze video doorgegeven, weet je zeker dat het er zo veel zijn?" + }, + "409": { + "message": "Dit is al een keer ingediend" + }, + "channelWhitelisted": { + "message": "Kanaal gewhitelist!" + }, "Sponsor": { "message": "sponsor" }, "Sponsors": { "message": "sponsoren" }, + "Segment": { + "message": "Sponsor segment" + }, + "Segments": { + "message": "Sponsor segmenten" + }, + "upvoteButtonInfo": { + "message": "Stem op deze indiening" + }, "reportButtonTitle": { "message": "Melden" }, + "reportButtonInfo": { + "message": "Rapporteer deze indiening als onjuist." + }, "Dismiss": { "message": "Negeren" }, @@ -35,9 +59,21 @@ "Hide": { "message": "Nooit weergeven" }, + "hitGoBack": { + "message": "Druk op unskip om naar waar je vandaan komt te gaan." + }, + "unskip": { + "message": "Unskip" + }, + "reskip": { + "message": "Reskip" + }, "paused": { "message": "Gepauzeerd" }, + "manualPaused": { + "message": "Timer gestopt" + }, "clearThis": { "message": "Weet je zeker dat je dit formulier wilt wissen?\n\n" }, diff --git a/public/_locales/pt_BR/messages.json b/public/_locales/pt_BR/messages.json index fb48f8bd..31ba65b7 100644 --- a/public/_locales/pt_BR/messages.json +++ b/public/_locales/pt_BR/messages.json @@ -72,7 +72,7 @@ "message": "Tem certeza que quer limpar isso?\n\n" }, "Unknown": { - "message": "Teve um erro ao enviar seus segmentos, tente novamente depois." + "message": "Houve um erro ao enviar seus segmentos, tente novamente mais tarde." }, "sponsorFound": { "message": "Os patrocinadores desse vídeo estão no banco de dados!" @@ -87,7 +87,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 feche esse popup e abra de novo." + "message": "Nenhum vídeo do YouTube foi encontrado nesta aba. Se você sabe que esta é uma aba do YouTube, feche este pop-up e abra-o novamente. Se isso não funcionar, tente recarregar a aba." }, "success": { "message": "Sucesso!" @@ -96,13 +96,13 @@ "message": "Votado!" }, "connectionError": { - "message": "Um erro de conexão aconteceu: Código: " + "message": "Ocorreu um erro de conexão. Código de erro: " }, "wantToSubmit": { "message": "Quer enviar os segmentos para o vídeo de ID" }, "leftTimes": { - "message": "Parece que você se esqueceu de enviar alguns segmentos. Volta pra página para os enviar (não foram deletados)." + "message": "Parece que você se esqueceu de enviar alguns segmentos. Volte para aquela página para enviá-los (eles não foram deletados)." }, "clearTimes": { "message": "Apagar intervalos dos patrocínios" @@ -111,25 +111,25 @@ "message": "Abrir o Popup SponsorBlock" }, "SubmitTimes": { - "message": "Submeter intervalos dos patrocínios" + "message": "Enviar intervalos de patrocínios" }, "submitCheck": { - "message": "Tem a certeza que pretende submeter?" + "message": "Você tem certeza que deseja enviar isto?" }, "whitelistChannel": { - "message": "Meter canal na Whitelist" + "message": "Colocar canal na lista branca" }, "removeFromWhitelist": { - "message": "Remover canal da Whitelist" + "message": "Remover canal da lista branca" }, "voteOnTime": { "message": "Vote num intervalo de patrocínio" }, "recordTimes": { - "message": "Registe um intervalo de patrocínio" + "message": "Grave os intervalos de um patrocínio" }, "soFarUHSubmited": { - "message": "Até agora submeteu" + "message": "Até agora, você já enviou" }, "savedPeopleFrom": { "message": "Poupaste a outros de " @@ -141,10 +141,10 @@ "message": "aqui" }, "recordTimesDescription": { - "message": "Clique no botão abaixo quando o patrocínio começar e quando terminar para registrar e submetê-lo à base de dados." + "message": "Clique no botão abaixo quando o patrocínio começa e termina para gravá-lo na base de dados." }, "popupHint": { - "message": "Dica: Aperte a tecla ; enquanto reproduzir o vídeo para registar o começo/fim de um patrocínio e \" para enviar. (Essa configuração pode ser mudada em opções.)" + "message": "Dica: Aperte a tecla ponto e vírgula (;) com a janela focada em um vídeo para reportar o começo/fim de um patrocínio e aspas (\") para enviar. (Esta configuração pode ser mudada nas opções.)" }, "lastTimes": { "message": "Últimos Intervalos de Patrocínios Seleciados" @@ -159,10 +159,10 @@ "message": "Isso é usado na página pública de estatísticas que mostra o quanto você já contríbuíu. Veja-a" }, "setUsername": { - "message": "Criar nomde de utilizador" + "message": "Definir nome de usuário" }, "discordAdvert": { - "message": "Junte-se ao discord oficial para sugerir dicas e sugestões!" + "message": "Junte-se ao servidor do discord oficial para dar dicas e sugestões!" }, "hideThis": { "message": "Esconder isto" diff --git a/public/_locales/sv/messages.json b/public/_locales/sv/messages.json index 00df7d16..ecfee2c6 100644 --- a/public/_locales/sv/messages.json +++ b/public/_locales/sv/messages.json @@ -1,4 +1,8 @@ { + "Name": { + "message": "SponsorBlock", + "description": "Name of the extension." + }, "fullName": { "message": "SponsorBlock för YouTube - Hoppa över sponsring", "description": "Name of the extension." @@ -19,6 +23,9 @@ "channelWhitelisted": { "message": "Kanal vitlistad!" }, + "Sponsor": { + "message": "sponsor" + }, "Sponsors": { "message": "sponsorer" }, @@ -31,6 +38,9 @@ "reportButtonTitle": { "message": "Rapportera" }, + "reportButtonInfo": { + "message": "Rapportera det här segmentet som inkorrekt." + }, "Dismiss": { "message": "Avfärda" }, @@ -58,6 +68,9 @@ "paused": { "message": "Pausad" }, + "manualPaused": { + "message": "Timern stoppad" + }, "confirmMSG": { "message": "Klicka på infoknappen eller öppna popup-rutan genom att klicka på tilläggets ikon i hörnet uppe till höger för att redigera eller ta bort inviduella värden." }, @@ -88,6 +101,9 @@ "voted": { "message": "Röstat!" }, + "serverDown": { + "message": "Det verkar som att servern är nere. Kontakta utvecklaren omedelbart." + }, "connectionError": { "message": "Anslutningsfel. Felkod: " }, @@ -130,6 +146,9 @@ "viewLeaderboard": { "message": "Se leaderboarden" }, + "here": { + "message": "här" + }, "recordTimesDescription": { "message": "Klicka på knappen nedan när sponsormeddelandet börjar och slutar för att spela in och rapportera till databasen." }, @@ -253,6 +272,9 @@ "skip": { "message": "Hoppa över" }, + "skipped": { + "message": "Skippat" + }, "disableAutoSkip": { "message": "Avaktivera Hoppa Över Automatiskt" }, @@ -325,6 +347,9 @@ "supportInvidious": { "message": "Stöd Invidious" }, + "supportInvidiousDescription": { + "message": "Invidious (invidio.us) är en tredjeparts YouTube-klient. För att aktivera stöd måste du acceptera de extra behörigheterna. Detta kommer INTE att fungera i incognito i Chrome och andra Cromium-varianter." + }, "optionsInfo": { "message": "Aktivera Invidious stöd, avaktivera hoppa över automatiskt, dölj knappar och mer." }, @@ -455,6 +480,21 @@ "category_sponsor": { "message": "Sponsormeddelande" }, + "category_intro": { + "message": "Intro-animation" + }, + "category_intro_description": { + "message": "Intro-animationer som är återkommande i serien eller inte ger direkt värde. Detta bör inte användas på musikvideor." + }, + "category_intro_short": { + "message": "Intro" + }, + "category_music_offtopic_description": { + "message": "Endast för användning i musikvideor. Detta inkluderar intros och outros i musikvideor." + }, + "category_music_offtopic_short": { + "message": "Icke-musik" + }, "disable": { "message": "Avaktivera" }, @@ -464,6 +504,9 @@ "showOverlay": { "message": "Visa Lager Ovanpå Spelare" }, + "category": { + "message": "Kategori" + }, "enableTestingServer": { "message": "Aktivera Server För Betatestning" }, @@ -482,6 +525,9 @@ "bracketEnd": { "message": "(Slut)" }, + "hiddenDueToDuration": { + "message": "dold: för kort" + }, "channelDataNotFound": { "message": "Kanal-ID är inte inladdat än." }, @@ -490,5 +536,24 @@ }, "itCouldBeAdblockerIssue": { "message": "Om detta fortsätter att inträffa, kan orsaken vara din annonsblockerare. Vänligen kontrollera https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests" + }, + "downvoteDescription": { + "message": "Fel timing" + }, + "incorrectCategory": { + "message": "Fel kategori" + }, + "nonMusicCategoryOnMusic": { + "message": "Den här videon är kategoriserad som musik. Är du säker på att du vill skicka in segment med icke-musikkategorier? Om denna video faktiskt är musik, bör du inte skicka in detta segment. Vänligen läs riktlinjerna om du är förvirrad." + }, + "multipleSegments": { + "message": "Flera segment" + }, + "guidelines": { + "message": "Riktlinjer" + }, + "readTheGuidelines": { + "message": "Läs riktlinjerna!!", + "description": "Show the first time they submit or if they are \"high risk\"" } } From 627c7769b0617700d98bdaeef6e25a48a1fc3de8 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 19 Jun 2020 18:54:17 -0400 Subject: [PATCH 02/18] New Crowdin updates (#380) * New translations messages.json (French) * New translations messages.json (French) * New translations messages.json (French) * New translations messages.json (French) --- public/_locales/fr/messages.json | 73 +++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/public/_locales/fr/messages.json b/public/_locales/fr/messages.json index 5a8ead1b..6c58c007 100644 --- a/public/_locales/fr/messages.json +++ b/public/_locales/fr/messages.json @@ -81,7 +81,7 @@ "message": "Êtes-vous certain(e) de vouloir supprimer vos soumissions ?\n\n" }, "Unknown": { - "message": "Une erreur s'est produite lors de la soumission, veuillez ré-essayer plus tard." + "message": "Une erreur s'est produite lors de la soumission, veuillez réessayer plus tard." }, "sponsorFound": { "message": "Les messages commerciaux pour cette vidéo sont déjà dans notre base de données !" @@ -168,10 +168,10 @@ "message": "Soumettre les temps" }, "publicStats": { - "message": "Affiché sur le classement public pour montrer vos contributions. Voir sur" + "message": "Votre pseudo est inscrit dans le classement public pour afficher vos contributions. Le consulter" }, "setUsername": { - "message": "Choisir pseudo" + "message": "Choisir un pseudonyme" }, "discordAdvert": { "message": "Rejoignez le serveur Discord officiel pour toutes suggestions ou remarques!" @@ -297,7 +297,7 @@ "message": "Vous avez passé " }, "youHaveSaved": { - "message": "Vous avez économisé " + "message": "Vous vous êtes économisé " }, "minLower": { "message": "minute" @@ -342,7 +342,7 @@ "message": "Passage automatique" }, "showSkipNotice": { - "message": "Afficher l'avis après le passage d'un sponsor" + "message": "Notifier après qu'un sponsor ait été sauté" }, "keybindCurrentlySet": { "message": ". Il est actuellement réglé sur :" @@ -483,9 +483,18 @@ "category_sponsor": { "message": "Message commercial" }, + "category_sponsor_description": { + "message": "Promotion rémunérée, parrainage rémunéré et publicité directe. Pas pour l'autopromotion ou les présentations gratuites de causes, de créateurs, de sites web ou de produits qu'ils aiment." + }, "category_intro": { "message": "Générique d'introduction" }, + "category_intro_description": { + "message": "Introductions animées qui sont récurrentes ou qui n'ont pas de valeur ajoutée directe dans la série. Ne doit pas être utilisé pour les vidéos musicales." + }, + "category_intro_short": { + "message": "Introduction" + }, "category_outro": { "message": "Générique de fin" }, @@ -495,9 +504,27 @@ "category_interaction": { "message": "Rappel d'interaction (abonnement)" }, + "category_interaction_description": { + "message": "Lorsqu'il y a un bref rappel pour liker, s'abonner ou les follow parmi le contenu. Si le message est long ou porte sur quelque chose de spécifique, cela devrait plutôt être classé comme une autopromotion." + }, + "category_interaction_short": { + "message": "Rappel d'interaction" + }, + "category_selfpromo": { + "message": "Non rémunéré/autopromotion" + }, + "category_selfpromo_description": { + "message": "Semblable au \"sponsor\", excepté pour la promotion non rémunérée ou l'auto-promotion. Cela inclut les marchandises, les dons et les informations sur leurs collaborateurs." + }, "category_music_offtopic": { "message": "Musique : Segment non-musicale" }, + "category_music_offtopic_description": { + "message": "A utiliser uniquement dans les vidéos musicales. Cela inclut les introductions ou les fins dans les vidéos." + }, + "category_music_offtopic_short": { + "message": "Hors musique" + }, "category_livestream_messages": { "message": "Stream : lecture de dons et messages" }, @@ -510,6 +537,23 @@ "showOverlay": { "message": "Afficher dans la barre de progression" }, + "colorFormatIncorrect": { + "message": "Votre couleur est mal formatée. Il devrait s'agir d'un code hexadécimal à 3 ou 6 chiffres avec un signe numérique au début." + }, + "previewColor": { + "message": "Couleur en mode aperçu", + "description": "Referring to submissions that have not been sent to the server yet." + }, + "seekBarColor": { + "message": "Couleur dans la barre de progression" + }, + "category": { + "message": "Catégorie" + }, + "skipOption": { + "message": "Option de saut", + "description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)" + }, "enableTestingServer": { "message": "Activer le serveur de test bêta" }, @@ -563,5 +607,24 @@ }, "multipleSegments": { "message": "Plusieurs segments" + }, + "guidelines": { + "message": "Instructions" + }, + "readTheGuidelines": { + "message": "Lisez les instructions !!", + "description": "Show the first time they submit or if they are \"high risk\"" + }, + "categoryUpdate1": { + "message": "Les catégories sont là !" + }, + "categoryUpdate2": { + "message": "Ouvrir les options pour sauter les intros, outros, marchandises, etc." + }, + "unsubmittedWarning": { + "message": "Notification de segments non soumis" + }, + "unsubmittedWarningDescription": { + "message": "Envoyer une notification lorsque vous quittez une vidéo avec des segments qui ne sont pas téléversés" } } From 783ea5cf5b1090a37e5b0ae8669cf12e9703001f Mon Sep 17 00:00:00 2001 From: Edvin Boul Date: Mon, 22 Jun 2020 18:29:08 +0300 Subject: [PATCH 03/18] Fix typo in Chrome Users badge Chome -> Chrome --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 791a7b98..bf862466 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@

Badge - Badge + Badge Badge Badge Badge From beea8181a12fe63856897647b1c8a189105dee4f Mon Sep 17 00:00:00 2001 From: NDevTK <31563761+NDevTK@users.noreply.github.com> Date: Fri, 26 Jun 2020 19:19:51 +0100 Subject: [PATCH 04/18] Added config option --- src/config.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/config.ts b/src/config.ts index 634947a9..066e7fe0 100644 --- a/src/config.ts +++ b/src/config.ts @@ -5,6 +5,7 @@ import Utils from "./utils"; const utils = new Utils(); interface SBConfig { + timeWithSkips: boolean, userID: string, sponsorTimes: SBMap, whitelistedChannels: string[], @@ -123,6 +124,7 @@ var Config: SBObject = { */ configListeners: [], defaults: { + timeWithSkips: false, userID: null, sponsorTimes: new SBMap("sponsorTimes"), whitelistedChannels: [], @@ -406,4 +408,4 @@ function addDefaults() { // Sync config setupConfig(); -export default Config; \ No newline at end of file +export default Config; From 0ebd7f4f8d1568e548c3ae05c1ef9a4671abbddf Mon Sep 17 00:00:00 2001 From: NDevTK <31563761+NDevTK@users.noreply.github.com> Date: Fri, 26 Jun 2020 19:33:19 +0100 Subject: [PATCH 05/18] Added duration override --- src/content.ts | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/content.ts b/src/content.ts index 86ae8342..33a402b2 100644 --- a/src/content.ts +++ b/src/content.ts @@ -801,7 +801,8 @@ function updatePreviewBar() { if (localSponsorTimes == null) localSponsorTimes = []; let allSponsorTimes = localSponsorTimes.concat(sponsorTimesSubmitting); - + hideSponsorTime(allSponsorTimes); + //create an array of the sponsor types let types = []; for (let i = 0; i < localSponsorTimes.length; i++) { @@ -1593,3 +1594,34 @@ function updateAdFlag() { updateVisibilityOfPlayerControlsButton(); } } + +function formatTime(seconds) { + if(isNaN(seconds)) return + const h = Math.floor(seconds / 3600); + const m = Math.floor((seconds % 3600) / 60); + const s = Math.round(seconds % 60); + return [ + h, + m > 9 ? m : (h ? '0' + m : m || '0'), + s > 9 ? s : '0' + s + ].filter(Boolean).join(':'); +} + +function hideSponsorTime(barTimes) { + if(!Config.config.timeWithSkips) return + + let skipDuration = 0; + + // Prevent dupicate UUID + let seen = []; + + for (let i = 0; i < barTimes.length; i++) { + let time = barTimes[i]; + if(seen.includes(time.UUID)) break; + seen.push(time.UUID); + skipDuration += time.segment[1] - time.segment[0]; + } + + let times = document.getElementsByClassName("ytp-time-display notranslate")[0].getElementsByTagName("span"); + times[2].innerText = formatTime(video.duration - skipDuration); +} From 72fc3620bc968d1a89b04d33f1ec75f0c3f021dc Mon Sep 17 00:00:00 2001 From: daniel11420 Date: Sat, 27 Jun 2020 06:32:21 +0200 Subject: [PATCH 06/18] Fix typo in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bf862466..b619c227 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ SponsorBlock is an extension that will skip over sponsored segments of YouTube videos. SponsorBlock is a crowdsourced browser extension that lets anyone submit the start and end times of sponsored segments of YouTube videos. Once one person submits this information, everyone else with this extension will skip right over the sponsored segment. -Also support Invidio.us. +Also supports Invidio.us. **Translate:** [![Crowdin](https://badges.crowdin.net/sponsorblock/localized.svg)](https://crowdin.com/project/sponsorblock) From e47330a79c07aa09e98a723de46c370336513585 Mon Sep 17 00:00:00 2001 From: daniel11420 Date: Sat, 27 Jun 2020 06:38:29 +0200 Subject: [PATCH 07/18] Add more unofficial ports to the Unofficial Ports section in the README --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bf862466..298fcd96 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,11 @@

Unofficial Ports: - MPV + MPV | + Kodi | + NewPipe (Android) | + iOS | + Downloaded YouTube Videos

From b2f1a737f5a56a0eb79e30a8a7d2c880974c1c3e Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Sat, 27 Jun 2020 00:44:38 -0400 Subject: [PATCH 08/18] Remove port without pre-built release --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1644f503..fc248a9a 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,7 @@ MPV | Kodi | NewPipe (Android) | - iOS | - Downloaded YouTube Videos + iOS

From e6f53a3ef95d581217b5713b78a859aae83b1a7c Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Sat, 27 Jun 2020 00:49:55 -0400 Subject: [PATCH 09/18] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fc248a9a..9b3902c4 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Unofficial Ports: MPV | Kodi | - NewPipe (Android) | + Android (NewPipe and Vanced) | iOS

From 3b59389cabe9ded12eeb9a2bf81523ba0e6dd0e3 Mon Sep 17 00:00:00 2001 From: NDevTK <31563761+NDevTK@users.noreply.github.com> Date: Sat, 27 Jun 2020 15:16:36 +0100 Subject: [PATCH 10/18] Added different ui option --- src/content.ts | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/content.ts b/src/content.ts index 33a402b2..1e324d6f 100644 --- a/src/content.ts +++ b/src/content.ts @@ -1622,6 +1622,25 @@ function hideSponsorTime(barTimes) { skipDuration += time.segment[1] - time.segment[0]; } - let times = document.getElementsByClassName("ytp-time-display notranslate")[0].getElementsByTagName("span"); - times[2].innerText = formatTime(video.duration - skipDuration); + let display = document.getElementsByClassName("ytp-time-display notranslate")[0]; + if (display === undefined) return + + if(Config.config.hideRealTime) { + return display.getElementsByTagName("span")[2].innerText = formatTime(video.duration - skipDuration); + } + + const durationID = "durationAfterSkips"; + let duration; + + + duration = document.getElementById(durationID); + + // Create span if needed + if(duration === null) { + duration = document.createElement('span'); + duration.id = durationID; + display.appendChild(duration); + } + + duration.innerText = " ("+formatTime(video.duration - skipDuration)+")"; } From fd77748b15bd79346267f8b494b38ebac9f02162 Mon Sep 17 00:00:00 2001 From: NDevTK <31563761+NDevTK@users.noreply.github.com> Date: Sat, 27 Jun 2020 15:20:00 +0100 Subject: [PATCH 11/18] Updated config --- src/config.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/config.ts b/src/config.ts index 066e7fe0..adf7f0fc 100644 --- a/src/config.ts +++ b/src/config.ts @@ -5,6 +5,7 @@ import Utils from "./utils"; const utils = new Utils(); interface SBConfig { + hideRealTime: boolean, timeWithSkips: boolean, userID: string, sponsorTimes: SBMap, @@ -124,7 +125,8 @@ var Config: SBObject = { */ configListeners: [], defaults: { - timeWithSkips: false, + hideRealTime: false, + timeWithSkips: true, userID: null, sponsorTimes: new SBMap("sponsorTimes"), whitelistedChannels: [], From f33fa2f621034bcc2f93333b7f5e455fa7cf6d5c Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Sat, 27 Jun 2020 11:38:49 -0400 Subject: [PATCH 12/18] Moved Android to official --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9b3902c4..dae8acf5 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Download: Chrome/Chromium | Firefox | + Android | Website | Stats

@@ -19,7 +20,6 @@ Unofficial Ports: MPV | Kodi | - Android (NewPipe and Vanced) | iOS

From ec2950786fbc714a39474423f13060e863dd5c0e Mon Sep 17 00:00:00 2001 From: NDevTK <31563761+NDevTK@users.noreply.github.com> Date: Mon, 29 Jun 2020 17:52:28 +0100 Subject: [PATCH 13/18] Skip if skipDuration is 0 --- src/content.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/content.ts b/src/content.ts index 1e324d6f..f6c39de1 100644 --- a/src/content.ts +++ b/src/content.ts @@ -1622,6 +1622,8 @@ function hideSponsorTime(barTimes) { skipDuration += time.segment[1] - time.segment[0]; } + if(skipDuration === 0) return + let display = document.getElementsByClassName("ytp-time-display notranslate")[0]; if (display === undefined) return From 8d53e776b8b461e336541ec8690f7227ec1e690c Mon Sep 17 00:00:00 2001 From: NDevTK <31563761+NDevTK@users.noreply.github.com> Date: Mon, 29 Jun 2020 19:35:11 +0100 Subject: [PATCH 14/18] Do not show if skipDuration is 0 --- src/content.ts | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/content.ts b/src/content.ts index f6c39de1..c01ec56e 100644 --- a/src/content.ts +++ b/src/content.ts @@ -1612,30 +1612,20 @@ function hideSponsorTime(barTimes) { let skipDuration = 0; - // Prevent dupicate UUID - let seen = []; - + // Calculate skipDuration based from the segments in the preview bar for (let i = 0; i < barTimes.length; i++) { let time = barTimes[i]; - if(seen.includes(time.UUID)) break; - seen.push(time.UUID); skipDuration += time.segment[1] - time.segment[0]; } - if(skipDuration === 0) return - + // YouTube player time display let display = document.getElementsByClassName("ytp-time-display notranslate")[0]; if (display === undefined) return - if(Config.config.hideRealTime) { - return display.getElementsByTagName("span")[2].innerText = formatTime(video.duration - skipDuration); - } + let formatedTime = formatTime(video.duration - skipDuration); - const durationID = "durationAfterSkips"; - let duration; - - - duration = document.getElementById(durationID); + const durationID = "durationAfterSkips"; + let duration = document.getElementById(durationID); // Create span if needed if(duration === null) { @@ -1643,6 +1633,13 @@ function hideSponsorTime(barTimes) { duration.id = durationID; display.appendChild(duration); } - - duration.innerText = " ("+formatTime(video.duration - skipDuration)+")"; + + if(Config.config.hideRealTime) { + // Empty if not enabled + duration.innerText = ""; + display.getElementsByTagName("span")[2].innerText = formatedTime; + } else { + // Empty if the time is the same + duration.innerText = (skipDuration === 0) ? "" : " ("+formatedTime+")"; + } } From 77abc1d031d299302b6ac365e7a108d620a9f458 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 3 Jul 2020 19:44:15 -0400 Subject: [PATCH 15/18] Reuse existing functions --- src/content.ts | 18 ++++++++++-------- src/utils.ts | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/content.ts b/src/content.ts index c01ec56e..e28acc26 100644 --- a/src/content.ts +++ b/src/content.ts @@ -801,7 +801,7 @@ function updatePreviewBar() { if (localSponsorTimes == null) localSponsorTimes = []; let allSponsorTimes = localSponsorTimes.concat(sponsorTimesSubmitting); - hideSponsorTime(allSponsorTimes); + showTimeWithoutSkips(allSponsorTimes); //create an array of the sponsor types let types = []; @@ -1607,22 +1607,25 @@ function formatTime(seconds) { ].filter(Boolean).join(':'); } -function hideSponsorTime(barTimes) { - if(!Config.config.timeWithSkips) return +function showTimeWithoutSkips(allSponsorTimes): void { + if(!Config.config.timeWithSkips) return; let skipDuration = 0; // Calculate skipDuration based from the segments in the preview bar - for (let i = 0; i < barTimes.length; i++) { - let time = barTimes[i]; - skipDuration += time.segment[1] - time.segment[0]; + for (let i = 0; i < allSponsorTimes.length; i++) { + // If an end time exists + if (allSponsorTimes[i].segment[1]) { + skipDuration += allSponsorTimes[i].segment[1] - allSponsorTimes[i].segment[0]; + } + } // YouTube player time display let display = document.getElementsByClassName("ytp-time-display notranslate")[0]; if (display === undefined) return - let formatedTime = formatTime(video.duration - skipDuration); + let formatedTime = utils.getFormattedTime(video.duration - skipDuration); const durationID = "durationAfterSkips"; let duration = document.getElementById(durationID); @@ -1639,7 +1642,6 @@ function hideSponsorTime(barTimes) { duration.innerText = ""; display.getElementsByTagName("span")[2].innerText = formatedTime; } else { - // Empty if the time is the same duration.innerText = (skipDuration === 0) ? "" : " ("+formatedTime+")"; } } diff --git a/src/utils.ts b/src/utils.ts index 6e12a0e5..db766772 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -338,7 +338,7 @@ class Utils { secondsNum = Math.floor(secondsNum); } - let secondsDisplay: string = String(secondsNum.toFixed(3)); + let secondsDisplay: string = String(precise ? secondsNum.toFixed(3) : secondsNum); if (secondsNum < 10) { //add a zero From bfafcd07cce81fb40ce8cb2d36b0309e14028a5a Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 3 Jul 2020 19:56:08 -0400 Subject: [PATCH 16/18] Fix font issue, NaN issue and remove hide real time --- src/config.ts | 6 ++---- src/content.ts | 23 ++++++++++------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/config.ts b/src/config.ts index adf7f0fc..31880f48 100644 --- a/src/config.ts +++ b/src/config.ts @@ -5,8 +5,6 @@ import Utils from "./utils"; const utils = new Utils(); interface SBConfig { - hideRealTime: boolean, - timeWithSkips: boolean, userID: string, sponsorTimes: SBMap, whitelistedChannels: string[], @@ -17,6 +15,7 @@ interface SBConfig { skipCount: number, sponsorTimesContributed: number, submissionCountSinceCategories: number, // New count used to show the "Read The Guidelines!!" message + showTimeWithSkips: boolean, unsubmittedWarning: boolean, disableSkipping: boolean, trackViewCount: boolean, @@ -125,8 +124,6 @@ var Config: SBObject = { */ configListeners: [], defaults: { - hideRealTime: false, - timeWithSkips: true, userID: null, sponsorTimes: new SBMap("sponsorTimes"), whitelistedChannels: [], @@ -137,6 +134,7 @@ var Config: SBObject = { skipCount: 0, sponsorTimesContributed: 0, submissionCountSinceCategories: 0, + showTimeWithSkips: true, unsubmittedWarning: true, disableSkipping: false, trackViewCount: true, diff --git a/src/content.ts b/src/content.ts index e28acc26..6d8ae79b 100644 --- a/src/content.ts +++ b/src/content.ts @@ -801,7 +801,6 @@ function updatePreviewBar() { if (localSponsorTimes == null) localSponsorTimes = []; let allSponsorTimes = localSponsorTimes.concat(sponsorTimesSubmitting); - showTimeWithoutSkips(allSponsorTimes); //create an array of the sponsor types let types = []; @@ -819,6 +818,10 @@ function updatePreviewBar() { previewBar.set(utils.getSegmentsFromSponsorTimes(allSponsorTimes), types, video.duration) + if (Config.config.showTimeWithSkips) { + showTimeWithoutSkips(allSponsorTimes); + } + //update last video id lastPreviewBarUpdate = sponsorVideoID; } @@ -1608,8 +1611,6 @@ function formatTime(seconds) { } function showTimeWithoutSkips(allSponsorTimes): void { - if(!Config.config.timeWithSkips) return; - let skipDuration = 0; // Calculate skipDuration based from the segments in the preview bar @@ -1627,21 +1628,17 @@ function showTimeWithoutSkips(allSponsorTimes): void { let formatedTime = utils.getFormattedTime(video.duration - skipDuration); - const durationID = "durationAfterSkips"; - let duration = document.getElementById(durationID); + const durationID = "sponsorBlockDurationAfterSkips"; + let duration = document.getElementById(durationID); // Create span if needed if(duration === null) { duration = document.createElement('span'); - duration.id = durationID; + duration.id = durationID; + duration.classList.add("ytp-time-duration"); + display.appendChild(duration); } - if(Config.config.hideRealTime) { - // Empty if not enabled - duration.innerText = ""; - display.getElementsByTagName("span")[2].innerText = formatedTime; - } else { - duration.innerText = (skipDuration === 0) ? "" : " ("+formatedTime+")"; - } + duration.innerText = (skipDuration <= 0 || isNaN(skipDuration)) ? "" : " ("+formatedTime+")"; } From 8d41af073d895938c0c555ae4a75e5d13459af30 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 3 Jul 2020 20:55:58 -0400 Subject: [PATCH 17/18] Added option to options page --- public/_locales/en/messages.json | 6 ++++++ public/options/options.html | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/public/_locales/en/messages.json b/public/_locales/en/messages.json index a1beb859..44897364 100644 --- a/public/_locales/en/messages.json +++ b/public/_locales/en/messages.json @@ -289,6 +289,12 @@ "audioNotificationDescription": { "message": "Audio notification on skip will play a sound whenever a sponsor is skipped. If disabled (or auto skip is disabled), no sound will be played." }, + "showTimeWithSkips": { + "message": "Show Time With Skips Removed" + }, + "showTimeWithSkipsDescription": { + "message": "This time appears in brackets next to the current time on below the seekbar. This shows the total video duration minus any segments. This includes segments marked as only \"Show In Seekbar\"." + }, "youHaveSkipped": { "message": "You have skipped " }, diff --git a/public/options/options.html b/public/options/options.html index 51001ee6..5a5e6caa 100644 --- a/public/options/options.html +++ b/public/options/options.html @@ -268,6 +268,23 @@
__MSG_audioNotificationDescription__
+
+
+ +
+ + +
+
+ +
__MSG_showTimeWithSkipsDescription__
+
+

From c9a2edaf3d8c31a8d4b6ea63a54e89bd56f3a87c Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 3 Jul 2020 20:56:45 -0400 Subject: [PATCH 18/18] Remove unused function --- src/content.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/content.ts b/src/content.ts index 6d8ae79b..0feb3e61 100644 --- a/src/content.ts +++ b/src/content.ts @@ -1598,18 +1598,6 @@ function updateAdFlag() { } } -function formatTime(seconds) { - if(isNaN(seconds)) return - const h = Math.floor(seconds / 3600); - const m = Math.floor((seconds % 3600) / 60); - const s = Math.round(seconds % 60); - return [ - h, - m > 9 ? m : (h ? '0' + m : m || '0'), - s > 9 ? s : '0' + s - ].filter(Boolean).join(':'); -} - function showTimeWithoutSkips(allSponsorTimes): void { let skipDuration = 0;