diff --git a/src/config.ts b/src/config.ts index 97ca67d..f4e6175 100644 --- a/src/config.ts +++ b/src/config.ts @@ -30,7 +30,7 @@ addDefaults(config, { preview: ["skip", "mute"], filler: ["skip", "mute"], music_offtopic: ["skip"], - poi_highlight: ["skip"], + poi_highlight: ["poi"], chapter: ["chapter"] }, maxNumberOfActiveWarnings: 1, diff --git a/src/routes/getSkipSegments.ts b/src/routes/getSkipSegments.ts index 6f3f898..69b3105 100644 --- a/src/routes/getSkipSegments.ts +++ b/src/routes/getSkipSegments.ts @@ -4,8 +4,7 @@ import { config } from "../config"; import { db, privateDB } from "../databases/databases"; import { skipSegmentsHashKey, skipSegmentsKey, skipSegmentGroupsKey } from "../utils/redisKeys"; import { SBRecord } from "../types/lib.model"; -import { ActionType, Category, CategoryActionType, DBSegment, HashedIP, IPAddress, OverlappingSegmentGroup, Segment, SegmentCache, SegmentUUID, Service, VideoData, VideoID, VideoIDHash, Visibility, VotableObject } from "../types/segments.model"; -import { getCategoryActionType } from "../utils/categoryInfo"; +import { ActionType, Category, DBSegment, HashedIP, IPAddress, OverlappingSegmentGroup, Segment, SegmentCache, SegmentUUID, Service, VideoData, VideoID, VideoIDHash, Visibility, VotableObject } from "../types/segments.model"; import { getHashCache } from "../utils/getHashCache"; import { getIP } from "../utils/getIP"; import { Logger } from "../utils/logger"; @@ -263,7 +262,7 @@ async function chooseSegments(videoID: VideoID, service: Service, segments: DBSe // Filter for only 1 item for POI categories and Full video let chosenGroups = getWeightedRandomChoice(groups, 1, true, (choice) => choice.segments[0].actionType === ActionType.Full); - chosenGroups = getWeightedRandomChoice(chosenGroups, 1, true, (choice) => getCategoryActionType(choice.segments[0].category) === CategoryActionType.POI); + chosenGroups = getWeightedRandomChoice(chosenGroups, 1, true, (choice) => choice.segments[0].actionType === ActionType.Poi); return chosenGroups.map(//randomly choose 1 good segment per group and return them group => getWeightedRandomChoice(group.segments, 1)[0] ); diff --git a/src/routes/postSkipSegments.ts b/src/routes/postSkipSegments.ts index 39b79a2..568199d 100644 --- a/src/routes/postSkipSegments.ts +++ b/src/routes/postSkipSegments.ts @@ -9,9 +9,8 @@ import { getIP } from "../utils/getIP"; import { getFormattedTime } from "../utils/getFormattedTime"; import { dispatchEvent } from "../utils/webhookUtils"; import { Request, Response } from "express"; -import { ActionType, Category, CategoryActionType, IncomingSegment, IPAddress, SegmentUUID, Service, VideoDuration, VideoID } from "../types/segments.model"; +import { ActionType, Category, IncomingSegment, IPAddress, SegmentUUID, Service, VideoDuration, VideoID } from "../types/segments.model"; import { deleteLockCategories } from "./deleteLockCategories"; -import { getCategoryActionType } from "../utils/categoryInfo"; import { QueryCacher } from "../utils/queryCacher"; import { getReputation } from "../utils/reputation"; import { APIVideoData, APIVideoInfo } from "../types/youtubeApi.model"; @@ -375,6 +374,11 @@ async function checkEachSegmentValid(rawIP: IPAddress, paramUserID: UserID, user }; } + // For old clients + if (segments[i].category === "poi_highlight" && segments[i].actionType !== ActionType.Poi) { + segments[i].actionType = ActionType.Poi; + } + if (!config.categorySupport[segments[i].category]?.includes(segments[i].actionType)) { return { pass: false, errorMessage: "ActionType is not supported with this category.", errorCode: 400 }; } @@ -384,16 +388,16 @@ async function checkEachSegmentValid(rawIP: IPAddress, paramUserID: UserID, user if (isNaN(startTime) || isNaN(endTime) || startTime === Infinity || endTime === Infinity || startTime < 0 || startTime > endTime - || (getCategoryActionType(segments[i].category) === CategoryActionType.Skippable + || (segments[i].actionType !== ActionType.Poi && segments[i].actionType !== ActionType.Full && startTime === endTime) - || (getCategoryActionType(segments[i].category) === CategoryActionType.POI && startTime !== endTime) + || (segments[i].actionType === ActionType.Poi && startTime !== endTime) || (segments[i].actionType === ActionType.Full && (startTime !== 0 || endTime !== 0))) { //invalid request return { pass: false, errorMessage: "One of your segments times are invalid (too short, endTime before startTime, etc.)", errorCode: 400 }; } // Check for POI segments before some seconds - if (!isVIP && getCategoryActionType(segments[i].category) === CategoryActionType.POI && startTime < config.poiMinimumStartTime) { + if (!isVIP && segments[i].actionType === ActionType.Poi && startTime < config.poiMinimumStartTime) { return { pass: false, errorMessage: `POI cannot be that early`, errorCode: 400 }; } diff --git a/src/routes/voteOnSponsorTime.ts b/src/routes/voteOnSponsorTime.ts index e9585af..e0bdb58 100644 --- a/src/routes/voteOnSponsorTime.ts +++ b/src/routes/voteOnSponsorTime.ts @@ -10,8 +10,7 @@ import { getIP } from "../utils/getIP"; import { getHashCache } from "../utils/getHashCache"; import { config } from "../config"; import { HashedUserID, UserID } from "../types/user.model"; -import { Category, CategoryActionType, HashedIP, IPAddress, SegmentUUID, Service, VideoID, VideoIDHash, Visibility, VideoDuration, ActionType } from "../types/segments.model"; -import { getCategoryActionType } from "../utils/categoryInfo"; +import { Category, HashedIP, IPAddress, SegmentUUID, Service, VideoID, VideoIDHash, Visibility, VideoDuration, ActionType } from "../types/segments.model"; import { QueryCacher } from "../utils/queryCacher"; import axios from "axios"; import redis from "../utils/redis"; @@ -211,8 +210,8 @@ async function categoryVote(UUID: SegmentUUID, userID: UserID, isVIP: boolean, i if (!config.categoryList.includes(category)) { return { status: 400, message: "Category doesn't exist." }; } - if (getCategoryActionType(category) !== CategoryActionType.Skippable) { - return { status: 400, message: "Cannot vote for this category" }; + if (videoInfo.actionType === ActionType.Poi) { + return { status: 400, message: "Not allowed to change category for single point segments" }; } // Ignore vote if the next category is locked diff --git a/src/types/segments.model.ts b/src/types/segments.model.ts index f2e6103..5edb3e0 100644 --- a/src/types/segments.model.ts +++ b/src/types/segments.model.ts @@ -103,11 +103,6 @@ export interface SegmentCache { userHashedIP?: HashedIP } -export enum CategoryActionType { - Skippable, - POI -} - export interface DBLock { videoID: VideoID, userID: HashedUserID, diff --git a/src/utils/categoryInfo.ts b/src/utils/categoryInfo.ts deleted file mode 100644 index d573128..0000000 --- a/src/utils/categoryInfo.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Category, CategoryActionType } from "../types/segments.model"; - -export function getCategoryActionType(category: Category): CategoryActionType { - if (category.startsWith("poi_")) { - return CategoryActionType.POI; - } else { - return CategoryActionType.Skippable; - } -}