From 4092bf9b0546f13be383937fbc052d3b9c1abdca Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Wed, 1 Sep 2021 20:52:40 -0400 Subject: [PATCH] Make skip notice buttons work with mute segments --- public/_locales/en/messages.json | 3 + src/components/SkipNoticeComponent.tsx | 102 +++++++++++++++++-------- src/content.ts | 30 +++++--- 3 files changed, 92 insertions(+), 43 deletions(-) diff --git a/public/_locales/en/messages.json b/public/_locales/en/messages.json index d579ac45..043d64e0 100644 --- a/public/_locales/en/messages.json +++ b/public/_locales/en/messages.json @@ -52,6 +52,9 @@ "reskip": { "message": "Reskip" }, + "unmute": { + "message": "Unmute" + }, "paused": { "message": "Paused" }, diff --git a/src/components/SkipNoticeComponent.tsx b/src/components/SkipNoticeComponent.tsx index 0af1efad..b3ca619b 100644 --- a/src/components/SkipNoticeComponent.tsx +++ b/src/components/SkipNoticeComponent.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import * as CompileConfig from "../../config.json"; import Config from "../config" -import { Category, ContentContainer, CategoryActionType, SponsorHideType, SponsorTime, NoticeVisbilityMode } from "../types"; +import { Category, ContentContainer, CategoryActionType, SponsorHideType, SponsorTime, NoticeVisbilityMode, ActionType } from "../types"; import NoticeComponent from "./NoticeComponent"; import NoticeTextSelectionComponent from "./NoticeTextSectionComponent"; @@ -39,8 +39,8 @@ export interface SkipNoticeState { maxCountdownTime?: () => number; countdownText?: string; - unskipText?: string; - unskipCallback?: (index: number) => void; + skipButtonText?: string; + skipButtonCallback?: (index: number) => void; downvoting?: boolean; choosingCategory?: boolean; @@ -110,8 +110,8 @@ class SkipNoticeComponent extends React.Component this.unskip(index), + skipButtonText: this.getUnskipText(), + skipButtonCallback: (index) => this.unskip(index), downvoting: false, choosingCategory: false, @@ -126,7 +126,7 @@ class SkipNoticeComponent extends React.Component this.prepAction(SkipNoticeAction.Unskip)}> - {this.state.unskipText + (this.state.showKeybindHint ? " (" + Config.config.skipKeybind + ")" : "")} + {this.state.skipButtonText + (this.state.showKeybindHint ? " (" + Config.config.skipKeybind + ")" : "")} ); @@ -396,7 +396,7 @@ class SkipNoticeComponent extends React.Component Config.config.skipNoticeDuration, + countdownTime: Config.config.skipNoticeDuration + }; + + // See if the title should be changed + if (!this.autoSkip) { + newState.noticeTitle = chrome.i18n.getMessage("noticeTitle"); + } + + //reset countdown + this.setState(newState, () => { + this.noticeRef.current.resetCountdown(); + }); } /** Sets up notice to be not skipped yet */ @@ -478,36 +500,14 @@ class SkipNoticeComponent extends React.Component this.reskip(index), + skipButtonText: buttonText, + skipButtonCallback: (index) => this.reskip(index), // change max duration to however much of the sponsor is left maxCountdownTime: maxCountdownTime, countdownTime: maxCountdownTime() } as SkipNoticeState; } - reskip(index: number): void { - this.contentContainer().reskipSponsorTime(this.segments[index]); - - const newState: SkipNoticeState = { - unskipText: chrome.i18n.getMessage("unskip"), - unskipCallback: this.unskip.bind(this), - - maxCountdownTime: () => Config.config.skipNoticeDuration, - countdownTime: Config.config.skipNoticeDuration - }; - - // See if the title should be changed - if (!this.autoSkip) { - newState.noticeTitle = chrome.i18n.getMessage("noticeTitle"); - } - - //reset countdown - this.setState(newState, () => { - this.noticeRef.current.resetCountdown(); - }); - } - afterVote(segment: SponsorTime, type: number, category: Category): void { this.addVoteButtonInfo(chrome.i18n.getMessage("voted")); @@ -558,6 +558,42 @@ class SkipNoticeComponent extends React.Component manualSkipPercentCount; - - video.currentTime = segment.segment[1]; - sendTelemetryAndCount([segment], skippedTime, fullSkip); - startSponsorSchedule(true, segment.segment[1], false); + if (segment.actionType === ActionType.Mute) { + video.muted = true; + videoMuted = true; + } else { + const skippedTime = Math.max(segment.segment[1] - video.currentTime, 0); + const segmentDuration = segment.segment[1] - segment.segment[0]; + const fullSkip = skippedTime / segmentDuration > manualSkipPercentCount; + + video.currentTime = segment.segment[1]; + sendTelemetryAndCount([segment], skippedTime, fullSkip); + startSponsorSchedule(true, segment.segment[1], false); + } } function createButton(baseID: string, title: string, callback: () => void, imageName: string, isDraggable = false): HTMLElement {