feat: Option to auto-skip non-music on youtube music only

This commit is contained in:
Florian Zahn
2025-04-01 22:53:28 +02:00
parent 7904913fdb
commit e656dd8d8b
5 changed files with 32 additions and 10 deletions

View File

@@ -243,6 +243,9 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
return [{ return [{
configKey: "autoSkipOnMusicVideos", configKey: "autoSkipOnMusicVideos",
label: chrome.i18n.getMessage("autoSkipOnMusicVideos"), label: chrome.i18n.getMessage("autoSkipOnMusicVideos"),
}, {
configKey: "skipNonMusicOnlyOnYoutubeMusic",
label: chrome.i18n.getMessage("skipNonMusicOnlyOnYoutubeMusic"),
}]; }];
default: default:
return []; return [];

View File

@@ -57,6 +57,7 @@ interface SBConfig {
donateClicked: number; donateClicked: number;
autoHideInfoButton: boolean; autoHideInfoButton: boolean;
autoSkipOnMusicVideos: boolean; autoSkipOnMusicVideos: boolean;
skipNonMusicOnlyOnYoutubeMusic: boolean;
colorPalette: { colorPalette: {
red: string; red: string;
white: string; white: string;
@@ -322,6 +323,7 @@ const syncDefaults = {
donateClicked: 0, donateClicked: 0,
autoHideInfoButton: true, autoHideInfoButton: true,
autoSkipOnMusicVideos: false, autoSkipOnMusicVideos: false,
skipNonMusicOnlyOnYoutubeMusic: false,
scrollToEditTimeUpdate: false, // false means the tooltip will be shown scrollToEditTimeUpdate: false, // false means the tooltip will be shown
categoryPillUpdate: false, categoryPillUpdate: false,
showChapterInfoMessage: true, showChapterInfoMessage: true,

View File

@@ -35,7 +35,7 @@ import { ChapterVote } from "./render/ChapterVote";
import { openWarningDialog } from "./utils/warnings"; import { openWarningDialog } from "./utils/warnings";
import { isFirefoxOrSafari, waitFor } from "../maze-utils/src"; import { isFirefoxOrSafari, waitFor } from "../maze-utils/src";
import { getErrorMessage, getFormattedTime } from "../maze-utils/src/formating"; import { getErrorMessage, getFormattedTime } from "../maze-utils/src/formating";
import { getChannelIDInfo, getVideo, getIsAdPlaying, getIsLivePremiere, setIsAdPlaying, checkVideoIDChange, getVideoID, getYouTubeVideoID, setupVideoModule, checkIfNewVideoID, isOnInvidious, isOnMobileYouTube, isOnYTTV, getLastNonInlineVideoID, triggerVideoIDChange, triggerVideoElementChange, getIsInline, getCurrentTime, setCurrentTime, getVideoDuration, verifyCurrentTime, waitForVideo } from "../maze-utils/src/video"; import { getChannelIDInfo, getVideo, getIsAdPlaying, getIsLivePremiere, setIsAdPlaying, checkVideoIDChange, getVideoID, getYouTubeVideoID, setupVideoModule, checkIfNewVideoID, isOnInvidious, isOnMobileYouTube, isOnYouTubeMusic, isOnYTTV, getLastNonInlineVideoID, triggerVideoIDChange, triggerVideoElementChange, getIsInline, getCurrentTime, setCurrentTime, getVideoDuration, verifyCurrentTime, waitForVideo } from "../maze-utils/src/video";
import { Keybind, StorageChangesObject, isSafari, keybindEquals, keybindToString } from "../maze-utils/src/config"; import { Keybind, StorageChangesObject, isSafari, keybindEquals, keybindToString } from "../maze-utils/src/config";
import { findValidElement } from "../maze-utils/src/dom" import { findValidElement } from "../maze-utils/src/dom"
import { getHash, HashedValue } from "../maze-utils/src/hash"; import { getHash, HashedValue } from "../maze-utils/src/hash";
@@ -1891,16 +1891,33 @@ function createButton(baseID: string, title: string, callback: () => void, image
} }
function shouldAutoSkip(segment: SponsorTime): boolean { function shouldAutoSkip(segment: SponsorTime): boolean {
return (!Config.config.manualSkipOnFullVideo || !sponsorTimes?.some((s) => s.category === segment.category && s.actionType === ActionType.Full)) if (Config.config.manualSkipOnFullVideo && !sponsorTimes?.some((s) => s.category === segment.category && s.actionType === ActionType.Full)) {
&& (utils.getCategorySelection(segment.category)?.option === CategorySkipOption.AutoSkip || return false;
(Config.config.autoSkipOnMusicVideos && sponsorTimes?.some((s) => s.category === "music_offtopic") }
&& segment.actionType === ActionType.Skip)
|| sponsorTimesSubmitting.some((s) => s.segment === segment.segment)); return ( // Normal skip
utils.getCategorySelection(segment.category)?.option === CategorySkipOption.AutoSkip
// Forbid skipping of non-music if we are not on Youtube Music
&& !(segment.category === "music_offtopic" && Config.config.skipNonMusicOnlyOnYoutubeMusic && !isOnYouTubeMusic())
)
||
( // Skip every segment, if it's a music video
// Forbid autoSkipOnMusicVideos if if we are not on Youtube Music
!(Config.config.skipNonMusicOnlyOnYoutubeMusic && !isOnYouTubeMusic())
&& Config.config.autoSkipOnMusicVideos
&& sponsorTimes?.some((s) => s.category === "music_offtopic")
&& segment.actionType === ActionType.Skip
)
||
sponsorTimesSubmitting.some((s) => s.segment === segment.segment);
} }
function shouldSkip(segment: SponsorTime): boolean { function shouldSkip(segment: SponsorTime): boolean {
return (segment.actionType !== ActionType.Full if (segment.actionType === ActionType.Full) {
&& segment.source !== SponsorSourceType.YouTube return false;
}
return (segment.source !== SponsorSourceType.YouTube
&& utils.getCategorySelection(segment.category)?.option !== CategorySkipOption.ShowOverlay) && utils.getCategorySelection(segment.category)?.option !== CategorySkipOption.ShowOverlay)
|| (Config.config.autoSkipOnMusicVideos && sponsorTimes?.some((s) => s.category === "music_offtopic") || (Config.config.autoSkipOnMusicVideos && sponsorTimes?.some((s) => s.category === "music_offtopic")
&& segment.actionType === ActionType.Skip); && segment.actionType === ActionType.Skip);