summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-10-14 10:04:13 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-10-14 10:04:13 +0900
commit061e389340a7e5683be2ba0da4e1a1048597ccb6 (patch)
tree7f2466ab32877668b1bd14e6e4357fac81cff482 /packages/backend/src
parentenhance(frontend): TLの返信表示オプションを記憶するように (diff)
downloadsharkey-061e389340a7e5683be2ba0da4e1a1048597ccb6.tar.gz
sharkey-061e389340a7e5683be2ba0da4e1a1048597ccb6.tar.bz2
sharkey-061e389340a7e5683be2ba0da4e1a1048597ccb6.zip
perf(backend): nyaizeを投稿時にやる
Resolve #12030
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/core/NoteCreateService.ts25
-rw-r--r--packages/backend/src/core/entities/NoteEntityService.ts21
2 files changed, 24 insertions, 22 deletions
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index 64d2880ba1..4496be3e7d 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -55,6 +55,7 @@ import { MetaService } from '@/core/MetaService.js';
import { SearchService } from '@/core/SearchService.js';
import { FeaturedService } from '@/core/FeaturedService.js';
import { RedisTimelineService } from '@/core/RedisTimelineService.js';
+import { nyaize } from '@/misc/nyaize.js';
type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
@@ -223,7 +224,10 @@ export class NoteCreateService implements OnApplicationShutdown {
host: MiUser['host'];
createdAt: MiUser['createdAt'];
isBot: MiUser['isBot'];
+ isCat: MiUser['isCat'];
}, data: Option, silent = false): Promise<MiNote> {
+ let patsedText: mfm.MfmNode[] | null = null;
+
// チャンネル外にリプライしたら対象のスコープに合わせる
// (クライアントサイドでやっても良い処理だと思うけどとりあえずサーバーサイドで)
if (data.reply && data.channel && data.reply.channelId !== data.channel.id) {
@@ -302,6 +306,25 @@ export class NoteCreateService implements OnApplicationShutdown {
data.text = data.text.slice(0, DB_MAX_NOTE_TEXT_LENGTH);
}
data.text = data.text.trim();
+
+ if (user.isCat) {
+ patsedText = patsedText ?? mfm.parse(data.text);
+ function nyaizeNode(node: mfm.MfmNode) {
+ if (node.type === 'quote') return;
+ if (node.type === 'text') {
+ node.props.text = nyaize(node.props.text);
+ }
+ if (node.children) {
+ for (const child of node.children) {
+ nyaizeNode(child);
+ }
+ }
+ }
+ for (const node of patsedText) {
+ nyaizeNode(node);
+ }
+ data.text = mfm.toString(patsedText);
+ }
} else {
data.text = null;
}
@@ -312,7 +335,7 @@ export class NoteCreateService implements OnApplicationShutdown {
// Parse MFM if needed
if (!tags || !emojis || !mentionedUsers) {
- const tokens = data.text ? mfm.parse(data.text)! : [];
+ const tokens = patsedText ?? (data.text ? mfm.parse(data.text)! : []);
const cwTokens = data.cw ? mfm.parse(data.cw)! : [];
const choiceTokens = data.poll && data.poll.choices
? concat(data.poll.choices.map(choice => mfm.parse(choice)!))
diff --git a/packages/backend/src/core/entities/NoteEntityService.ts b/packages/backend/src/core/entities/NoteEntityService.ts
index abe4aafd6e..25132977f2 100644
--- a/packages/backend/src/core/entities/NoteEntityService.ts
+++ b/packages/backend/src/core/entities/NoteEntityService.ts
@@ -5,11 +5,9 @@
import { Inject, Injectable } from '@nestjs/common';
import { In } from 'typeorm';
-import * as mfm from 'mfm-js';
import { ModuleRef } from '@nestjs/core';
import { DI } from '@/di-symbols.js';
import type { Packed } from '@/misc/json-schema.js';
-import { nyaize } from '@/misc/nyaize.js';
import { awaitAll } from '@/misc/prelude/await-all.js';
import type { MiUser } from '@/models/User.js';
import type { MiNote } from '@/models/Note.js';
@@ -362,25 +360,6 @@ export class NoteEntityService implements OnModuleInit {
} : {}),
});
- if (packed.user.isCat && packed.text) {
- const tokens = packed.text ? mfm.parse(packed.text) : [];
- function nyaizeNode(node: mfm.MfmNode) {
- if (node.type === 'quote') return;
- if (node.type === 'text') {
- node.props.text = nyaize(node.props.text);
- }
- if (node.children) {
- for (const child of node.children) {
- nyaizeNode(child);
- }
- }
- }
- for (const node of tokens) {
- nyaizeNode(node);
- }
- packed.text = mfm.toString(tokens);
- }
-
if (!opts.skipHide) {
await this.hideNote(packed, meId);
}