mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-06 19:47:00 +03:00
Remove unnecessary parts of video labels request
This commit is contained in:
@@ -2,26 +2,26 @@ import { Request, Response } from "express";
|
|||||||
import { db } from "../databases/databases";
|
import { db } from "../databases/databases";
|
||||||
import { videoLabelsHashKey, videoLabelsKey } from "../utils/redisKeys";
|
import { videoLabelsHashKey, videoLabelsKey } from "../utils/redisKeys";
|
||||||
import { SBRecord } from "../types/lib.model";
|
import { SBRecord } from "../types/lib.model";
|
||||||
import { DBSegment, Segment, Service, VideoData, VideoID, VideoIDHash } from "../types/segments.model";
|
import { Category, DBSegment, Segment, Service, VideoData, VideoID, VideoIDHash } from "../types/segments.model";
|
||||||
import { Logger } from "../utils/logger";
|
import { Logger } from "../utils/logger";
|
||||||
import { QueryCacher } from "../utils/queryCacher";
|
import { QueryCacher } from "../utils/queryCacher";
|
||||||
import { getService } from "../utils/getService";
|
import { getService } from "../utils/getService";
|
||||||
|
|
||||||
function transformDBSegments(segments: DBSegment[]): Segment[] {
|
interface FullVideoSegment {
|
||||||
|
category: Category;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface FullVideoSegmentVideoData {
|
||||||
|
segments: FullVideoSegment[];
|
||||||
|
}
|
||||||
|
|
||||||
|
function transformDBSegments(segments: DBSegment[]): FullVideoSegment[] {
|
||||||
return segments.map((chosenSegment) => ({
|
return segments.map((chosenSegment) => ({
|
||||||
category: chosenSegment.category,
|
category: chosenSegment.category
|
||||||
actionType: chosenSegment.actionType,
|
|
||||||
segment: [chosenSegment.startTime, chosenSegment.endTime],
|
|
||||||
UUID: chosenSegment.UUID,
|
|
||||||
locked: chosenSegment.locked,
|
|
||||||
votes: chosenSegment.votes,
|
|
||||||
videoDuration: chosenSegment.videoDuration,
|
|
||||||
userID: chosenSegment.userID,
|
|
||||||
description: chosenSegment.description
|
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getLabelsByVideoID(videoID: VideoID, service: Service): Promise<Segment[]> {
|
async function getLabelsByVideoID(videoID: VideoID, service: Service): Promise<FullVideoSegment[]> {
|
||||||
try {
|
try {
|
||||||
const segments: DBSegment[] = await getSegmentsFromDBByVideoID(videoID, service);
|
const segments: DBSegment[] = await getSegmentsFromDBByVideoID(videoID, service);
|
||||||
return chooseSegment(segments);
|
return chooseSegment(segments);
|
||||||
@@ -33,8 +33,8 @@ async function getLabelsByVideoID(videoID: VideoID, service: Service): Promise<S
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getLabelsByHash(hashedVideoIDPrefix: VideoIDHash, service: Service): Promise<SBRecord<VideoID, VideoData>> {
|
async function getLabelsByHash(hashedVideoIDPrefix: VideoIDHash, service: Service): Promise<SBRecord<VideoID, FullVideoSegmentVideoData>> {
|
||||||
const segments: SBRecord<VideoID, VideoData> = {};
|
const segments: SBRecord<VideoID, FullVideoSegmentVideoData> = {};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
type SegmentWithHashPerVideoID = SBRecord<VideoID, { hash: VideoIDHash, segments: DBSegment[] }>;
|
type SegmentWithHashPerVideoID = SBRecord<VideoID, { hash: VideoIDHash, segments: DBSegment[] }>;
|
||||||
@@ -53,7 +53,7 @@ async function getLabelsByHash(hashedVideoIDPrefix: VideoIDHash, service: Servic
|
|||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
for (const [videoID, videoData] of Object.entries(segmentPerVideoID)) {
|
for (const [videoID, videoData] of Object.entries(segmentPerVideoID)) {
|
||||||
const data: VideoData = {
|
const data: FullVideoSegmentVideoData = {
|
||||||
segments: chooseSegment(videoData.segments),
|
segments: chooseSegment(videoData.segments),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -97,7 +97,7 @@ async function getSegmentsFromDBByVideoID(videoID: VideoID, service: Service): P
|
|||||||
return await QueryCacher.get(fetchFromDB, videoLabelsKey(videoID, service));
|
return await QueryCacher.get(fetchFromDB, videoLabelsKey(videoID, service));
|
||||||
}
|
}
|
||||||
|
|
||||||
function chooseSegment<T extends DBSegment>(choices: T[]): Segment[] {
|
function chooseSegment<T extends DBSegment>(choices: T[]): FullVideoSegment[] {
|
||||||
// filter out -2 segments
|
// filter out -2 segments
|
||||||
choices = choices.filter((segment) => segment.votes > -2);
|
choices = choices.filter((segment) => segment.votes > -2);
|
||||||
const results = [];
|
const results = [];
|
||||||
@@ -125,7 +125,7 @@ function chooseSegment<T extends DBSegment>(choices: T[]): Segment[] {
|
|||||||
return transformDBSegments(results);
|
return transformDBSegments(results);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleGetLabel(req: Request, res: Response): Promise<Segment[] | false> {
|
async function handleGetLabel(req: Request, res: Response): Promise<FullVideoSegment[] | false> {
|
||||||
const videoID = req.query.videoID as VideoID;
|
const videoID = req.query.videoID as VideoID;
|
||||||
if (!videoID) {
|
if (!videoID) {
|
||||||
res.status(400).send("videoID not specified");
|
res.status(400).send("videoID not specified");
|
||||||
|
|||||||
@@ -33,10 +33,6 @@ describe("getVideoLabelHash", () => {
|
|||||||
function validateLabel(data: any, videoID: string) {
|
function validateLabel(data: any, videoID: string) {
|
||||||
assert.strictEqual(data[0].videoID, videoID);
|
assert.strictEqual(data[0].videoID, videoID);
|
||||||
assert.strictEqual(data[0].segments.length, 1);
|
assert.strictEqual(data[0].segments.length, 1);
|
||||||
assert.strictEqual(data[0].segments[0].segment[0], 0);
|
|
||||||
assert.strictEqual(data[0].segments[0].segment[1], 0);
|
|
||||||
assert.strictEqual(data[0].segments[0].actionType, "full");
|
|
||||||
assert.strictEqual(data[0].segments[0].userID, "labeluser");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const get = (videoID: string) => client.get(`${endpoint}/${getHash(videoID, 1).substring(0, 4)}`);
|
const get = (videoID: string) => client.get(`${endpoint}/${getHash(videoID, 1).substring(0, 4)}`);
|
||||||
@@ -50,8 +46,6 @@ describe("getVideoLabelHash", () => {
|
|||||||
validateLabel(data, videoID);
|
validateLabel(data, videoID);
|
||||||
const result = data[0].segments[0];
|
const result = data[0].segments[0];
|
||||||
assert.strictEqual(result.category, "sponsor");
|
assert.strictEqual(result.category, "sponsor");
|
||||||
assert.strictEqual(result.UUID, "labelhash01");
|
|
||||||
assert.strictEqual(result.locked, 0);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
@@ -66,8 +60,6 @@ describe("getVideoLabelHash", () => {
|
|||||||
validateLabel(data, videoID);
|
validateLabel(data, videoID);
|
||||||
const result = data[0].segments[0];
|
const result = data[0].segments[0];
|
||||||
assert.strictEqual(result.category, "exclusive_access");
|
assert.strictEqual(result.category, "exclusive_access");
|
||||||
assert.strictEqual(result.UUID, "labelhash02");
|
|
||||||
assert.strictEqual(result.locked, 0);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
@@ -82,8 +74,6 @@ describe("getVideoLabelHash", () => {
|
|||||||
validateLabel(data, videoID);
|
validateLabel(data, videoID);
|
||||||
const result = data[0].segments[0];
|
const result = data[0].segments[0];
|
||||||
assert.strictEqual(result.category, "selfpromo");
|
assert.strictEqual(result.category, "selfpromo");
|
||||||
assert.strictEqual(result.UUID, "labelhash03");
|
|
||||||
assert.strictEqual(result.locked, 0);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
@@ -98,8 +88,6 @@ describe("getVideoLabelHash", () => {
|
|||||||
validateLabel(data, videoID);
|
validateLabel(data, videoID);
|
||||||
const result = data[0].segments[0];
|
const result = data[0].segments[0];
|
||||||
assert.strictEqual(result.category, "sponsor");
|
assert.strictEqual(result.category, "sponsor");
|
||||||
assert.strictEqual(result.UUID, "labelhash04");
|
|
||||||
assert.strictEqual(result.locked, 0);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
@@ -114,8 +102,6 @@ describe("getVideoLabelHash", () => {
|
|||||||
validateLabel(data, videoID);
|
validateLabel(data, videoID);
|
||||||
const result = data[0].segments[0];
|
const result = data[0].segments[0];
|
||||||
assert.strictEqual(result.category, "selfpromo");
|
assert.strictEqual(result.category, "selfpromo");
|
||||||
assert.strictEqual(result.UUID, "labelhash09");
|
|
||||||
assert.strictEqual(result.locked, 1);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
@@ -130,8 +116,6 @@ describe("getVideoLabelHash", () => {
|
|||||||
validateLabel(data, videoID);
|
validateLabel(data, videoID);
|
||||||
const result = data[0].segments[0];
|
const result = data[0].segments[0];
|
||||||
assert.strictEqual(result.category, "exclusive_access");
|
assert.strictEqual(result.category, "exclusive_access");
|
||||||
assert.strictEqual(result.UUID, "labelhash14");
|
|
||||||
assert.strictEqual(result.locked, 0);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
|
|||||||
@@ -31,10 +31,6 @@ describe("getVideoLabels", () => {
|
|||||||
|
|
||||||
function validateLabel(result: any) {
|
function validateLabel(result: any) {
|
||||||
assert.strictEqual(result.length, 1);
|
assert.strictEqual(result.length, 1);
|
||||||
assert.strictEqual(result[0].segment[0], 0);
|
|
||||||
assert.strictEqual(result[0].segment[1], 0);
|
|
||||||
assert.strictEqual(result[0].actionType, "full");
|
|
||||||
assert.strictEqual(result[0].userID, "labeluser");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const get = (videoID: string) => client.get(endpoint, { params: { videoID } });
|
const get = (videoID: string) => client.get(endpoint, { params: { videoID } });
|
||||||
@@ -46,8 +42,6 @@ describe("getVideoLabels", () => {
|
|||||||
const data = res.data;
|
const data = res.data;
|
||||||
validateLabel(data);
|
validateLabel(data);
|
||||||
assert.strictEqual(data[0].category, "sponsor");
|
assert.strictEqual(data[0].category, "sponsor");
|
||||||
assert.strictEqual(data[0].UUID, "label01");
|
|
||||||
assert.strictEqual(data[0].locked, 0);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
@@ -60,8 +54,6 @@ describe("getVideoLabels", () => {
|
|||||||
const data = res.data;
|
const data = res.data;
|
||||||
validateLabel(data);
|
validateLabel(data);
|
||||||
assert.strictEqual(data[0].category, "exclusive_access");
|
assert.strictEqual(data[0].category, "exclusive_access");
|
||||||
assert.strictEqual(data[0].UUID, "label02");
|
|
||||||
assert.strictEqual(data[0].locked, 0);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
@@ -74,8 +66,6 @@ describe("getVideoLabels", () => {
|
|||||||
const data = res.data;
|
const data = res.data;
|
||||||
validateLabel(data);
|
validateLabel(data);
|
||||||
assert.strictEqual(data[0].category, "selfpromo");
|
assert.strictEqual(data[0].category, "selfpromo");
|
||||||
assert.strictEqual(data[0].UUID, "label03");
|
|
||||||
assert.strictEqual(data[0].locked, 0);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
@@ -88,8 +78,6 @@ describe("getVideoLabels", () => {
|
|||||||
const data = res.data;
|
const data = res.data;
|
||||||
validateLabel(data);
|
validateLabel(data);
|
||||||
assert.strictEqual(data[0].category, "sponsor");
|
assert.strictEqual(data[0].category, "sponsor");
|
||||||
assert.strictEqual(data[0].UUID, "label04");
|
|
||||||
assert.strictEqual(data[0].locked, 0);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
@@ -102,8 +90,6 @@ describe("getVideoLabels", () => {
|
|||||||
const data = res.data;
|
const data = res.data;
|
||||||
validateLabel(data);
|
validateLabel(data);
|
||||||
assert.strictEqual(data[0].category, "selfpromo");
|
assert.strictEqual(data[0].category, "selfpromo");
|
||||||
assert.strictEqual(data[0].UUID, "label09");
|
|
||||||
assert.strictEqual(data[0].locked, 1);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
@@ -116,8 +102,6 @@ describe("getVideoLabels", () => {
|
|||||||
const data = res.data;
|
const data = res.data;
|
||||||
validateLabel(data);
|
validateLabel(data);
|
||||||
assert.strictEqual(data[0].category, "exclusive_access");
|
assert.strictEqual(data[0].category, "exclusive_access");
|
||||||
assert.strictEqual(data[0].UUID, "label14");
|
|
||||||
assert.strictEqual(data[0].locked, 0);
|
|
||||||
done();
|
done();
|
||||||
})
|
})
|
||||||
.catch(err => done(err));
|
.catch(err => done(err));
|
||||||
|
|||||||
Reference in New Issue
Block a user