Merge pull request #580 from ajayyy/category-list

Lock category order and show all categories + more
This commit is contained in:
Ajay Ramachandran
2020-12-20 18:51:57 -05:00
committed by GitHub
5 changed files with 695 additions and 573 deletions

1195
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -29,7 +29,7 @@
"ts-jest": "^26.2.0", "ts-jest": "^26.2.0",
"ts-loader": "^6.2.1", "ts-loader": "^6.2.1",
"typescript": "~3.7.3", "typescript": "~3.7.3",
"web-ext": "^5.0.0", "web-ext": "^5.4.1",
"webpack": "~4.41.2", "webpack": "~4.41.2",
"webpack-cli": "~3.3.10", "webpack-cli": "~3.3.10",
"webpack-merge": "~4.2.2" "webpack-merge": "~4.2.2"

View File

@@ -581,6 +581,10 @@
"chooseACategory": { "chooseACategory": {
"message": "Choose a Category" "message": "Choose a Category"
}, },
"enableThisCategoryFirst": {
"message": "To submit segments with the category of \"{0}\", you must enable it in the options. You will be redirected to the options now.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"youMustSelectACategory": { "youMustSelectACategory": {
"message": "You must select a category for all segments you are submitting!" "message": "You must select a category for all segments you are submitting!"
}, },

View File

@@ -23,6 +23,8 @@ export interface SponsorTimeEditState {
sponsorTimeEdits: [string, string]; sponsorTimeEdits: [string, string];
} }
const DEFAULT_CATEGORY = "chooseACategory";
class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, SponsorTimeEditState> { class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, SponsorTimeEditState> {
idSuffix: string; idSuffix: string;
@@ -217,27 +219,17 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
getCategoryOptions(): React.ReactElement[] { getCategoryOptions(): React.ReactElement[] {
const elements = [( const elements = [(
<option value={"chooseACategory"} <option value={DEFAULT_CATEGORY}
key={"chooseACategory"}> key={DEFAULT_CATEGORY}>
{chrome.i18n.getMessage("chooseACategory")} {chrome.i18n.getMessage(DEFAULT_CATEGORY)}
</option> </option>
)]; )];
for (const category of Config.config.categorySelections) { for (const category of CompileConfig.categoryList) {
elements.push( elements.push(
<option value={category.name} <option value={category}
key={category.name}> key={category}>
{chrome.i18n.getMessage("category_" + category.name)} {chrome.i18n.getMessage("category_" + category)}
</option>
);
}
if (elements.length < CompileConfig.categoryList.length) {
// Add show more button
elements.push(
<option value={"moreCategories"}
key={"moreCategories"}>
{chrome.i18n.getMessage("moreCategories")}
</option> </option>
); );
} }
@@ -247,12 +239,17 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
categorySelectionChange(event: React.ChangeEvent<HTMLSelectElement>): void { categorySelectionChange(event: React.ChangeEvent<HTMLSelectElement>): void {
// See if show more categories was pressed // See if show more categories was pressed
if (event.target.value === "moreCategories") { if (!Config.config.categorySelections.some((category) => category.name === event.target.value)) {
const chosenCategory = event.target.value;
event.target.value = DEFAULT_CATEGORY;
// Alert that they have to enable this category first
if (confirm(chrome.i18n.getMessage("enableThisCategoryFirst")
.replace("{0}", chrome.i18n.getMessage("category_" + chosenCategory)))) {
// Open options page // Open options page
chrome.runtime.sendMessage({"message": "openConfig"}); chrome.runtime.sendMessage({"message": "openConfig"});
}
// Reset option to previous
event.target.value = this.props.contentContainer().sponsorTimesSubmitting[this.props.index].category;
return; return;
} }

View File

@@ -752,10 +752,11 @@ function startSkipScheduleCheckingForStartSponsors() {
/** /**
* Get the video info for the current tab from YouTube * Get the video info for the current tab from YouTube
*/ */
function getVideoInfo() { async function getVideoInfo(): Promise<void> {
sendRequestToCustomServer('GET', "https://www.youtube.com/get_video_info?video_id=" + sponsorVideoID, function(xmlhttp) { const result = await utils.asyncRequestToCustomServer("GET", "https://www.youtube.com/get_video_info?video_id=" + sponsorVideoID);
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
const decodedData = decodeURIComponent(xmlhttp.responseText).match(/player_response=([^&]*)/)[1]; if (result.ok) {
const decodedData = decodeURIComponent(result.responseText).match(/player_response=([^&]*)/)[1];
if (!decodedData) { if (!decodedData) {
console.error("[SB] Failed at getting video info from YouTube."); console.error("[SB] Failed at getting video info from YouTube.");
return; return;
@@ -763,7 +764,6 @@ function getVideoInfo() {
videoInfo = JSON.parse(decodedData); videoInfo = JSON.parse(decodedData);
} }
});
} }
function getYouTubeVideoID(url: string) { function getYouTubeVideoID(url: string) {
@@ -1052,6 +1052,8 @@ function unskipSponsorTime(segment: SponsorTime) {
function reskipSponsorTime(segment: SponsorTime) { function reskipSponsorTime(segment: SponsorTime) {
video.currentTime = segment.segment[1]; video.currentTime = segment.segment[1];
startSponsorSchedule(true, segment.segment[1], false);
} }
function createButton(baseID, title, callback, imageName, isDraggable=false): boolean { function createButton(baseID, title, callback, imageName, isDraggable=false): boolean {