mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2025-12-12 06:27:14 +03:00
add upcoming notices
This commit is contained in:
@@ -20,6 +20,7 @@ import Utils from "./utils";
|
||||
import PreviewBar, { PreviewBarSegment } from "./js-components/previewBar";
|
||||
import SkipNotice from "./render/SkipNotice";
|
||||
import SkipNoticeComponent from "./components/SkipNoticeComponent";
|
||||
import UpcomingNotice from "./render/UpcomingNotice";
|
||||
import SubmissionNotice from "./render/SubmissionNotice";
|
||||
import { Message, MessageResponse, VoteResponse } from "./messageTypes";
|
||||
import { SkipButtonControlBar } from "./js-components/skipButtonControlBar";
|
||||
@@ -77,6 +78,7 @@ let importingChaptersWaiting = false;
|
||||
let triedImportingChapters = false;
|
||||
// List of open skip notices
|
||||
const skipNotices: SkipNotice[] = [];
|
||||
const upcomingNotices: UpcomingNotice[] = [];
|
||||
let activeSkipKeybindElement: ToggleSkippable = null;
|
||||
let retryFetchTimeout: NodeJS.Timeout = null;
|
||||
let shownSegmentFailedToFetchWarning = false;
|
||||
@@ -107,6 +109,7 @@ const lastNextChapterKeybind = {
|
||||
let currentSkipSchedule: NodeJS.Timeout = null;
|
||||
let currentSkipInterval: NodeJS.Timeout = null;
|
||||
let currentVirtualTimeInterval: NodeJS.Timeout = null;
|
||||
let currentUpcomingSchedule: NodeJS.Timeout = null;
|
||||
|
||||
/** Has the sponsor been skipped */
|
||||
let sponsorSkipped: boolean[] = [];
|
||||
@@ -177,6 +180,7 @@ const skipNoticeContentContainer: ContentContainer = () => ({
|
||||
sponsorTimes,
|
||||
sponsorTimesSubmitting,
|
||||
skipNotices,
|
||||
upcomingNotices,
|
||||
sponsorVideoID: getVideoID(),
|
||||
reskipSponsorTime,
|
||||
updatePreviewBar,
|
||||
@@ -417,6 +421,10 @@ function resetValues() {
|
||||
skipNotices.pop()?.close();
|
||||
}
|
||||
|
||||
for (let i = 0; i < upcomingNotices.length; i++) {
|
||||
upcomingNotices.pop()?.close();
|
||||
}
|
||||
|
||||
hideDeArrowPromotion();
|
||||
}
|
||||
|
||||
@@ -601,6 +609,11 @@ function cancelSponsorSchedule(): void {
|
||||
clearInterval(currentSkipInterval);
|
||||
currentSkipInterval = null;
|
||||
}
|
||||
|
||||
if (currentUpcomingSchedule !== null) {
|
||||
clearTimeout(currentUpcomingSchedule);
|
||||
currentUpcomingSchedule = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -782,7 +795,17 @@ async function startSponsorSchedule(includeIntersectingSegments = false, current
|
||||
|
||||
const offset = (isFirefoxOrSafari() && !isSafari() ? 600 : 150);
|
||||
// Schedule for right before to be more precise than normal timeout
|
||||
currentSkipSchedule = setTimeout(skippingFunction, Math.max(0, delayTime - offset));
|
||||
const offsetDelayTime = Math.max(0, delayTime - offset);
|
||||
currentSkipSchedule = setTimeout(skippingFunction, offsetDelayTime);
|
||||
|
||||
// Show the notice only if the segment hasn't already started
|
||||
if (!Config.config.dontShowUpcomingNotice && getCurrentTime() < skippingSegments[0].segment[0]) {
|
||||
const maxPopupTime = 3000;
|
||||
const timeUntilPopup = Math.max(0, offsetDelayTime - maxPopupTime);
|
||||
const popupTime = offsetDelayTime - timeUntilPopup;
|
||||
const autoSkip = shouldAutoSkip(skippingSegments[0])
|
||||
currentUpcomingSchedule = setTimeout(createUpcomingNotice, timeUntilPopup, skippingSegments, popupTime, autoSkip);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1784,6 +1807,19 @@ function createSkipNotice(skippingSegments: SponsorTime[], autoSkip: boolean, un
|
||||
activeSkipKeybindElement = newSkipNotice;
|
||||
}
|
||||
|
||||
function createUpcomingNotice(skippingSegments: SponsorTime[], timeLeft: number, autoSkip: boolean) {
|
||||
for (const upcomingNotice of upcomingNotices) {
|
||||
if (skippingSegments.length === upcomingNotice.segments.length
|
||||
&& skippingSegments.every((segment) => upcomingNotice.segments.some((s) => s.UUID === segment.UUID))) {
|
||||
// Upcoming notice already exists
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const newUpcomingNotice = new UpcomingNotice(skippingSegments, skipNoticeContentContainer, timeLeft, autoSkip);
|
||||
upcomingNotices.push(newUpcomingNotice);
|
||||
}
|
||||
|
||||
function unskipSponsorTime(segment: SponsorTime, unskipTime: number = null, forceSeek = false) {
|
||||
if (segment.actionType === ActionType.Mute) {
|
||||
getVideo().muted = false;
|
||||
@@ -2561,6 +2597,7 @@ function hotkeyListener(e: KeyboardEvent): void {
|
||||
} else if (keybindEquals(key, closeSkipNoticeKey)) {
|
||||
for (let i = 0; i < skipNotices.length; i++) {
|
||||
skipNotices.pop().close();
|
||||
upcomingNotices.pop().close();
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user