mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-25 17:08:35 +03:00
Merge branch 'master' of https://github.com/ajayyy/SponsorBlockServer into searchSegments
This commit is contained in:
@@ -23,7 +23,7 @@ export function addUnlistedVideo(req: Request, res: Response): Response {
|
||||
const timeSubmitted = Date.now();
|
||||
db.prepare("run", `INSERT INTO "unlistedVideos" ("videoID", "year", "views", "channelID", "timeSubmitted") values (?, ?, ?, ?, ?)`, [videoID, year, views, channelID, timeSubmitted]);
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
|
||||
|
||||
@@ -215,7 +215,7 @@ async function queueDump(): Promise<void> {
|
||||
|
||||
lastUpdate = startTime;
|
||||
} catch(e) {
|
||||
Logger.error(e);
|
||||
Logger.error(e as string);
|
||||
} finally {
|
||||
updateQueued = false;
|
||||
updateRunning = false;
|
||||
|
||||
@@ -22,7 +22,7 @@ export async function getIsUserVIP(req: Request, res: Response): Promise<Respons
|
||||
vip: vipState,
|
||||
});
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ export async function getLockCategories(req: Request, res: Response): Promise<Re
|
||||
categories
|
||||
});
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ export async function getLockCategoriesByHash(req: Request, res: Response): Prom
|
||||
// merge all locks
|
||||
return res.send(mergeLocks(lockedRows));
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import { QueryCacher } from "../utils/queryCacher";
|
||||
import { getReputation } from "../utils/reputation";
|
||||
|
||||
|
||||
async function prepareCategorySegments(req: Request, videoID: VideoID, category: Category, segments: DBSegment[],cache: SegmentCache = {shadowHiddenSegmentIPs: {}}): Promise<Segment[]> {
|
||||
async function prepareCategorySegments(req: Request, videoID: VideoID, category: Category, segments: DBSegment[], cache: SegmentCache = {shadowHiddenSegmentIPs: {}}): Promise<Segment[]> {
|
||||
const shouldFilter: boolean[] = await Promise.all(segments.map(async (segment) => {
|
||||
if (segment.votes < -1 && !segment.required) {
|
||||
return false; //too untrustworthy, just ignore it
|
||||
@@ -26,19 +26,19 @@ async function prepareCategorySegments(req: Request, videoID: VideoID, category:
|
||||
|
||||
if (cache.shadowHiddenSegmentIPs[videoID] === undefined) cache.shadowHiddenSegmentIPs[videoID] = {};
|
||||
if (cache.shadowHiddenSegmentIPs[videoID][segment.timeSubmitted] === undefined) {
|
||||
cache.shadowHiddenSegmentIPs[videoID][segment.timeSubmitted] = await privateDB.prepare("all", 'SELECT "hashedIP" FROM "sponsorTimes" WHERE "videoID" = ? AND "timeSubmitted" = ?',
|
||||
cache.shadowHiddenSegmentIPs[videoID][segment.timeSubmitted] = await privateDB.prepare("all", 'SELECT "hashedIP" FROM "sponsorTimes" WHERE "videoID" = ? AND "timeSubmitted" = ?',
|
||||
[videoID, segment.timeSubmitted]) as { hashedIP: HashedIP }[];
|
||||
}
|
||||
|
||||
//if this isn't their ip, don't send it to them
|
||||
return cache.shadowHiddenSegmentIPs[videoID][segment.timeSubmitted].some((shadowHiddenSegment) => {
|
||||
return cache.shadowHiddenSegmentIPs[videoID][segment.timeSubmitted]?.some((shadowHiddenSegment) => {
|
||||
if (cache.userHashedIP === undefined) {
|
||||
//hash the IP only if it's strictly necessary
|
||||
cache.userHashedIP = getHash((getIP(req) + config.globalSalt) as IPAddress);
|
||||
}
|
||||
|
||||
return shadowHiddenSegment.hashedIP === cache.userHashedIP;
|
||||
});
|
||||
}) ?? false;
|
||||
}));
|
||||
|
||||
const filteredSegments = segments.filter((_, index) => shouldFilter[index]);
|
||||
@@ -80,7 +80,7 @@ async function getSegmentsByVideoID(req: Request, videoID: VideoID, categories:
|
||||
return segments;
|
||||
} catch (err) {
|
||||
if (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -125,10 +125,8 @@ async function getSegmentsByHash(req: Request, hashedVideoIDPrefix: VideoIDHash,
|
||||
|
||||
return segments;
|
||||
} catch (err) {
|
||||
if (err) {
|
||||
Logger.error(err);
|
||||
return null;
|
||||
}
|
||||
Logger.error(err as string);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ export async function getUsername(req: Request, res: Response): Promise<Response
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ export async function getViewsForUser(req: Request, res: Response): Promise<Resp
|
||||
return res.sendStatus(404);
|
||||
}
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ export async function postLockCategories(req: Request, res: Response): Promise<s
|
||||
await db.prepare("run", `INSERT INTO "lockCategories" ("videoID", "userID", "category", "hashedVideoID", "reason") VALUES(?, ?, ?, ?, ?)`, [videoID, userID, category, hashedVideoID, reason]);
|
||||
} catch (err) {
|
||||
Logger.error(`Error submitting 'lockCategories' marker for category '${category}' for video '${videoID}'`);
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
res.status(500).json({
|
||||
message: "Internal Server Error: Could not write marker to the database.",
|
||||
});
|
||||
@@ -89,7 +89,7 @@ export async function postLockCategories(req: Request, res: Response): Promise<s
|
||||
[reason, userID, videoID, category]);
|
||||
} catch (err) {
|
||||
Logger.error(`Error submitting 'lockCategories' marker for category '${category}' for video '${videoID}'`);
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
res.status(500).json({
|
||||
message: "Internal Server Error: Could not write marker to the database.",
|
||||
});
|
||||
|
||||
@@ -29,7 +29,7 @@ export async function postPurgeAllSegments(req: Request, res: Response): Promise
|
||||
await db.prepare("run", `UPDATE "sponsorTimes" SET "hidden" = 1 WHERE "videoID" = ?`, [videoID]);
|
||||
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
return res.sendStatus(200);
|
||||
|
||||
@@ -92,7 +92,7 @@ export async function postSegmentShift(req: Request, res: Response): Promise<Res
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
|
||||
|
||||
@@ -390,9 +390,9 @@ async function checkEachSegmentValid(userID: string, videoID: VideoID
|
||||
return { pass: false, errorMessage: "One of your segments times are invalid (too short, startTime before endTime, etc.)", errorCode: 400};
|
||||
}
|
||||
|
||||
// Check for POI segments before 1 second
|
||||
if (getCategoryActionType(segments[i].category) === CategoryActionType.POI && startTime < 1) {
|
||||
return { pass: false, errorMessage: "POI must be after 1 second", errorCode: 400};
|
||||
// Check for POI segments before some seconds
|
||||
if (!isVIP && getCategoryActionType(segments[i].category) === CategoryActionType.POI && startTime < config.poiMinimumStartTime) {
|
||||
return { pass: false, errorMessage: `POI cannot be that early`, errorCode: 400};
|
||||
}
|
||||
|
||||
if (!isVIP && segments[i].category === "sponsor" && Math.abs(startTime - endTime) < 1) {
|
||||
@@ -684,7 +684,7 @@ export async function postSkipSegments(req: Request, res: Response): Promise<Res
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ export async function setUsername(req: Request, res: Response): Promise<Response
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
Logger.error(error);
|
||||
Logger.error(error as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ export async function setUsername(req: Request, res: Response): Promise<Response
|
||||
|
||||
return res.sendStatus(200);
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.sendStatus(500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -458,7 +458,7 @@ export async function voteOnSponsorTime(req: Request, res: Response): Promise<Re
|
||||
}
|
||||
return res.status(finalResponse.finalStatus).send(finalResponse.finalMessage ?? undefined);
|
||||
} catch (err) {
|
||||
Logger.error(err);
|
||||
Logger.error(err as string);
|
||||
return res.status(500).json({error: "Internal error creating segment vote"});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user