This commit is contained in:
syuilo 2021-12-12 06:21:48 +09:00
parent 6d918f195a
commit c599a304c8
2 changed files with 37 additions and 64 deletions

View file

@ -39,8 +39,9 @@ export async function exportCustomEmojis(job: Bull.Job, done: () => void): Promi
const metaStream = fs.createWriteStream(metaPath, { flags: 'a' }); const metaStream = fs.createWriteStream(metaPath, { flags: 'a' });
await new Promise<void>((res, rej) => { const writeMeta = (text: string): Promise<void> => {
metaStream.write('[', err => { return new Promise<void>((res, rej) => {
metaStream.write(text, err => {
if (err) { if (err) {
logger.error(err); logger.error(err);
rej(err); rej(err);
@ -49,6 +50,9 @@ export async function exportCustomEmojis(job: Bull.Job, done: () => void): Promi
} }
}); });
}); });
};
await writeMeta('[');
const customEmojis = await Emojis.find({ const customEmojis = await Emojis.find({
where: { where: {
@ -72,34 +76,17 @@ export async function exportCustomEmojis(job: Bull.Job, done: () => void): Promi
logger.error(e); logger.error(e);
} }
await new Promise<void>((res, rej) => {
const content = JSON.stringify({ const content = JSON.stringify({
id: exportId, id: exportId,
downloaded: downloaded, downloaded: downloaded,
emoji: emoji, emoji: emoji,
}); });
const isFirst = customEmojis.indexOf(emoji) === 0; const isFirst = customEmojis.indexOf(emoji) === 0;
metaStream.write(isFirst ? content : ',\n' + content, err => {
if (err) { await writeMeta(isFirst ? content : ',\n' + content);
logger.error(err);
rej(err);
} else {
res();
}
});
});
} }
await new Promise<void>((res, rej) => { await writeMeta(']');
metaStream.write(']', err => {
if (err) {
logger.error(err);
rej(err);
} else {
res();
}
});
});
metaStream.end(); metaStream.end();

View file

@ -34,8 +34,9 @@ export async function exportNotes(job: Bull.Job<DbUserJobData>, done: any): Prom
const stream = fs.createWriteStream(path, { flags: 'a' }); const stream = fs.createWriteStream(path, { flags: 'a' });
await new Promise<void>((res, rej) => { const write = (text: string): Promise<void> => {
stream.write('[', err => { return new Promise<void>((res, rej) => {
stream.write(text, err => {
if (err) { if (err) {
logger.error(err); logger.error(err);
rej(err); rej(err);
@ -44,6 +45,9 @@ export async function exportNotes(job: Bull.Job<DbUserJobData>, done: any): Prom
} }
}); });
}); });
};
await write('[');
let exportedNotesCount = 0; let exportedNotesCount = 0;
let cursor: Note['id'] | null = null; let cursor: Note['id'] | null = null;
@ -73,17 +77,8 @@ export async function exportNotes(job: Bull.Job<DbUserJobData>, done: any): Prom
poll = await Polls.findOneOrFail({ noteId: note.id }); poll = await Polls.findOneOrFail({ noteId: note.id });
} }
const content = JSON.stringify(serialize(note, poll)); const content = JSON.stringify(serialize(note, poll));
await new Promise<void>((res, rej) => {
const isFirst = exportedNotesCount === 0; const isFirst = exportedNotesCount === 0;
stream.write(isFirst ? content : ',\n' + content, err => { await write(isFirst ? content : ',\n' + content);
if (err) {
logger.error(err);
rej(err);
} else {
res();
}
});
});
exportedNotesCount++; exportedNotesCount++;
} }
@ -94,16 +89,7 @@ export async function exportNotes(job: Bull.Job<DbUserJobData>, done: any): Prom
job.progress(exportedNotesCount / total); job.progress(exportedNotesCount / total);
} }
await new Promise<void>((res, rej) => { await write(']');
stream.write(']', err => {
if (err) {
logger.error(err);
rej(err);
} else {
res();
}
});
});
stream.end(); stream.end();
logger.succ(`Exported to: ${path}`); logger.succ(`Exported to: ${path}`);