diff --git a/src/components/SkipNoticeComponent.tsx b/src/components/SkipNoticeComponent.tsx index cb1217a7..7ff4dc4f 100644 --- a/src/components/SkipNoticeComponent.tsx +++ b/src/components/SkipNoticeComponent.tsx @@ -631,7 +631,10 @@ class SkipNoticeComponent extends React.Component{ + let lastSkipNotice = skipNotices[0]?.skipNoticeRef.current; + + 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; + + createSkipNotice([lastSegment], shouldAutoSkip(lastSegment), lastSegment?.segment[0], false); + lastSkipNotice = await skipNotices[0]?.waitForSkipNoticeRef(); + lastSkipNotice?.reskippedMode(0); + } + + lastSkipNotice?.onMouseEnter(); + vote(type,lastSkipNotice?.segments[0]?.UUID, undefined, lastSkipNotice); + return; +} + function addHotkeyListener(): void { document.addEventListener("keydown", hotkeyListener); @@ -2621,14 +2638,10 @@ function hotkeyListener(e: KeyboardEvent): void { previousChapter(); return; } else if (keybindEquals(key, upvoteKey)) { - const lastSegment = [...sponsorTimes].reverse()?.find((s) => s.segment[0] <= getCurrentTime() && getCurrentTime() - (s.segment[1] || s.segment[0]) <= Config.config.skipNoticeDuration); - const lastSkipNotice = skipNotices?.find((skipNotice) => skipNotice.segments.some((segment) => segment.UUID === lastSegment.UUID))?.skipNoticeRef.current; - if (lastSegment) vote(1,lastSegment.UUID, undefined, lastSkipNotice); + handleKeybindVote(1); return; } else if (keybindEquals(key, downvoteKey)) { - const lastSegment = [...sponsorTimes].reverse()?.find((s) => s.segment[0] <= getCurrentTime() && getCurrentTime() - (s.segment[1] || s.segment[0]) <= Config.config.skipNoticeDuration); - const lastSkipNotice = skipNotices?.find((skipNotice) => skipNotice.segments.some((segment) => segment.UUID === lastSegment.UUID))?.skipNoticeRef.current; - if (lastSegment) vote(0,lastSegment.UUID, undefined, lastSkipNotice); + handleKeybindVote(0); return; } } diff --git a/src/render/SkipNotice.tsx b/src/render/SkipNotice.tsx index c58cef4c..59f60a59 100644 --- a/src/render/SkipNotice.tsx +++ b/src/render/SkipNotice.tsx @@ -81,6 +81,26 @@ class SkipNotice { unmutedListener(time: number): void { this.skipNoticeRef?.current?.unmutedListener(time); } + + async waitForSkipNoticeRef(): Promise { + const waitForRef = () => new Promise((resolve) => { + const observer = new MutationObserver(() => { + if (this.skipNoticeRef.current) { + observer.disconnect(); + resolve(this.skipNoticeRef.current); + } + }); + + observer.observe(document.getElementsByClassName("sponsorSkipNoticeContainer")[0], { childList: true, subtree: true}); + + if (this.skipNoticeRef.current) { + observer.disconnect(); + resolve(this.skipNoticeRef.current); + } + }); + + return this.skipNoticeRef?.current || await waitForRef(); + } } export default SkipNotice; \ No newline at end of file