From 4929467016f96b7610a1d1f9bc27f59b0796cfb5 Mon Sep 17 00:00:00 2001 From: Mar0xy Date: Fri, 17 Nov 2023 20:10:16 +0100 Subject: upd: import own replies to own tweets --- .../processors/ImportNotesProcessorService.ts | 35 +++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'packages/backend/src/queue/processors') diff --git a/packages/backend/src/queue/processors/ImportNotesProcessorService.ts b/packages/backend/src/queue/processors/ImportNotesProcessorService.ts index 58f10998bf..892d97ad5b 100644 --- a/packages/backend/src/queue/processors/ImportNotesProcessorService.ts +++ b/packages/backend/src/queue/processors/ImportNotesProcessorService.ts @@ -93,6 +93,29 @@ export class ImportNotesProcessorService { return notesTree; } + @bindThis + private async recreateTwitChain(arr: any[]) { + type TweetsMap = { + [id: string]: any; + }; + const tweetsTree: any[] = []; + const lookup: TweetsMap = {}; + for await (const tweet of arr) { + lookup[`${tweet.id_str}`] = tweet; + tweet.replies = []; + let parent = null; + + if (!tweet.in_reply_to_status_id_str) { + tweetsTree.push(tweet); + } else { + parent = lookup[`${tweet.in_reply_to_status_id_str}`]; + } + + if (parent) parent.replies.push(tweet); + } + return tweetsTree; + } + @bindThis private isIterable(obj: any) { if (obj == null) { @@ -155,7 +178,10 @@ export class ImportNotesProcessorService { const tweets = Object.keys(fakeWindow.window.YTD.tweets.part0).reduce((m, key, i, obj) => { return m.concat(fakeWindow.window.YTD.tweets.part0[key].tweet); }, []); - this.queueService.createImportTweetsToDbJob(job.data.user, tweets); + // Due to the way twitter outputs the tweets the entire array needs to be reversed for the recreate function. + const reversedTweets = tweets.reverse(); + const processedTweets = await this.recreateTwitChain(reversedTweets); + this.queueService.createImportTweetsToDbJob(job.data.user, processedTweets, null); } finally { cleanup(); } @@ -430,14 +456,14 @@ export class ImportNotesProcessorService { } @bindThis - public async processTwitterDb(job: Bull.Job): Promise { + public async processTwitterDb(job: Bull.Job): Promise { const tweet = job.data.target; const user = await this.usersRepository.findOneBy({ id: job.data.user.id }); if (user == null) { return; } - if (tweet.in_reply_to_status_id_str) return; + const parentNote = job.data.note ? await this.notesRepository.findOneBy({ id: job.data.note }) : null; async function replaceTwitterUrls(full_text: string, urls: any) { let full_textedit = full_text; @@ -516,7 +542,8 @@ export class ImportNotesProcessorService { } } } - await this.noteCreateService.import(user, { createdAt: date, text: text, files: files }); + const createdNote = await this.noteCreateService.import(user, { createdAt: date, reply: parentNote, text: text, files: files }); + if (tweet.replies) this.queueService.createImportTweetsToDbJob(user, tweet.replies, createdNote.id); } catch (e) { this.logger.warn(`Error: ${e}`); } -- cgit v1.2.3-freya