diff --git a/src/config.ts b/src/config.ts index f25141f2..74bf214d 100644 --- a/src/config.ts +++ b/src/config.ts @@ -12,6 +12,9 @@ export enum SkipRuleAttribute { StartTime = "startTime", EndTime = "endTime", Duration = "duration", + StartTimePercent = "startTimePercent", + EndTimePercent = "endTimePercent", + DurationPercent = "durationPercent", Category = "category", Description = "description", Source = "source" diff --git a/src/utils/segmentData.ts b/src/utils/segmentData.ts index 77f7a83c..bd3ec75a 100644 --- a/src/utils/segmentData.ts +++ b/src/utils/segmentData.ts @@ -7,6 +7,7 @@ import { getHashParams } from "./pageUtils"; import { asyncRequestToServer } from "./requests"; import { extensionUserAgent } from "../../maze-utils/src"; import { VideoLabelsCacheData } from "./videoLabels"; +import { getVideoDuration } from "../../maze-utils/src/video"; const segmentDataCache = new DataCache(() => { return { @@ -129,6 +130,25 @@ function getSkipRuleValue(segment: SponsorTime | VideoLabelsCacheData, rule: Adv return (segment as SponsorTime).segment?.[1]; case SkipRuleAttribute.Duration: return (segment as SponsorTime).segment?.[1] - (segment as SponsorTime).segment?.[0]; + case SkipRuleAttribute.StartTimePercent: { + const startTime = (segment as SponsorTime).segment?.[0]; + if (startTime === undefined) return undefined; + + return startTime / getVideoDuration() * 100; + } + case SkipRuleAttribute.EndTimePercent: { + const endTime = (segment as SponsorTime).segment?.[1]; + if (endTime === undefined) return undefined; + + return endTime / getVideoDuration() * 100; + } + case SkipRuleAttribute.DurationPercent: { + const startTime = (segment as SponsorTime).segment?.[0]; + const endTime = (segment as SponsorTime).segment?.[1]; + if (startTime === undefined || endTime === undefined) return undefined; + + return (endTime - startTime) / getVideoDuration() * 100; + } case SkipRuleAttribute.Category: return segment.category; case SkipRuleAttribute.Description: