diff options
-rw-r--r-- | .eslintrc.js | 1 | ||||
-rw-r--r-- | src/components/SkipNoticeComponent.tsx | 38 | ||||
-rw-r--r-- | src/components/TooltipComponent.tsx | 2 | ||||
-rw-r--r-- | src/config.ts | 22 | ||||
-rw-r--r-- | src/content.ts | 26 | ||||
-rw-r--r-- | src/js-components/skipButtonControlBar.ts | 8 |
6 files changed, 33 insertions, 64 deletions
diff --git a/.eslintrc.js b/.eslintrc.js index 96035c76..622e66ad 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,6 +21,7 @@ module.exports = { }, plugins: ["react", "@typescript-eslint"], rules: { + '@typescript-eslint/no-unused-vars': 'error', // TODO: Remove warn rules when not needed anymore "no-self-assign": "off", "@typescript-eslint/no-empty-interface": "off", diff --git a/src/components/SkipNoticeComponent.tsx b/src/components/SkipNoticeComponent.tsx index 67facd3a..a972b325 100644 --- a/src/components/SkipNoticeComponent.tsx +++ b/src/components/SkipNoticeComponent.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import * as CompileConfig from "../../config.json"; import Config from "../config" -import { Category, ContentContainer, SponsorHideType, SponsorTime, NoticeVisbilityMode, ActionType, SponsorSourceType, SegmentUUID } from "../types"; +import { Category, ContentContainer, SponsorTime, NoticeVisbilityMode, ActionType, SponsorSourceType, SegmentUUID } from "../types"; import NoticeComponent from "./NoticeComponent"; import NoticeTextSelectionComponent from "./NoticeTextSectionComponent"; import Utils from "../utils"; @@ -72,7 +72,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta amountOfPreviousNotices: number; showInSecondSlot: boolean; - + idSuffix: string; noticeRef: React.MutableRefObject<NoticeComponent>; @@ -105,7 +105,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta if (this.segments.length > 1) { this.segments.sort((a, b) => a.segment[0] - b.segment[0]); } - + // This is the suffix added at the end of every id for (const segment of this.segments) { this.idSuffix += segment.UUID; @@ -168,7 +168,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta noticeStyle.transform = "scale(0.8) translate(10%, 10%)"; } - // If it started out as smaller, always keep the + // If it started out as smaller, always keep the // skip button there const showFirstSkipButton = this.props.smaller || this.segments[0].actionType === ActionType.Mute; const firstColumn = showFirstSkipButton ? ( @@ -181,7 +181,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta showInSecondSlot={this.showInSecondSlot} idSuffix={this.idSuffix} fadeIn={true} - startFaded={Config.config.noticeVisibilityMode >= NoticeVisbilityMode.FadedForAll + startFaded={Config.config.noticeVisibilityMode >= NoticeVisbilityMode.FadedForAll || (Config.config.noticeVisibilityMode >= NoticeVisbilityMode.FadedForAutoSkip && this.autoSkip)} timed={true} maxCountdownTime={this.state.maxCountdownTime} @@ -205,7 +205,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta key={0}> {/* Vote Button Container */} - {!this.state.thanksForVotingText ? + {!this.state.thanksForVotingText ? <td id={"sponsorTimesVoteButtonsContainer" + this.idSuffix} className="sponsorTimesVoteButtonsContainer"> @@ -268,7 +268,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta ? this.getSkipButton(1) : null} {/* Never show button */} - {!this.autoSkip || this.props.startReskip ? "" : + {!this.autoSkip || this.props.startReskip ? "" : <td className="sponsorSkipNoticeRightSection" key={1}> <button className="sponsorSkipObject sponsorSkipNoticeButton sponsorSkipNoticeRightButton" @@ -343,7 +343,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta } getSkipButton(buttonIndex: number): JSX.Element { - if (this.state.showSkipButton[buttonIndex] && (this.segments.length > 1 + if (this.state.showSkipButton[buttonIndex] && (this.segments.length > 1 || this.segments[0].actionType !== ActionType.Poi || this.props.unskipTime)) { @@ -365,8 +365,8 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta className="sponsorSkipObject sponsorSkipNoticeButton" style={style} onClick={() => this.prepAction(buttonIndex === 1 ? SkipNoticeAction.Unskip1 : SkipNoticeAction.Unskip0)}> - {this.getSkipButtonText(buttonIndex, forceSeek ? ActionType.Skip : null) - + (!forceSeek && this.state.showKeybindHint + {this.getSkipButtonText(buttonIndex, forceSeek ? ActionType.Skip : null) + + (!forceSeek && this.state.showKeybindHint ? " (" + keybindToString(Config.config.skipKeybind) + ")" : "")} </button> </span> @@ -379,7 +379,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta for (let i = 0; i < this.segments.length; i++) { elements.push( <button className="sponsorSkipObject sponsorSkipNoticeButton" - style={{opacity: this.getSubmissionChooserOpacity(i), + style={{opacity: this.getSubmissionChooserOpacity(i), color: this.getSubmissionChooserColor(i)}} onClick={() => this.performAction(i)} key={"submission" + i + this.segments[i].category + this.idSuffix}> @@ -404,7 +404,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta getSubmissionChooserColor(index: number): string { const isDownvote = this.state.actionState == SkipNoticeAction.Downvote; const isCopyDownvote = this.state.actionState == SkipNoticeAction.CopyDownvote; - const shouldWarnUser = Config.config.isVip && (isDownvote || isCopyDownvote) + const shouldWarnUser = Config.config.isVip && (isDownvote || isCopyDownvote) && this.segments[index].locked === 1; return shouldWarnUser ? this.lockedColor : this.unselectedColor; @@ -480,8 +480,8 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta /** * Performs the action from the current state - * - * @param index + * + * @param index */ performAction(index: number, action?: SkipNoticeAction): void { switch (action ?? this.state.actionState) { @@ -620,7 +620,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta // See if the title should be changed if (!this.autoSkip) { newState.noticeTitle = chrome.i18n.getMessage("noticeTitle"); - } + } //reset countdown this.setState(newState, () => { @@ -723,7 +723,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta messages }); } - + addVoteButtonInfo(message: string): void { this.setState({ thanksForVotingText: message @@ -786,7 +786,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta case ActionType.Mute: { return chrome.i18n.getMessage("unmute"); } - case ActionType.Skip: + case ActionType.Skip: default: { return chrome.i18n.getMessage("unskip"); } @@ -799,7 +799,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta case ActionType.Mute: { return chrome.i18n.getMessage("mute"); } - case ActionType.Skip: + case ActionType.Skip: default: { return chrome.i18n.getMessage("reskip"); } @@ -812,7 +812,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta case ActionType.Mute: { return chrome.i18n.getMessage("mute"); } - case ActionType.Skip: + case ActionType.Skip: default: { return chrome.i18n.getMessage("skip"); } diff --git a/src/components/TooltipComponent.tsx b/src/components/TooltipComponent.tsx index 5e2cacb2..0e13c63c 100644 --- a/src/components/TooltipComponent.tsx +++ b/src/components/TooltipComponent.tsx @@ -1,6 +1,4 @@ import * as React from "react"; -import Config from "../config"; -import { Category, SegmentUUID, SponsorTime } from "../types"; export interface TooltipProps { text: string; diff --git a/src/config.ts b/src/config.ts index 03ebbaf0..5a0fe5be 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,6 +1,6 @@ import * as CompileConfig from "../config.json"; import * as invidiousList from "../ci/invidiouslist.json"; -import { Category, CategorySelection, CategorySkipOption, NoticeVisbilityMode, PreviewBarOption, SponsorTime, StorageChangesObject, UnEncodedSegmentTimes as UnencodedSegmentTimes, Keybind, HashedValue, VideoID, SponsorHideType } from "./types"; +import { Category, CategorySelection, CategorySkipOption, NoticeVisbilityMode, PreviewBarOption, SponsorTime, StorageChangesObject, Keybind, HashedValue, VideoID, SponsorHideType } from "./types"; import { keybindEquals } from "./utils/configUtils"; interface SBConfig { @@ -302,7 +302,7 @@ function configProxy(): { sync: SBConfig, local: SBStorage } { for (const key in changes) { Config.cachedSyncConfig[key] = changes[key].newValue; } - + for (const callback of Config.configSyncListeners) { callback(changes); } @@ -312,7 +312,7 @@ function configProxy(): { sync: SBConfig, local: SBStorage } { } } }); - + const syncHandler: ProxyHandler<SBConfig> = { set<K extends keyof SBConfig>(obj: SBConfig, prop: K, value: SBConfig[K]) { Config.cachedSyncConfig[prop] = value; @@ -329,10 +329,10 @@ function configProxy(): { sync: SBConfig, local: SBStorage } { return obj[prop] || data; }, - + deleteProperty(obj: SBConfig, prop: keyof SBConfig) { chrome.storage.sync.remove(<string> prop); - + return true; } @@ -354,10 +354,10 @@ function configProxy(): { sync: SBConfig, local: SBStorage } { return obj[prop] || data; }, - + deleteProperty(obj: SBStorage, prop: keyof SBStorage) { chrome.storage.local.remove(<string> prop); - + return true; } @@ -381,7 +381,7 @@ function forceLocalUpdate(prop: string): void { }); } -async function fetchConfig(): Promise<void> { +async function fetchConfig(): Promise<void> { await Promise.all([new Promise<void>((resolve) => { chrome.storage.sync.get(null, function(items) { Config.cachedSyncConfig = <SBConfig> <unknown> items; @@ -389,7 +389,7 @@ async function fetchConfig(): Promise<void> { }); }), new Promise<void>((resolve) => { chrome.storage.local.get(null, function(items) { - Config.cachedLocalStorage = <SBStorage> <unknown> items; + Config.cachedLocalStorage = <SBStorage> <unknown> items; resolve(); }); })]); @@ -433,9 +433,9 @@ function migrateOldSyncFormats(config: SBConfig) { if (!config["autoSkipOnMusicVideosUpdate"]) { config["autoSkipOnMusicVideosUpdate"] = true; for (const selection of config.categorySelections) { - if (selection.name === "music_offtopic" + if (selection.name === "music_offtopic" && selection.option === CategorySkipOption.AutoSkip) { - + config.autoSkipOnMusicVideos = true; break; } diff --git a/src/content.ts b/src/content.ts index 56b08571..6b12a578 100644 --- a/src/content.ts +++ b/src/content.ts @@ -321,9 +321,6 @@ async function videoIDChange(id) { } } - // Get new video info - // getVideoInfo(); // Seems to have been replaced - // Update whitelist data when the video data is loaded whitelistCheck(); @@ -942,12 +939,10 @@ function startSkipScheduleCheckingForStartSponsors() { // See if there are any starting sponsors let startingSegmentTime = getStartTimeFromUrl(document.URL) || -1; let found = false; - let startingSegment: SponsorTime = null; for (const time of sponsorTimes) { if (time.segment[0] <= video.currentTime && time.segment[0] > startingSegmentTime && time.segment[1] > video.currentTime && time.actionType !== ActionType.Poi) { startingSegmentTime = time.segment[0]; - startingSegment = time; found = true; break; } @@ -957,7 +952,6 @@ function startSkipScheduleCheckingForStartSponsors() { if (time.segment[0] <= video.currentTime && time.segment[0] > startingSegmentTime && time.segment[1] > video.currentTime && time.actionType !== ActionType.Poi) { startingSegmentTime = time.segment[0]; - startingSegment = time; found = true; break; } @@ -995,26 +989,6 @@ function startSkipScheduleCheckingForStartSponsors() { } } -/** - * Get the video info for the current tab from YouTube - * - * TODO: Replace - */ -async function getVideoInfo(): Promise<void> { - const result = await utils.asyncRequestToCustomServer("GET", "https://www.youtube.com/get_video_info?video_id=" + sponsorVideoID + "&html5=1&c=TVHTML5&cver=7.20190319"); - - if (result.ok) { - const decodedData = decodeURIComponent(result.responseText).match(/player_response=([^&]*)/)[1]; - if (!decodedData) { - console.error("[SB] Failed at getting video info from YouTube."); - console.error("[SB] Data returned from YouTube: " + result.responseText); - return; - } - - videoInfo = JSON.parse(decodedData); - } -} - function getYouTubeVideoID(document: Document): string | boolean { const url = document.URL; // clips should never skip, going from clip to full video has no indications. diff --git a/src/js-components/skipButtonControlBar.ts b/src/js-components/skipButtonControlBar.ts index b765fc3e..11bbf1ac 100644 --- a/src/js-components/skipButtonControlBar.ts +++ b/src/js-components/skipButtonControlBar.ts @@ -2,10 +2,7 @@ import Config from "../config"; import { SponsorTime } from "../types"; import { getSkippingText } from "../utils/categoryUtils"; import { keybindToString } from "../utils/configUtils"; - -import Utils from "../utils"; import { AnimationUtils } from "../utils/animationUtils"; -const utils = new Utils(); export interface SkipButtonControlBarProps { skip: (segment: SponsorTime) => void; @@ -53,7 +50,7 @@ export class SkipButtonControlBar { this.skipIcon.id = "sbSkipIconControlBarImage"; this.textContainer = document.createElement("div"); - + this.container.appendChild(this.skipIcon); this.container.appendChild(this.textContainer); this.container.addEventListener("click", () => this.toggleSkip()); @@ -73,7 +70,7 @@ export class SkipButtonControlBar { attachToPage(): void { const mountingContainer = this.getMountingContainer(); this.chapterText = document.querySelector(".ytp-chapter-container"); - + if (mountingContainer && !mountingContainer.contains(this.container)) { if (this.onMobileYouTube) { mountingContainer.appendChild(this.container); @@ -220,4 +217,3 @@ export class SkipButtonControlBar { this.container.style.left = this.left + "px"; } } - |