A skip notice is now shown upon voting if one isn't already on screen

A skip notice is now shown upon voting if one isn't already on screen

minor fixes
This commit is contained in:
gosha305
2025-02-15 23:34:42 +01:00
parent 75dc6a1980
commit 66876283b4
4 changed files with 44 additions and 8 deletions

View File

@@ -631,7 +631,10 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
reskip(buttonIndex: number, index: number, forceSeek: boolean): void { reskip(buttonIndex: number, index: number, forceSeek: boolean): void {
this.contentContainer().reskipSponsorTime(this.segments[index], forceSeek); this.contentContainer().reskipSponsorTime(this.segments[index], forceSeek);
this.reskippedMode(buttonIndex);
}
reskippedMode(buttonIndex: number): void {
const skipButtonStates = this.state.skipButtonStates; const skipButtonStates = this.state.skipButtonStates;
skipButtonStates[buttonIndex] = SkipButtonState.Undo; skipButtonStates[buttonIndex] = SkipButtonState.Undo;

View File

@@ -358,8 +358,8 @@ const syncDefaults = {
nextChapterKeybind: { key: "ArrowRight", ctrl: true }, nextChapterKeybind: { key: "ArrowRight", ctrl: true },
previousChapterKeybind: { key: "ArrowLeft", ctrl: true }, previousChapterKeybind: { key: "ArrowLeft", ctrl: true },
closeSkipNoticeKeybind: { key: "Backspace" }, closeSkipNoticeKeybind: { key: "Backspace" },
downvoteKeybind: { key: "h" }, downvoteKeybind: { key: "h", shift: true },
upvoteKeybind: { key: "g" }, upvoteKeybind: { key: "g", shift: true },
categorySelections: [{ categorySelections: [{
name: "sponsor" as Category, name: "sponsor" as Category,

View File

@@ -2532,6 +2532,23 @@ function previousChapter(): void {
} }
} }
async function handleKeybindVote(type: number): Promise<void>{
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 { function addHotkeyListener(): void {
document.addEventListener("keydown", hotkeyListener); document.addEventListener("keydown", hotkeyListener);
@@ -2621,14 +2638,10 @@ function hotkeyListener(e: KeyboardEvent): void {
previousChapter(); previousChapter();
return; return;
} else if (keybindEquals(key, upvoteKey)) { } 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); handleKeybindVote(1);
const lastSkipNotice = skipNotices?.find((skipNotice) => skipNotice.segments.some((segment) => segment.UUID === lastSegment.UUID))?.skipNoticeRef.current;
if (lastSegment) vote(1,lastSegment.UUID, undefined, lastSkipNotice);
return; return;
} else if (keybindEquals(key, downvoteKey)) { } 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); handleKeybindVote(0);
const lastSkipNotice = skipNotices?.find((skipNotice) => skipNotice.segments.some((segment) => segment.UUID === lastSegment.UUID))?.skipNoticeRef.current;
if (lastSegment) vote(0,lastSegment.UUID, undefined, lastSkipNotice);
return; return;
} }
} }

View File

@@ -81,6 +81,26 @@ class SkipNotice {
unmutedListener(time: number): void { unmutedListener(time: number): void {
this.skipNoticeRef?.current?.unmutedListener(time); this.skipNoticeRef?.current?.unmutedListener(time);
} }
async waitForSkipNoticeRef(): Promise<SkipNoticeComponent> {
const waitForRef = () => new Promise<SkipNoticeComponent>((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; export default SkipNotice;