summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/ReactionService.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-04-06 11:14:43 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-04-06 11:14:43 +0900
commit73203a3d72b355e3c230c46771292ff9520675c0 (patch)
tree5c6a2861d3c1fa65392e583229985d7cdc1b03ef /packages/backend/src/core/ReactionService.ts
parentUpdate CHANGELOG.md (diff)
downloadmisskey-73203a3d72b355e3c230c46771292ff9520675c0.tar.gz
misskey-73203a3d72b355e3c230c46771292ff9520675c0.tar.bz2
misskey-73203a3d72b355e3c230c46771292ff9520675c0.zip
perf(backend): cache local custom emojis
Diffstat (limited to 'packages/backend/src/core/ReactionService.ts')
-rw-r--r--packages/backend/src/core/ReactionService.ts42
1 files changed, 21 insertions, 21 deletions
diff --git a/packages/backend/src/core/ReactionService.ts b/packages/backend/src/core/ReactionService.ts
index 97a0b5ee66..a274b19e4b 100644
--- a/packages/backend/src/core/ReactionService.ts
+++ b/packages/backend/src/core/ReactionService.ts
@@ -1,7 +1,6 @@
import { Inject, Injectable } from '@nestjs/common';
-import { IsNull } from 'typeorm';
import { DI } from '@/di-symbols.js';
-import type { EmojisRepository, BlockingsRepository, NoteReactionsRepository, UsersRepository, NotesRepository } from '@/models/index.js';
+import type { EmojisRepository, NoteReactionsRepository, UsersRepository, NotesRepository } from '@/models/index.js';
import { IdentifiableError } from '@/misc/identifiable-error.js';
import type { RemoteUser, User } from '@/models/entities/User.js';
import type { Note } from '@/models/entities/Note.js';
@@ -20,6 +19,7 @@ import { MetaService } from '@/core/MetaService.js';
import { bindThis } from '@/decorators.js';
import { UtilityService } from '@/core/UtilityService.js';
import { UserBlockingService } from '@/core/UserBlockingService.js';
+import { CustomEmojiService } from '@/core/CustomEmojiService.js';
const FALLBACK = '❤';
@@ -60,9 +60,6 @@ export class ReactionService {
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
- @Inject(DI.blockingsRepository)
- private blockingsRepository: BlockingsRepository,
-
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
@@ -74,6 +71,7 @@ export class ReactionService {
private utilityService: UtilityService,
private metaService: MetaService,
+ private customEmojiService: CustomEmojiService,
private userEntityService: UserEntityService,
private noteEntityService: NoteEntityService,
private userBlockingService: UserBlockingService,
@@ -104,7 +102,6 @@ export class ReactionService {
if (note.reactionAcceptance === 'likeOnly' || ((note.reactionAcceptance === 'likeOnlyForRemote') && (user.host != null))) {
reaction = '❤️';
} else {
- // TODO: cache
reaction = await this.toDbReaction(reaction, user.host);
}
@@ -158,21 +155,22 @@ export class ReactionService {
// カスタム絵文字リアクションだったら絵文字情報も送る
const decodedReaction = this.decodeReaction(reaction);
- // TODO: Cache
- const emoji = await this.emojisRepository.findOne({
- where: {
- name: decodedReaction.name,
- host: decodedReaction.host ?? IsNull(),
- },
- select: ['name', 'host', 'originalUrl', 'publicUrl'],
- });
+ const customEmoji = decodedReaction.name == null ? null : decodedReaction.host == null
+ ? (await this.customEmojiService.localEmojisCache.fetch()).get(decodedReaction.name)
+ : await this.emojisRepository.findOne(
+ {
+ where: {
+ name: decodedReaction.name,
+ host: decodedReaction.host,
+ },
+ });
this.globalEventService.publishNoteStream(note.id, 'reacted', {
reaction: decodedReaction.reaction,
- emoji: emoji != null ? {
- name: emoji.host ? `${emoji.name}@${emoji.host}` : `${emoji.name}@.`,
+ emoji: customEmoji != null ? {
+ name: customEmoji.host ? `${customEmoji.name}@${customEmoji.host}` : `${customEmoji.name}@.`,
// || emoji.originalUrl してるのは後方互換性のため(publicUrlはstringなので??はだめ)
- url: emoji.publicUrl || emoji.originalUrl,
+ url: customEmoji.publicUrl || customEmoji.originalUrl,
} : null,
userId: user.id,
});
@@ -311,10 +309,12 @@ export class ReactionService {
const custom = reaction.match(/^:([\w+-]+)(?:@\.)?:$/);
if (custom) {
const name = custom[1];
- const emoji = await this.emojisRepository.findOneBy({
- host: reacterHost ?? IsNull(),
- name,
- });
+ const emoji = reacterHost == null
+ ? (await this.customEmojiService.localEmojisCache.fetch()).get(name)
+ : await this.emojisRepository.findOneBy({
+ host: reacterHost,
+ name,
+ });
if (emoji) return reacterHost ? `:${name}@${reacterHost}:` : `:${name}:`;
}