mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2026-02-01 07:10:55 +03:00
67 lines
2.7 KiB
TypeScript
67 lines
2.7 KiB
TypeScript
import { IDatabase } from "../../src/databases/IDatabase";
|
|
import { Service, VideoIDHash, VideoID } from "../../src/types/segments.model";
|
|
import { HashedUserID, UserID } from "../../src/types/user.model";
|
|
import { genRandom, genRandomValue } from "./getRandom";
|
|
import { getHash } from "../../src/utils/getHash";
|
|
|
|
type insertSegmentParams = {
|
|
videoID?: string,
|
|
startTime?: number,
|
|
endTime?: number,
|
|
votes?: number,
|
|
locked?: boolean | number,
|
|
UUID?: string,
|
|
userID?: HashedUserID | "",
|
|
timeSubmitted?: number,
|
|
views?: number,
|
|
category?: string,
|
|
actionType?: string,
|
|
service?: Service,
|
|
videoDuration?: number,
|
|
hidden?: boolean | number,
|
|
shadowHidden?: boolean | number,
|
|
hashedVideoID?: VideoIDHash | "",
|
|
description?: string
|
|
};
|
|
const defaultSegmentParams: insertSegmentParams = {
|
|
videoID: "",
|
|
startTime: 0,
|
|
endTime: 0,
|
|
votes: 0,
|
|
locked: false,
|
|
UUID: "",
|
|
userID: "",
|
|
timeSubmitted: 0,
|
|
views: 0,
|
|
category: "sponsor",
|
|
actionType: "skip",
|
|
service: Service.YouTube,
|
|
videoDuration: 0,
|
|
hidden: false,
|
|
shadowHidden: false,
|
|
hashedVideoID: "",
|
|
description: ""
|
|
};
|
|
|
|
export const insertSegment = async(db: IDatabase, params: insertSegmentParams = {}) => {
|
|
const query = 'INSERT INTO "sponsorTimes" ("videoID", "startTime", "endTime", "votes", "locked", "UUID", "userID", "timeSubmitted", "views", "category", "actionType", "service", "videoDuration", "hidden", "shadowHidden", "hashedVideoID", "description") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
|
|
// corrections for parameters
|
|
const correctedParams = { ...defaultSegmentParams, ...params };
|
|
const identifier = genRandom(7); // 7 to fill out videoID
|
|
// generate defaults
|
|
const videoID = (params.videoID || `vid-${identifier}`) as VideoID;
|
|
const userID = (params.userID || `user-${identifier}`) as UserID;
|
|
if (!params.videoID) correctedParams.videoID = videoID;
|
|
if (!params.UUID) correctedParams.UUID = genRandomValue("uuid", identifier, 2);
|
|
if (!params.userID) correctedParams.userID = getHash(userID);
|
|
if (!params.hashedVideoID) correctedParams.hashedVideoID = getHash(videoID);
|
|
// convert bool to 0 | 1
|
|
correctedParams.locked = Number(correctedParams.locked);
|
|
correctedParams.hidden = Number(correctedParams.hidden);
|
|
correctedParams.shadowHidden = Number(correctedParams.shadowHidden);
|
|
await db.prepare("run", query, Object.values(correctedParams));
|
|
};
|
|
export const insertChapter = async(db: IDatabase, description: string, params: insertSegmentParams = {}) => {
|
|
const overrides = { category: "chapter", actionType: "chapter", description, ...params };
|
|
await insertSegment(db, overrides);
|
|
}; |