From d50a69f1fd99f20a686e35b0cadcec02a62eec61 Mon Sep 17 00:00:00 2001 From: Ajay Date: Fri, 14 Jan 2022 19:34:54 -0500 Subject: [PATCH] New hash format for previewing segments --- src/content.ts | 27 ++++++++++++++------------- src/utils/pageUtils.ts | 8 +++++++- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/content.ts b/src/content.ts index e7df90e7..81ba097b 100644 --- a/src/content.ts +++ b/src/content.ts @@ -2021,19 +2021,20 @@ function showTimeWithoutSkips(skippedDuration: number): void { function checkForPreloadedSegment() { const hashParams = getHashParams(); - const startTime = hashParams.sbStart as number; - const endTime = hashParams.sbEnd as number; - const category = hashParams.sbCategory as Category; - const actionType = hashParams.sbActionType as ActionType; - if (startTime && endTime) { - if (!sponsorTimesSubmitting.some((segment) => segment.segment[0] === startTime && segment.segment[1] === endTime)) { - sponsorTimesSubmitting.push({ - segment: [startTime, endTime], - UUID: utils.generateUserID() as SegmentUUID, - category: category ? category : Config.config.defaultCategory, - actionType: actionType ? actionType : ActionType.Skip, - source: SponsorSourceType.Local - }); + const segments = hashParams.segments; + if (Array.isArray(segments)) { + for (const segment of segments) { + if (Array.isArray(segment.segment)) { + if (!sponsorTimesSubmitting.some((s) => s.segment[0] === segment.segment[0] && s.segment[1] === s.segment[1])) { + sponsorTimesSubmitting.push({ + segment: segment.segment, + UUID: utils.generateUserID() as SegmentUUID, + category: segment.category ? segment.category : Config.config.defaultCategory, + actionType: segment.actionType ? segment.actionType : ActionType.Skip, + source: SponsorSourceType.Local + }); + } + } } } } \ No newline at end of file diff --git a/src/utils/pageUtils.ts b/src/utils/pageUtils.ts index 6db26e19..28ac37d8 100644 --- a/src/utils/pageUtils.ts +++ b/src/utils/pageUtils.ts @@ -47,7 +47,13 @@ export function getHashParams(): Record { if (windowHash) { const params: Record = windowHash.split('&').reduce((acc, param) => { const [key, value] = param.split('='); - acc[key] = value; + const decoded = decodeURIComponent(value); + try { + acc[key] = decoded?.match(/{|\[/) ? JSON.parse(decoded) : value; + } catch (e) { + console.error(`Failed to parse hash parameter ${key}: ${value}`); + } + return acc; }, {});