Skip to content

Commit

Permalink
Add start of visual segment editing
Browse files Browse the repository at this point in the history
  • Loading branch information
ajayyy committed Sep 26, 2021
1 parent 76d9a9a commit 51d9edb
Show file tree
Hide file tree
Showing 6 changed files with 144 additions and 4 deletions.
4 changes: 4 additions & 0 deletions public/_locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,10 @@
"mute": {
"message": "Mute"
},
"visual": {
"message": "Visual",
"description": "This is the name of the option to create visual obstructions on top of the video to hide logos when a skip doesn't work."
},
"skip_category": {
"message": "Skip {0}?"
},
Expand Down
2 changes: 1 addition & 1 deletion src/components/SponsorTimeEditComponent.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as React from "react";
import * as CompileConfig from "../../config.json";
import Config from "../config";
import { ActionType, ActionTypes, Category, CategoryActionType, ContentContainer, SponsorTime } from "../types";
import { ActionType, Category, CategoryActionType, ContentContainer, SponsorTime } from "../types";
import Utils from "../utils";
import { getCategoryActionType } from "../utils/categoryUtils";
import SubmissionNoticeComponent from "./SubmissionNoticeComponent";
Expand Down
116 changes: 116 additions & 0 deletions src/components/VisualSegmentEditComponent.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import * as React from "react";
import Config from "../config";
import { ContentContainer, VisualSegmentInfo } from "../types";
import Utils from "../utils";


const utils = new Utils();

export interface VisualSegmentEditProps {
index: number,

visual: VisualSegmentInfo,

idSuffix: string,
// Contains functions and variables from the content script needed by the skip notice
contentContainer: ContentContainer,
}

export interface VisualSegmentEditState {

}

class VisualSegmentEditComponent extends React.Component<VisualSegmentEditProps, VisualSegmentEditState> {

idSuffix: string;

configUpdateListener: () => void;

constructor(props: VisualSegmentEditProps) {
super(props);

this.idSuffix = this.props.idSuffix;

this.state = {
};
}

componentDidMount(): void {
// Add as a config listener
if (!this.configUpdateListener) {
this.configUpdateListener = () => this.configUpdate();
Config.configListeners.push(this.configUpdate.bind(this));
}
}

componentWillUnmount(): void {
if (this.configUpdateListener) {
Config.configListeners.splice(Config.configListeners.indexOf(this.configUpdate.bind(this)), 1);
}
}

render(): React.ReactElement {
return <>
<span id={`time${this.props.idSuffix}`}>
{utils.getFormattedTime(this.props.visual.time, true)}
</span>

<span>
-
</span>

{this.getBoundsElement()}

<span>
-
</span>

<input
type="checkBox"
onChange={(event) => this.colorUpdated(event)}
value={this.props.visual.color}
/>

<span>
Smooth
</span>

<span>
-
</span>

<input
className="categoryColorTextBox"
type="color"
onChange={(event) => this.colorUpdated(event)}
value={this.props.visual.color}
/>


</>
}

getBoundsElement(): React.ReactElement[] {
const elements: React.ReactElement[] = [];

for (const bound of this.props.visual.bounds) {
elements.push(
<span>
{`${bound[0] * 100}% x ${bound[0] * 100}%, `}
</span>
);
}

return elements;
}

colorUpdated(event: React.ChangeEvent<HTMLInputElement>): void {
this.props.visual.color = event.target.value;
}

configUpdate(): void {
this.forceUpdate();
}
}

export default VisualSegmentEditComponent;
2 changes: 2 additions & 0 deletions src/js-components/skipButtonControlBar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ export class SkipButtonControlBar {
this.container.appendChild(this.textContainer);
this.container.addEventListener("click", () => this.toggleSkip());
this.container.addEventListener("mouseenter", () => this.stopTimer());
this.container.addEventListener("mouseenter", () => console.log("mouseenter"));
this.container.addEventListener("mouseleave", () => this.startTimer());
this.container.addEventListener("mouseleave", () => console.log("mouseleave"));
}

getElement(): HTMLElement {
Expand Down
15 changes: 12 additions & 3 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,10 @@ export enum CategoryActionType {

export enum ActionType {
Skip = "skip",
Mute = "mute"
Mute = "mute",
Visual = "visual",
}

export const ActionTypes = [ActionType.Skip, ActionType.Mute];

export type SegmentUUID = string & { __segmentUUIDBrand: unknown };
export type Category = string & { __categoryBrand: unknown };

Expand All @@ -80,6 +79,16 @@ export interface SponsorTime {

hidden?: SponsorHideType;
source?: SponsorSourceType;

visual: string;
}

export interface VisualSegmentInfo {
time: number;
bounds: [number, number][];
smooth: boolean;
curve: string;
color: string;
}

export interface ScheduledTime extends SponsorTime {
Expand Down
9 changes: 9 additions & 0 deletions src/utils/visualUtils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { VisualSegmentInfo } from "../types";

export function toSVG(visuals: VisualSegmentInfo[]): string {
throw new Error("Method not implemented.");
}

export function toVisualSegmentInfo(svg: string): VisualSegmentInfo {
throw new Error("Method not implemented.");
}

0 comments on commit 51d9edb

Please sign in to comment.