core: import: support using extracted folder

pull/557/head
undefined 2 years ago
parent dc76742e30
commit 275e82f0e5
No known key found for this signature in database

@ -407,19 +407,26 @@ export class ProblemModel {
} }
static async import(domainId: string, filepath: string, operator: number) { static async import(domainId: string, filepath: string, operator: number) {
const tmpdir = path.join(os.tmpdir(), 'hydro', `${Math.random()}.import`); let tmpdir = '';
let zip: AdmZip; if (filepath.endsWith('.zip')) {
try { tmpdir = path.join(os.tmpdir(), 'hydro', `${Math.random()}.import`);
zip = new AdmZip(filepath); let zip: AdmZip;
} catch (e) { try {
throw new ValidationError('zip', null, e.message); zip = new AdmZip(filepath);
} } catch (e) {
await new Promise((resolve, reject) => { throw new ValidationError('zip', null, e.message);
zip.extractAllToAsync(tmpdir, true, (err) => { }
if (err) reject(err); await new Promise((resolve, reject) => {
resolve(null); zip.extractAllToAsync(tmpdir, true, (err) => {
if (err) reject(err);
resolve(null);
});
}); });
}); } else if (fs.statSync(filepath).isDirectory()) {
tmpdir = filepath;
} else {
throw new ValidationError('file', null, 'Invalid file');
}
try { try {
const problems = await fs.readdir(tmpdir, { withFileTypes: true }); const problems = await fs.readdir(tmpdir, { withFileTypes: true });
for (const p of problems) { for (const p of problems) {

Loading…
Cancel
Save