diff --git a/src/components/SkipNoticeComponent.tsx b/src/components/SkipNoticeComponent.tsx index 7ff4dc4f..9e571e27 100644 --- a/src/components/SkipNoticeComponent.tsx +++ b/src/components/SkipNoticeComponent.tsx @@ -1,12 +1,12 @@ import * as React from "react"; import * as CompileConfig from "../../config.json"; import Config from "../config" -import { Category, ContentContainer, SponsorTime, NoticeVisbilityMode, ActionType, SponsorSourceType, SegmentUUID } from "../types"; +import { Category, ContentContainer, SponsorTime, NoticeVisibilityMode, ActionType, SponsorSourceType, SegmentUUID } from "../types"; import NoticeComponent from "./NoticeComponent"; import NoticeTextSelectionComponent from "./NoticeTextSectionComponent"; import Utils from "../utils"; const utils = new Utils(); -import { getSkippingText, getUpcomingText } from "../utils/categoryUtils"; +import { getSkippingText, getUpcomingText, getVoteText } from "../utils/categoryUtils"; import ThumbsUpSvg from "../svg-icons/thumbs_up_svg"; import ThumbsDownSvg from "../svg-icons/thumbs_down_svg"; @@ -29,6 +29,7 @@ export interface SkipNoticeProps { autoSkip: boolean; startReskip?: boolean; upcomingNotice?: boolean; + voteNotice?: boolean; // Contains functions and variables from the content script needed by the skip notice contentContainer: ContentContainer; @@ -102,7 +103,7 @@ class SkipNoticeComponent extends React.Component= NoticeVisbilityMode.FadedForAll - || (Config.config.noticeVisibilityMode >= NoticeVisbilityMode.FadedForAutoSkip && this.autoSkip)} + startFaded={Config.config.noticeVisibilityMode >= NoticeVisibilityMode.FadedForAll + || (Config.config.noticeVisibilityMode >= NoticeVisibilityMode.FadedForAutoSkip && this.autoSkip)} timed={true} maxCountdownTime={this.state.maxCountdownTime} style={noticeStyle} @@ -278,7 +279,7 @@ class SkipNoticeComponent extends React.Component @@ -624,9 +625,9 @@ class SkipNoticeComponent extends React.Component skipNotice.segments.some((s) => s.UUID === segment.UUID))) { @@ -1792,7 +1792,7 @@ function createSkipNotice(skippingSegments: SponsorTime[], autoSkip: boolean, un const newSkipNotice = new SkipNotice(skippingSegments, autoSkip, skipNoticeContentContainer, () => { upcomingNotice?.close(); upcomingNotice = null; - }, unskipTime, startReskip, upcomingNoticeShown); + }, unskipTime, startReskip, upcomingNoticeShown, voteNotice); if (isOnMobileYouTube() || Config.config.skipKeybind == null) newSkipNotice.setShowKeybindHint(false); skipNotices.push(newSkipNotice); @@ -1811,13 +1811,13 @@ function createUpcomingNotice(skippingSegments: SponsorTime[], timeLeft: number, upcomingNotice = new UpcomingNotice(skippingSegments, skipNoticeContentContainer, timeLeft / 1000, autoSkip); } -function unskipSponsorTime(segment: SponsorTime, unskipTime: number = null, forceSeek = false) { +function unskipSponsorTime(segment: SponsorTime, unskipTime: number = null, forceSeek = false, voteNotice = false) { if (segment.actionType === ActionType.Mute) { getVideo().muted = false; videoMuted = false; } - if (forceSeek || segment.actionType === ActionType.Skip) { + if (forceSeek || segment.actionType === ActionType.Skip || voteNotice) { //add a tiny bit of time to make sure it is not skipped again setCurrentTime(unskipTime ?? segment.segment[0] + 0.001); } @@ -2533,20 +2533,20 @@ function previousChapter(): void { } async function handleKeybindVote(type: number): Promise{ - let lastSkipNotice = skipNotices[0]?.skipNoticeRef.current; + let lastSkipNotice = skipNotices[0]?.skipNoticeRef.current; + lastSkipNotice?.onMouseEnter(); - if (!lastSkipNotice) { - const lastSegment = [...sponsorTimes].reverse()?.find((s) => s.source == SponsorSourceType.Server && s.actionType != 'chapter' && (s.segment[0] <= getCurrentTime() && getCurrentTime() - (s.segment[1] || s.segment[0]) <= Config.config.skipNoticeDuration)); - if (!lastSegment) return; + if (!lastSkipNotice) { + const lastSegment = [...sponsorTimes].reverse()?.find((s) => s.source == SponsorSourceType.Server && (s.segment[0] <= getCurrentTime() && getCurrentTime() - (s.segment[1] || s.segment[0]) <= Config.config.skipNoticeDuration)); + if (!lastSegment) return; - createSkipNotice([lastSegment], shouldAutoSkip(lastSegment), lastSegment?.segment[0], false); - lastSkipNotice = await skipNotices[0]?.waitForSkipNoticeRef(); - lastSkipNotice?.reskippedMode(0); - } + createSkipNotice([lastSegment], shouldAutoSkip(lastSegment), lastSegment?.segment[0] + 0.001,false, true); + lastSkipNotice = await skipNotices[0].waitForSkipNoticeRef(); + lastSkipNotice?.reskippedMode(0); + } - lastSkipNotice?.onMouseEnter(); - vote(type,lastSkipNotice?.segments[0]?.UUID, undefined, lastSkipNotice); - return; + vote(type,lastSkipNotice?.segments[0]?.UUID, undefined, lastSkipNotice); + return; } function addHotkeyListener(): void { diff --git a/src/render/SkipNotice.tsx b/src/render/SkipNotice.tsx index 59f60a59..6c7fa421 100644 --- a/src/render/SkipNotice.tsx +++ b/src/render/SkipNotice.tsx @@ -5,7 +5,7 @@ import Utils from "../utils"; const utils = new Utils(); import SkipNoticeComponent from "../components/SkipNoticeComponent"; -import { SponsorTime, ContentContainer, NoticeVisbilityMode } from "../types"; +import { SponsorTime, ContentContainer, NoticeVisibilityMode } from "../types"; import Config from "../config"; import { SkipNoticeAction } from "../utils/noticeUtils"; @@ -20,7 +20,7 @@ class SkipNotice { skipNoticeRef: React.MutableRefObject; root: Root; - constructor(segments: SponsorTime[], autoSkip = false, contentContainer: ContentContainer, componentDidMount: () => void, unskipTime: number = null, startReskip = false, upcomingNoticeShown: boolean) { + constructor(segments: SponsorTime[], autoSkip = false, contentContainer: ContentContainer, componentDidMount: () => void, unskipTime: number = null, startReskip = false, upcomingNoticeShown: boolean, voteNotice = false) { this.skipNoticeRef = React.createRef(); this.segments = segments; @@ -42,18 +42,18 @@ class SkipNotice { this.noticeElement.id = "sponsorSkipNoticeContainer" + idSuffix; referenceNode.prepend(this.noticeElement); - this.root = createRoot(this.noticeElement); this.root.render( this.close()} - smaller={Config.config.noticeVisibilityMode >= NoticeVisbilityMode.MiniForAll - || (Config.config.noticeVisibilityMode >= NoticeVisbilityMode.MiniForAutoSkip && autoSkip)} - fadeIn={!upcomingNoticeShown} + smaller={!voteNotice && (Config.config.noticeVisibilityMode >= NoticeVisibilityMode.MiniForAll + || (Config.config.noticeVisibilityMode >= NoticeVisibilityMode.MiniForAutoSkip && autoSkip))} + fadeIn={!upcomingNoticeShown && !voteNotice} unskipTime={unskipTime} componentDidMount={componentDidMount} /> ); diff --git a/src/types.ts b/src/types.ts index d8634c91..d994ba36 100644 --- a/src/types.ts +++ b/src/types.ts @@ -6,7 +6,7 @@ export interface ContentContainer { (): { vote: (type: number, UUID: SegmentUUID, category?: Category, skipNotice?: SkipNoticeComponent) => void; dontShowNoticeAgain: () => void; - unskipSponsorTime: (segment: SponsorTime, unskipTime: number, forceSeek?: boolean) => void; + unskipSponsorTime: (segment: SponsorTime, unskipTime: number, forceSeek?: boolean, voteNotice?: boolean) => void; sponsorTimes: SponsorTime[]; sponsorTimesSubmitting: SponsorTime[]; skipNotices: SkipNotice[]; @@ -219,7 +219,7 @@ export interface ToggleSkippable { setShowKeybindHint: (show: boolean) => void; } -export enum NoticeVisbilityMode { +export enum NoticeVisibilityMode { FullSize = 0, MiniForAutoSkip = 1, MiniForAll = 2, diff --git a/src/utils/categoryUtils.ts b/src/utils/categoryUtils.ts index 38f4b8e9..c2c1a8a5 100644 --- a/src/utils/categoryUtils.ts +++ b/src/utils/categoryUtils.ts @@ -44,6 +44,14 @@ export function getUpcomingText(segments: SponsorTime[]): string { return chrome.i18n.getMessage(messageId).replace("{0}", categoryName); } +export function getVoteText(segments: SponsorTime[]): string { + const categoryName = chrome.i18n.getMessage(segments.length > 1 ? "multipleSegments" + : "category_" + segments[0].category + "_short") || chrome.i18n.getMessage("category_" + segments[0].category); + + const messageId = "voted_on"; + return chrome.i18n.getMessage(messageId).replace("{0}", categoryName); +} + export function getCategorySuffix(category: Category): string { if (category.startsWith("poi_")) {