mirror of
https://github.com/ajayyy/SponsorBlock.git
synced 2025-12-07 12:07:11 +03:00
Add skipping all segments when a non music segment exists
This commit is contained in:
@@ -559,6 +559,9 @@
|
|||||||
"showOverlay": {
|
"showOverlay": {
|
||||||
"message": "Show In Seek Bar"
|
"message": "Show In Seek Bar"
|
||||||
},
|
},
|
||||||
|
"autoSkipOnMusicVideos": {
|
||||||
|
"message": "Auto skip all segments when there is a non-music segment"
|
||||||
|
},
|
||||||
"colorFormatIncorrect": {
|
"colorFormatIncorrect": {
|
||||||
"message": "Your color is formatted incorrectly. It should be a 3 or 6 digit hex code with a number sign at the beginning."
|
"message": "Your color is formatted incorrectly. It should be a 3 or 6 digit hex code with a number sign at the beginning."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -29,6 +29,22 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div option-type="toggle" sync-option="autoSkipOnMusicVideos">
|
||||||
|
<label class="switch-container">
|
||||||
|
<label class="switch">
|
||||||
|
<input type="checkbox" checked>
|
||||||
|
<span class="slider round"></span>
|
||||||
|
</label>
|
||||||
|
<div class="switch-label">
|
||||||
|
__MSG_autoSkipOnMusicVideos__
|
||||||
|
</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ interface SBConfig {
|
|||||||
ytInfoPermissionGranted: boolean,
|
ytInfoPermissionGranted: boolean,
|
||||||
allowExpirements: boolean,
|
allowExpirements: boolean,
|
||||||
autoHideInfoButton: boolean,
|
autoHideInfoButton: boolean,
|
||||||
|
autoSkipOnMusicVideos: boolean,
|
||||||
|
|
||||||
// What categories should be skipped
|
// What categories should be skipped
|
||||||
categorySelections: CategorySelection[],
|
categorySelections: CategorySelection[],
|
||||||
@@ -180,6 +181,7 @@ const Config: SBObject = {
|
|||||||
ytInfoPermissionGranted: false,
|
ytInfoPermissionGranted: false,
|
||||||
allowExpirements: true,
|
allowExpirements: true,
|
||||||
autoHideInfoButton: true,
|
autoHideInfoButton: true,
|
||||||
|
autoSkipOnMusicVideos: false,
|
||||||
|
|
||||||
categorySelections: [{
|
categorySelections: [{
|
||||||
name: "sponsor",
|
name: "sponsor",
|
||||||
@@ -347,6 +349,18 @@ function migrateOldFormats(config: SBConfig) {
|
|||||||
chrome.storage.sync.remove("askAboutUnlistedVideos");
|
chrome.storage.sync.remove("askAboutUnlistedVideos");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!config["autoSkipOnMusicVideosUpdate"]) {
|
||||||
|
config["autoSkipOnMusicVideosUpdate"] = true;
|
||||||
|
for (const selection of config.categorySelections) {
|
||||||
|
if (selection.name === "music_offtopic"
|
||||||
|
&& selection.option === CategorySkipOption.AutoSkip) {
|
||||||
|
|
||||||
|
config.autoSkipOnMusicVideos = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Adding preview category
|
// Adding preview category
|
||||||
if (!config["previewCategoryUpdate"]) {
|
if (!config["previewCategoryUpdate"]) {
|
||||||
config["previewCategoryUpdate"] = true;
|
config["previewCategoryUpdate"] = true;
|
||||||
|
|||||||
@@ -426,7 +426,7 @@ function startSponsorSchedule(includeIntersectingSegments = false, currentTime?:
|
|||||||
skippingSegments = [];
|
skippingSegments = [];
|
||||||
|
|
||||||
for (const segment of skipInfo.array) {
|
for (const segment of skipInfo.array) {
|
||||||
if (utils.getCategorySelection(segment.category).option === CategorySkipOption.AutoSkip &&
|
if (shouldAutoSkip(segment) &&
|
||||||
segment.segment[0] >= skipTime[0] && segment.segment[1] <= skipTime[1]) {
|
segment.segment[0] >= skipTime[0] && segment.segment[1] <= skipTime[1]) {
|
||||||
skippingSegments.push(segment);
|
skippingSegments.push(segment);
|
||||||
}
|
}
|
||||||
@@ -927,7 +927,7 @@ function getNextSkipIndex(currentTime: number, includeIntersectingSegments: bool
|
|||||||
function getLatestEndTimeIndex(sponsorTimes: SponsorTime[], index: number, hideHiddenSponsors = true): number {
|
function getLatestEndTimeIndex(sponsorTimes: SponsorTime[], index: number, hideHiddenSponsors = true): number {
|
||||||
// Only combine segments for AutoSkip
|
// Only combine segments for AutoSkip
|
||||||
if (index == -1 ||
|
if (index == -1 ||
|
||||||
utils.getCategorySelection(sponsorTimes[index].category)?.option !== CategorySkipOption.AutoSkip) return index;
|
shouldAutoSkip(sponsorTimes[index])) return index;
|
||||||
|
|
||||||
// Default to the normal endTime
|
// Default to the normal endTime
|
||||||
let latestEndTimeIndex = index;
|
let latestEndTimeIndex = index;
|
||||||
@@ -938,7 +938,7 @@ function getLatestEndTimeIndex(sponsorTimes: SponsorTime[], index: number, hideH
|
|||||||
|
|
||||||
if (currentSegment[0] <= latestEndTime && currentSegment[1] > latestEndTime
|
if (currentSegment[0] <= latestEndTime && currentSegment[1] > latestEndTime
|
||||||
&& (!hideHiddenSponsors || sponsorTimes[i].hidden === SponsorHideType.Visible)
|
&& (!hideHiddenSponsors || sponsorTimes[i].hidden === SponsorHideType.Visible)
|
||||||
&& utils.getCategorySelection(sponsorTimes[i].category).option === CategorySkipOption.AutoSkip) {
|
&& shouldAutoSkip(sponsorTimes[i])) {
|
||||||
// Overlapping segment
|
// Overlapping segment
|
||||||
latestEndTimeIndex = i;
|
latestEndTimeIndex = i;
|
||||||
}
|
}
|
||||||
@@ -1019,7 +1019,7 @@ function sendTelemetryAndCount(skippingSegments: SponsorTime[], secondsSkipped:
|
|||||||
//skip from the start time to the end time for a certain index sponsor time
|
//skip from the start time to the end time for a certain index sponsor time
|
||||||
function skipToTime(v: HTMLVideoElement, skipTime: number[], skippingSegments: SponsorTime[], openNotice: boolean) {
|
function skipToTime(v: HTMLVideoElement, skipTime: number[], skippingSegments: SponsorTime[], openNotice: boolean) {
|
||||||
// There will only be one submission if it is manual skip
|
// There will only be one submission if it is manual skip
|
||||||
const autoSkip: boolean = utils.getCategorySelection(skippingSegments[0].category)?.option === CategorySkipOption.AutoSkip;
|
const autoSkip: boolean = shouldAutoSkip(skippingSegments[0]);
|
||||||
|
|
||||||
if ((autoSkip || sponsorTimesSubmitting.includes(skippingSegments[0])) && v.currentTime !== skipTime[1]) {
|
if ((autoSkip || sponsorTimesSubmitting.includes(skippingSegments[0])) && v.currentTime !== skipTime[1]) {
|
||||||
// Fix for looped videos not working when skipping to the end #426
|
// Fix for looped videos not working when skipping to the end #426
|
||||||
@@ -1097,6 +1097,11 @@ function createButton(baseID: string, title: string, callback: () => void, image
|
|||||||
return newButton;
|
return newButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function shouldAutoSkip(segment: SponsorTime): boolean {
|
||||||
|
return utils.getCategorySelection(segment.category)?.option === CategorySkipOption.AutoSkip ||
|
||||||
|
(Config.config.autoSkipOnMusicVideos && sponsorTimes.some((s) => s.category === "music_offtopic"));
|
||||||
|
}
|
||||||
|
|
||||||
function getControls(): HTMLElement | false {
|
function getControls(): HTMLElement | false {
|
||||||
const controlsSelectors = [
|
const controlsSelectors = [
|
||||||
// YouTube
|
// YouTube
|
||||||
|
|||||||
Reference in New Issue
Block a user