aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--config.json.example2
-rw-r--r--public/_locales/pt_BR/messages.json348
-rw-r--r--src/content.ts45
3 files changed, 382 insertions, 13 deletions
diff --git a/config.json.example b/config.json.example
index aad02a3c..09cf2bba 100644
--- a/config.json.example
+++ b/config.json.example
@@ -1,6 +1,6 @@
{
"serverAddress": "https://sponsor.ajay.app",
"testingServerAddress": "https://sponsor.ajay.app/test",
- "serverAddressComment": "This specifies the default SponsorBlock server to conect to",
+ "serverAddressComment": "This specifies the default SponsorBlock server to connect to",
"categoryList": ["sponsor", "intro", "outro", "interaction", "selfpromo", "music_offtopic"]
}
diff --git a/public/_locales/pt_BR/messages.json b/public/_locales/pt_BR/messages.json
index 417aead1..25904df1 100644
--- a/public/_locales/pt_BR/messages.json
+++ b/public/_locales/pt_BR/messages.json
@@ -1,4 +1,8 @@
{
+ "Name": {
+ "message": "SponsorBlock",
+ "description": "Name of the extension."
+ },
"fullName": {
"message": "SponsorBlock para YouTube - Pule patrocínios",
"description": "Name of the extension."
@@ -149,22 +153,22 @@
"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"
+ "message": "Clique no botão abaixo quando o patrocínio começar e quando terminar para registrar 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"
+ "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.)"
},
"lastTimes": {
- "message": "Intervalos de Patrocínios Escolhidos mais Recentemente"
+ "message": "Últimos Intervalos de Patrocínios Seleciados"
},
"clearTimesButton": {
"message": "Limpar Intervalos"
},
"submitTimesButton": {
- "message": "Submeter Intervalos"
+ "message": "Enviar Intervalos"
},
"publicStats": {
- "message": "Isto é usado na página pública de estatísticas que mostra o quanto já contríbuíu. Veje-a"
+ "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"
@@ -228,5 +232,339 @@
"sourceCode": {
"message": "Código fonte",
"description": "Used on Firefox Store Page"
+ },
+ "noticeUpdate": {
+ "message": "A notificação foi atualizada!",
+ "description": "The first line of the message displayed after the notice was upgraded."
+ },
+ "noticeUpdate2": {
+ "message": "Se você ainda não gostar dessa, aperte o botão não mostrar novamente.",
+ "description": "The second line of the message displayed after the notice was upgraded."
+ },
+ "setStartSponsorShortcut": {
+ "message": "Defina a tecla para que marca o início do patrocínio"
+ },
+ "setSubmitKeybind": {
+ "message": "Defina a tecla para enviar o segmento de patrocínio"
+ },
+ "keybindDescription": {
+ "message": "Selecione uma tecla apertando-a"
+ },
+ "keybindDescriptionComplete": {
+ "message": "A tecla foi definida para: "
+ },
+ "0": {
+ "message": "Tempo limite de conexão excedida. Cheque a sua conexão de internet. Se a sua internet estiver funcionando, o servidor está sobrecarregado ou fora do ar."
+ },
+ "disableSkipping": {
+ "message": "Desativar SponsorBlock"
+ },
+ "enableSkipping": {
+ "message": "Ativar SponsorBlock"
+ },
+ "yourWork": {
+ "message": "Suas submissões",
+ "description": "Used to describe the section that will show you the statistics from your submissions."
+ },
+ "502": {
+ "message": "O servidor parece estar sobrecarregado. Tente novamente em alguns segundos."
+ },
+ "errorCode": {
+ "message": "Código de erro: "
+ },
+ "noticeTitleNotSkipped": {
+ "message": "Pular patrocinador?"
+ },
+ "skip": {
+ "message": "Pular"
+ },
+ "disableAutoSkip": {
+ "message": "Desativar Salto Automático"
+ },
+ "enableAutoSkip": {
+ "message": "Ativar Salto Automático"
+ },
+ "autoSkipDescription": {
+ "message": "Pular automaticamente irá pular patrocínios por você. Se desabilitado, um aviso irá aparecer perguntando se deseja pular o anúncio."
+ },
+ "audioNotification": {
+ "message": "Notificação de áudio ao pular"
+ },
+ "audioNotificationDescription": {
+ "message": "A notificação de áudio ao pular irá tocar um som sempre que um patrocínio for ignorado. Se desativado (ou o pulo automático estiver desativado), nenhum som será reproduzido."
+ },
+ "youHaveSkipped": {
+ "message": "Você pulou "
+ },
+ "youHaveSaved": {
+ "message": "Você poupou "
+ },
+ "minLower": {
+ "message": "minuto"
+ },
+ "minsLower": {
+ "message": "minutos"
+ },
+ "hourLower": {
+ "message": "hora"
+ },
+ "hoursLower": {
+ "message": "horas"
+ },
+ "youHaveSavedTime": {
+ "message": "Você poupou outros"
+ },
+ "youHaveSavedTimeEnd": {
+ "message": " de suas vidas."
+ },
+ "guildlinesSummary": {
+ "message": "- Certifique-se de que seu segmento contém apenas patrocínio, nada mais.\n- Certifique-se de que pular esse segmento não vai pular conteúdo importante.\n- Se todo o vídeo for patrocinado, por favor não o denuncie. Um sistema completo de relatório de vídeo virá em breve.\n- Por favor, não denuncie avisos de parcialidade do vídeo (se um vídeo de avaliação for patrocinado, não pule quando eles mencionarem que é patrocinado)."
+ },
+ "statusReminder": {
+ "message": "Verifique status.sponsor.ajay.app para o status do servidor."
+ },
+ "changeUserID": {
+ "message": "Importar/Exportar seu ID de usuário"
+ },
+ "whatChangeUserID": {
+ "message": "Isso deve ser mantido em segredo. É como se fosse uma senha e não deve ser compartilhado com ninguém. Se alguém tiver isso, poderá se passar por você."
+ },
+ "setUserID": {
+ "message": "Definir ID de usuário"
+ },
+ "userIDChangeWarning": {
+ "message": "Atenção: A alteração do ID de usuário é permanente. Você tem certeza que deseja fazer isso? Certifique-se de fazer backup de seu ID antigo por precaução."
+ },
+ "createdBy": {
+ "message": "Criado por"
+ },
+ "autoSkip": {
+ "message": "Pular automaticamente"
+ },
+ "showSkipNotice": {
+ "message": "Mostrar aviso após um patrocínio ser ignorado"
+ },
+ "keybindCurrentlySet": {
+ "message": ". Atualmente, está definido para:"
+ },
+ "supportInvidious": {
+ "message": "Apoiar Invidious"
+ },
+ "supportInvidiousDescription": {
+ "message": "Invidious (invidio.us) é um cliente para YouTube de terceiros. Para ativar o apoio, você precisa aceitar as permissões adicionais. Isso não funciona em modo anônimo no Chrome ou em outras variantes do Chromium."
+ },
+ "optionsInfo": {
+ "message": "Ativar apoio ao Invidious, desabilitar pular automaticamente, ocultar botões e mais."
+ },
+ "addInvidiousInstance": {
+ "message": "Adicionar instância do Invidious"
+ },
+ "addInvidiousInstanceDescription": {
+ "message": "Adicionar uma instância personalizada do Invidious. Deve ser formatado com APENAS o domínio. Exemplo: invidious.ajay.app"
+ },
+ "add": {
+ "message": "Adicionar"
+ },
+ "addInvidiousInstanceError": {
+ "message": "Este é um domínio inválido. Ele deve incluir APENAS a parte do domínio. Exemplo: invidious.ajay.app"
+ },
+ "resetInvidiousInstance": {
+ "message": "Redefinir Lista de Instâncias do Invidious"
+ },
+ "resetInvidiousInstanceAlert": {
+ "message": "Você está prestes a redefinir a lista de instâncias do Invidious"
+ },
+ "currentInstances": {
+ "message": "Instâncias Atuais:"
+ },
+ "enableAutoUpvote": {
+ "message": "Upvote automático"
+ },
+ "whatAutoUpvote": {
+ "message": "Com isto habilitado, a extensão dará upvote em todas as submissões que você ver se você não reportar. Não funcionará se o aviso estiver desativado."
+ },
+ "minDuration": {
+ "message": "Duração mínima (segundos):"
+ },
+ "minDurationDescription": {
+ "message": "Segmentos de patrocinadores menores do que o valor definido não serão pulados ou mostrados no reprodutor."
+ },
+ "shortCheck": {
+ "message": "A seguinte submissão é mais curta do que sua opção de duração mínima. Isto significa que já foi enviada e que está sendo ignorada devido a esta opção. Tem certeza que deseja enviar mesmo assim?"
+ },
+ "showUploadButton": {
+ "message": "Mostrar botão de envio"
+ },
+ "whatUploadButton": {
+ "message": "Este botão aparece no reprodutor do YouTube depois de ter selecionado um carimbo de data/hora e está pronto para ser enviado."
+ },
+ "customServerAddress": {
+ "message": "Endereço do servidor do SponsorBlock"
+ },
+ "customServerAddressDescription": {
+ "message": "Endereço que o SponsorBlock usa para fazer chamadas ao servidor.\nA menos que você tenha sua própria instância de servidor, isso não deve ser alterado."
+ },
+ "save": {
+ "message": "Salvar"
+ },
+ "reset": {
+ "message": "Redefinir"
+ },
+ "customAddressError": {
+ "message": "Este endereço não está na forma correta. Certifique-se de que possui http:// ou https:// no início e sem barras no final."
+ },
+ "areYouSureReset": {
+ "message": "Tem certeza que deseja redefinir?"
+ },
+ "confirmPrivacy": {
+ "message": "O este vídeo está marcado como não listado. Clique em cancelar se você não deseja verificar se há patrocínios."
+ },
+ "unlistedCheck": {
+ "message": "Ignorar vídeos não listados/privados"
+ },
+ "whatUnlistedCheck": {
+ "message": "Esta configuração irá diminuir um pouco o desempenho do SponsorBlock. As pesquisas do patrocinador exigem que se envie o ID do vídeo para o servidor. Se você estiver preocupado com o envio de IDs de vídeo não listados pela internet, habilite essa opção."
+ },
+ "mobileUpdateInfo": {
+ "message": "m.youtube.com agora é suportado"
+ },
+ "exportOptions": {
+ "message": "Importar/Exportar Todas as Opções"
+ },
+ "whatExportOptions": {
+ "message": "Essa suas preferências em JSON. Isso inclui seu ID de usuário, então lembre-se de compartilhar com cuidado."
+ },
+ "setOptions": {
+ "message": "Definir Opções"
+ },
+ "exportOptionsWarning": {
+ "message": "Aviso: Alterar as opções é permanente e pode fazer a extensão parar de funcionar. Tem certeza que deseja fazer isso? Certifique-se de fazer um backup de seu antigo por precaução."
+ },
+ "incorrectlyFormattedOptions": {
+ "message": "Este JSON não está formatado corretamente. Suas opções não foram alteradas."
+ },
+ "confirmNoticeTitle": {
+ "message": "Enviar Segmento"
+ },
+ "submit": {
+ "message": "Enviar"
+ },
+ "cancel": {
+ "message": "Cancelar"
+ },
+ "delete": {
+ "message": "Deletar"
+ },
+ "preview": {
+ "message": "Pré-visualizar"
+ },
+ "edit": {
+ "message": "Editar"
+ },
+ "copyDebugInformation": {
+ "message": "Copiar Informações de Depuração Para Área de Transferência"
+ },
+ "copyDebugInformationFailed": {
+ "message": "Erro ao copiar para a área de transferência"
+ },
+ "copyDebugInformationOptions": {
+ "message": "Copia informações para a área de transferência para serem fornecidas a um desenvolvedor quando houver um bug / quando um solicitado pelo desenvolvedor. Informações sensíveis como seu ID de usuário, canais na lista de permissões e endereço personalizado do servidor foram removidos. No entanto, ele contém informações como seu useragent, navegador, sistema operacional e número de versão de extensão. "
+ },
+ "copyDebugInformationComplete": {
+ "message": "A informação de depuração foi copiada para a área de transferência. Sinta-se à vontade para remover qualquer informação que prefira não compartilhar. Salve em um arquivo de texto ou cole-a no relatório de bug."
+ },
+ "theKey": {
+ "message": "A tecla"
+ },
+ "keyAlreadyUsedByYouTube": {
+ "message": "já está sendo usado pelo youtube. Por favor, selecione outra tecla."
+ },
+ "keyAlreadyUsed": {
+ "message": "está vinculado a outra ação. Por favor, selecione outra tecla."
+ },
+ "to": {
+ "message": "até",
+ "description": "Used between sponsor times. Example: 1:20 to 1:30"
+ },
+ "category_sponsor": {
+ "message": "Patrocinador"
+ },
+ "category_intro": {
+ "message": "Animação de Introdução"
+ },
+ "category_outro": {
+ "message": "Finalização/Créditos"
+ },
+ "category_interaction": {
+ "message": "Lembrete de interação (inscrever-se)"
+ },
+ "category_selfpromo": {
+ "message": "Auto-Promoção e Mercadorias"
+ },
+ "category_music_offtopic": {
+ "message": "Música: Seção sem música"
+ },
+ "category_livestream_messages": {
+ "message": "Livestream: Leituras de Doação/Mensagem"
+ },
+ "disable": {
+ "message": "Desativar"
+ },
+ "manualSkip": {
+ "message": "Pular manualmente"
+ },
+ "showOverlay": {
+ "message": "Mostrar barra de progresso"
+ },
+ "enableTestingServer": {
+ "message": "Habilitar Servidor em teste Beta"
+ },
+ "whatEnableTestingServer": {
+ "message": "Seus envios e votos NÃO SERÃO ENVIADOS para o servidor principal. Use isso apenas para testes."
+ },
+ "testingServerWarning": {
+ "message": "Todas os envios e votos NÃO SERÃO ENVIADOS para o servidor principal enquanto se conecta ao servidor de teste. Certifique-se de desativar isso quando você quiser fazer envios reais."
+ },
+ "bracketNow": {
+ "message": "(agora)"
+ },
+ "moreCategories": {
+ "message": "Mais categorias"
+ },
+ "bracketEnd": {
+ "message": "(Fim)"
+ },
+ "hiddenDueToDownvote": {
+ "message": "oculto: Downvote"
+ },
+ "hiddenDueToDuration": {
+ "message": "oculto: muito curto"
+ },
+ "channelDataNotFound": {
+ "message": "ID do canal ainda não carregado."
+ },
+ "adblockerIssue": {
+ "message": "Parece que algo está bloqueando o SponsorBlock de obter dados de vídeo. Isso é provavelmente o seu bloqueador de anúncios. Por favor, verifique https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock-Requests"
+ },
+ "itCouldBeAdblockerIssue": {
+ "message": "Se isso continuar acontecendo, pode ser causado pelo seu bloqueador de anúncios. Por favor, verifique https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock-Requests"
+ },
+ "forceChannelCheck": {
+ "message": "Forçar verificação do canal antes de pular os patrocínios"
+ },
+ "whatForceChannelCheck": {
+ "message": "Por padrão, isso pulará os patrocínios imediatamente mesmo antes de saber qual é o canal. Por padrão, alguns patrocinadores de zero segundo podem ser ignorados nos canais da lista branca. Habilitar esta opção evitará isso, mas irá fazer com que todos os saltos tenham um ligeiro atraso, já que obter o channelID pode levar algum tempo. Este atraso pode não ser perceptível se você tiver internet rápida."
+ },
+ "forceChannelCheckPopup": {
+ "message": "Considere habilitar a verificação de canal forçada antes de pular os patrocinadores"
+ },
+ "downvoteDescription": {
+ "message": "Incorreto"
+ },
+ "incorrectCategory": {
+ "message": "Categoria errada"
+ },
+ "nonMusicCategoryOnMusic": {
+ "message": "Este vídeo é classificado como música. Você tem certeza que deseja enviar segmentos com categorias que não são músicas? A menos que esse vídeo não seja de fato música, você não deve enviar esse segmento. Por favor leia as orientações se estiver em dúvidas."
}
}
diff --git a/src/content.ts b/src/content.ts
index 9aae0f02..bf47077b 100644
--- a/src/content.ts
+++ b/src/content.ts
@@ -41,9 +41,6 @@ var sponsorSkipped: boolean[] = [];
//the video
var video: HTMLVideoElement;
-/** The last time this video was seeking to */
-var lastVideoTime: number = null;
-
var onInvidious;
var onMobileYouTube;
@@ -93,6 +90,9 @@ var popupInitialised = false;
var submissionNotice: SubmissionNotice = null;
+// If there is an advert playing (or about to be played), this is true
+var isAdPlaying = false;
+
// Contains all of the functions and variables needed by the skip notice
var skipNoticeContentContainer: ContentContainer = () => ({
vote,
@@ -275,6 +275,9 @@ function resetValues() {
} else {
switchingVideos = true;
}
+
+ // Reset advert playing flag
+ isAdPlaying = false;
}
async function videoIDChange(id) {
@@ -440,6 +443,7 @@ function createPreviewBar(): void {
* This happens when the resolution changes or at random time to clear memory.
*/
function durationChangeListener() {
+ updateAdFlag();
updatePreviewBar();
}
@@ -458,6 +462,15 @@ function cancelSponsorSchedule(): void {
function startSponsorSchedule(includeIntersectingSegments: boolean = false, currentTime?: number): void {
cancelSponsorSchedule();
+ // Don't skip if advert playing and reset last checked time
+ if (isAdPlaying) {
+ // Reset lastCheckVideoTime
+ lastCheckVideoTime = -1;
+ lastCheckTime = 0;
+
+ return;
+ }
+
if (video.paused) return;
if (Config.config.disableSkipping || channelWhitelisted || (channelID === null && Config.config.forceChannelCheck)){
@@ -561,6 +574,9 @@ function sponsorsLookup(id: string) {
video.addEventListener('play', () => {
switchingVideos = false;
+ // Check if an ad is playing
+ updateAdFlag();
+
// Make sure it doesn't get double called with the playing event
if (lastCheckVideoTime !== video.currentTime && Date.now() - lastCheckTime > 2000) {
lastCheckTime = Date.now();
@@ -568,6 +584,7 @@ function sponsorsLookup(id: string) {
startSponsorSchedule();
}
+
});
video.addEventListener('playing', () => {
// Make sure it doesn't get double called with the play event
@@ -583,8 +600,6 @@ function sponsorsLookup(id: string) {
lastCheckVideoTime = -1
lastCheckTime = 0;
- lastVideoTime = video.currentTime;
-
if (!video.paused){
startSponsorSchedule();
}
@@ -595,8 +610,6 @@ function sponsorsLookup(id: string) {
lastCheckVideoTime = -1;
lastCheckTime = 0;
- lastVideoTime = video.currentTime;
-
cancelSponsorSchedule();
});
@@ -788,6 +801,11 @@ function updatePreviewBarPositionMobile(parent: Element) {
}
function updatePreviewBar() {
+ if(isAdPlaying) {
+ previewBar.set([], [], 0);
+ return;
+ }
+
if (previewBar === null || video === null) return;
let localSponsorTimes = sponsorTimes;
@@ -1580,3 +1598,16 @@ function sendRequestToCustomServer(type, fullAddress, callback) {
//submit this request
xmlhttp.send();
}
+
+/**
+ * Update the isAdPlaying flag and hide preview bar/controls if ad is playing
+ */
+function updateAdFlag() {
+ let wasAdPlaying = isAdPlaying;
+ isAdPlaying = document.getElementsByClassName('ad-showing').length > 0;
+
+ if(wasAdPlaying != isAdPlaying) {
+ updatePreviewBar();
+ updateVisibilityOfPlayerControlsButton();
+ }
+}