core: bug fix

This commit is contained in:
undefined committed 2021-10-17 17:37:25 +08:00
1 parent ac66e3d7a2
commit f7f977293c
6 files changed
+13 -18

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "hydrooj", "name": "hydrooj",
"version": "2.39.27", "version": "2.39.28",
"bin": "bin/hydrooj.js", "bin": "bin/hydrooj.js",
"main": "src/loader", "main": "src/loader",
"module": "src/loader", "module": "src/loader",
+4 -8
View File
@@ -85,11 +85,9 @@ async function syzojSync(info) {
filenameList: body.testData.map((node) => node.filename), filenameList: body.testData.map((node) => node.filename),
}); });
if (r.body.error) throw new Error(r.body.error.message || r.body.error); if (r.body.error) throw new Error(r.body.error.message || r.body.error);
const urls = {}; for (const f of r.body.downloadInfo) {
for (const t of r.body.downloadInfo) urls[t.filename] = t.downloadUrl;
for (const f of body.testData) {
const p = new PassThrough(); const p = new PassThrough();
superagent.get(urls[f.filename]).pipe(p); superagent.get(f.downloadUrl).pipe(p);
// eslint-disable-next-line no-await-in-loop // eslint-disable-next-line no-await-in-loop
await problem.addTestdata(domainId, docId, rename[f.filename] || f.filename, p); await problem.addTestdata(domainId, docId, rename[f.filename] || f.filename, p);
} }
@@ -99,12 +97,10 @@ async function syzojSync(info) {
type: 'AdditionalFile', type: 'AdditionalFile',
filenameList: body.additionalFiles.map((node) => node.filename), filenameList: body.additionalFiles.map((node) => node.filename),
}); });
const aurls = {};
if (a.body.error) throw new Error(a.body.error.message || a.body.error); if (a.body.error) throw new Error(a.body.error.message || a.body.error);
for (const t of a.body.downloadInfo) aurls[t.filename] = t.downloadUrl; for (const f of a.body.downloadInfo) {
for (const f of body.additionalFiles) {
const p = new PassThrough(); const p = new PassThrough();
superagent.get(aurls[f.filename]).pipe(p); superagent.get(f.downloadUrl).pipe(p);
// eslint-disable-next-line no-await-in-loop // eslint-disable-next-line no-await-in-loop
await problem.addAdditionalFile(domainId, docId, f.filename, p); await problem.addAdditionalFile(domainId, docId, f.filename, p);
} }
+1
View File
@@ -226,6 +226,7 @@ export class ProblemDetailHandler extends ProblemHandler {
this.response.body = { this.response.body = {
pdoc: this.pdoc, pdoc: this.pdoc,
udoc: this.udoc, udoc: this.udoc,
psdoc: this.psdoc,
title: this.pdoc.title, title: this.pdoc.title,
}; };
this.extraTitleContent = this.pdoc.title; this.extraTitleContent = this.pdoc.title;
-1
View File
@@ -200,7 +200,6 @@ SystemSetting(
Setting('setting_basic', 'default.priv', builtin.PRIV.PRIV_DEFAULT, 'number', 'default.priv', 'Default Privilege', FLAG_PRO), Setting('setting_basic', 'default.priv', builtin.PRIV.PRIV_DEFAULT, 'number', 'default.priv', 'Default Privilege', FLAG_PRO),
Setting('setting_basic', 'discussion.nodes', builtin.DEFAULT_NODES, 'yaml', 'discussion.nodes', 'Discussion Nodes'), Setting('setting_basic', 'discussion.nodes', builtin.DEFAULT_NODES, 'yaml', 'discussion.nodes', 'Discussion Nodes'),
Setting('setting_basic', 'problem.categories', builtin.CATEGORIES, 'yaml', 'problem.categories', 'Problem Categories'), Setting('setting_basic', 'problem.categories', builtin.CATEGORIES, 'yaml', 'problem.categories', 'Problem Categories'),
Setting('setting_basic', 'rank.uidIgnore', '', 'text', 'rank.uidIgnore', 'Ignored uids for ranking'),
Setting('setting_basic', 'pagination.problem', 100, 'number', 'pagination.problem', 'Problems per page'), Setting('setting_basic', 'pagination.problem', 100, 'number', 'pagination.problem', 'Problems per page'),
Setting('setting_basic', 'pagination.contest', 20, 'number', 'pagination.contest', 'Contests per page'), Setting('setting_basic', 'pagination.contest', 20, 'number', 'pagination.contest', 'Contests per page'),
Setting('setting_basic', 'pagination.discussion', 50, 'number', 'pagination.discussion', 'Discussions per page'), Setting('setting_basic', 'pagination.discussion', 50, 'number', 'pagination.discussion', 'Discussions per page'),
+2 -8
View File
@@ -29,12 +29,7 @@ async function runProblem(...arg: any[]) {
{ {
docId: pdoc.docId, docId: pdoc.docId,
rid: { $ne: null }, rid: { $ne: null },
uid: { uid: { $ne: pdoc.owner },
$nin: [
pdoc.owner,
...system.get('rank.uidIgnore').split(',').map((i) => +i).filter((i) => i),
],
},
}, },
).count() + 99) / 100, ).count() + 99) / 100,
); );
@@ -68,7 +63,6 @@ async function runContest(...arg: any[]) {
const cursor = contest.getMultiStatus(tdoc.domainId, { const cursor = contest.getMultiStatus(tdoc.domainId, {
docId: tdoc.docId, docId: tdoc.docId,
journal: { $ne: null }, journal: { $ne: null },
uid: { $nin: system.get('rank.uidIgnore').split(',').map((i) => +i).filter((i) => i) },
}).sort(contest.RULES[tdoc.rule].statusSort); }).sort(contest.RULES[tdoc.rule].statusSort);
if (!await cursor.count()) return; if (!await cursor.count()) return;
const [rankedTsdocs] = await contest.RULES[tdoc.rule].ranked(tdoc, cursor); const [rankedTsdocs] = await contest.RULES[tdoc.rule].ranked(tdoc, cursor);
@@ -166,7 +160,7 @@ async function runInDomain(id: string, isSub: boolean, report: Function) {
const tasks = []; const tasks = [];
async function update(uid: number, rp: number) { async function update(uid: number, rp: number) {
const udoc = await UserModel.getById(id, +uid); const udoc = await UserModel.getById(id, +uid);
const $upd: any = { $set: { rp } }; const $upd: any = { $set: { rp: Math.max(0, rp) } };
if (udoc.hasPriv(PRIV.PRIV_USER_PROFILE)) await domain.updateUserInDomain(id, +uid, $upd); if (udoc.hasPriv(PRIV.PRIV_USER_PROFILE)) await domain.updateUserInDomain(id, +uid, $upd);
} }
for (const uid in udict) tasks.push(update(+uid, udict[uid] + (deltaudict[uid] || 0))); for (const uid in udict) tasks.push(update(+uid, udict[uid] + (deltaudict[uid] || 0)));
+5
View File
@@ -557,6 +557,11 @@ const scripts: UpgradeScript[] = [
await db.collection('domain').updateMany({}, { $unset: { pidCounter: '' } }); await db.collection('domain').updateMany({}, { $unset: { pidCounter: '' } });
return true; return true;
}, },
async function _50_51() {
const _FRESH_INSTALL_IGNORE = 1;
await db.collection('domain.user').updateMany({}, { $unset: { ratingHistory: '' } });
return true;
},
]; ];
export default scripts; export default scripts;