summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2023-11-30 13:24:57 +0000
committerdakkar <dakkar@thenautilus.net>2023-11-30 13:26:55 +0000
commitc958d935e4e5b33b28c242a0de2c4319859f8541 (patch)
treea5d5b2498708d00a8b204b81d55767150cdb3002 /packages/backend/src
parentfix chaining for Mastodon notes (diff)
downloadsharkey-c958d935e4e5b33b28c242a0de2c4319859f8541.tar.gz
sharkey-c958d935e4e5b33b28c242a0de2c4319859f8541.tar.bz2
sharkey-c958d935e4e5b33b28c242a0de2c4319859f8541.zip
thread Pleroma imports as well
I have _not_ tested this, but it should work fine, those exports are the same shape as Mastodon's
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/core/QueueService.ts4
-rw-r--r--packages/backend/src/queue/processors/ImportNotesProcessorService.ts25
-rw-r--r--packages/backend/src/queue/types.ts2
3 files changed, 19 insertions, 12 deletions
diff --git a/packages/backend/src/core/QueueService.ts b/packages/backend/src/core/QueueService.ts
index 6acdc0ad89..2ee61eb549 100644
--- a/packages/backend/src/core/QueueService.ts
+++ b/packages/backend/src/core/QueueService.ts
@@ -284,8 +284,8 @@ export class QueueService {
}
@bindThis
- public createImportPleroToDbJob(user: ThinUser, targets: string[]) {
- const jobs = targets.map(rel => this.generateToDbJobData('importPleroToDb', { user, target: rel }));
+ public createImportPleroToDbJob(user: ThinUser, targets: string[], note: MiNote['id'] | null) {
+ const jobs = targets.map(rel => this.generateToDbJobData('importPleroToDb', { user, target: rel, note }));
return this.dbQueue.addBulk(jobs);
}
diff --git a/packages/backend/src/queue/processors/ImportNotesProcessorService.ts b/packages/backend/src/queue/processors/ImportNotesProcessorService.ts
index b9a3645f6d..552b69d92d 100644
--- a/packages/backend/src/queue/processors/ImportNotesProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportNotesProcessorService.ts
@@ -268,7 +268,8 @@ export class ImportNotesProcessorService {
if (isPleroma) {
const outboxJson = fs.readFileSync(outputPath + '/outbox.json', 'utf-8');
const outbox = JSON.parse(outboxJson);
- this.queueService.createImportPleroToDbJob(job.data.user, outbox.orderedItems.filter((x: any) => x.type === 'Create' && x.object.type === 'Note'));
+ const processedToots = await this.recreateChain(['object', 'id'], ['object', 'inReplyTo'], outbox.orderedItems.filter((x: any) => x.type === 'Create' && x.object.type === 'Note'), true);
+ this.queueService.createImportPleroToDbJob(job.data.user, processedToots, null);
} else {
const outboxJson = fs.readFileSync(outputPath + '/outbox.json', 'utf-8');
const outbox = JSON.parse(outboxJson);
@@ -421,13 +422,15 @@ export class ImportNotesProcessorService {
}
@bindThis
- public async processPleroToDb(job: Bull.Job<DbNoteImportToDbJobData>): Promise<void> {
+ public async processPleroToDb(job: Bull.Job<DbNoteWithParentImportToDbJobData>): Promise<void> {
const post = job.data.target;
const user = await this.usersRepository.findOneBy({ id: job.data.user.id });
if (user == null) {
return;
}
+ if (post.directMessage) return;
+
const date = new Date(post.object.published);
let text = undefined;
const files: MiDriveFile[] = [];
@@ -437,15 +440,18 @@ export class ImportNotesProcessorService {
if (folder == null) return;
if (post.object.inReplyTo != null) {
- try {
- reply = await this.apNoteService.resolveNote(post.object.inReplyTo);
- } catch (error) {
- reply = null;
+ const parentNote = job.data.note ? await this.notesRepository.findOneBy({ id: job.data.note }) : null;
+ if (parentNote) {
+ reply = parentNote;
+ } else {
+ try {
+ reply = await this.apNoteService.resolveNote(post.object.inReplyTo);
+ } catch (error) {
+ reply = null;
+ }
}
}
- if (post.directMessage) return;
-
const hashtags = extractApHashtagObjects(post.object.tag).map((x) => x.name).filter((x): x is string => x != null);
try {
@@ -489,7 +495,8 @@ export class ImportNotesProcessorService {
}
}
- await this.noteCreateService.import(user, { createdAt: date, text: text, files: files, apMentions: new Array(0), cw: post.object.sensitive ? post.object.summary : null, reply: reply });
+ const createdNote = await this.noteCreateService.import(user, { createdAt: date, text: text, files: files, apMentions: new Array(0), cw: post.object.sensitive ? post.object.summary : null, reply: reply });
+ if (post.childNotes) this.queueService.createImportPleroToDbJob(user, post.childNotes, createdNote.id);
}
@bindThis
diff --git a/packages/backend/src/queue/types.ts b/packages/backend/src/queue/types.ts
index 4404357549..432b3d364f 100644
--- a/packages/backend/src/queue/types.ts
+++ b/packages/backend/src/queue/types.ts
@@ -54,7 +54,7 @@ export type DbJobMap = {
importIGToDb: DbNoteImportToDbJobData;
importFBToDb: DbNoteImportToDbJobData;
importMastoToDb: DbNoteWithParentImportToDbJobData;
- importPleroToDb: DbNoteImportToDbJobData;
+ importPleroToDb: DbNoteWithParentImportToDbJobData;
importKeyNotesToDb: DbNoteWithParentImportToDbJobData;
importFollowing: DbUserImportJobData;
importFollowingToDb: DbUserImportToDbJobData;