fix: emojis not being populated for local users

This commit is contained in:
Mar0xy 2023-09-26 13:25:55 +02:00
parent d0af17c674
commit 7481ece433
No known key found for this signature in database
GPG key ID: 56569BBE47D2C828
3 changed files with 15 additions and 3 deletions

View file

@ -19,6 +19,7 @@ import { UtilityService } from '@/core/UtilityService.js';
import { query } from '@/misc/prelude/url.js';
import type { Serialized } from '@/server/api/stream/types.js';
import { ModerationLogService } from '@/core/ModerationLogService.js';
import type { Config } from '@/config.js';
const parseEmojiStrRegexp = /^(\w+)(?:@([\w.-]+))?$/;
@ -31,6 +32,9 @@ export class CustomEmojiService implements OnApplicationShutdown {
@Inject(DI.redis)
private redisClient: Redis.Redis,
@Inject(DI.config)
private config: Config,
@Inject(DI.emojisRepository)
private emojisRepository: EmojisRepository,
@ -330,9 +334,11 @@ export class CustomEmojiService implements OnApplicationShutdown {
if (name == null) return null;
if (host == null) return null;
const newHost = host === this.config.host ? null : host;
const queryOrNull = async () => (await this.emojisRepository.findOneBy({
name,
host: host ?? IsNull(),
host: newHost ?? IsNull(),
})) ?? null;
const emoji = await this.cache.fetch(`${name} ${host}`, queryOrNull);

View file

@ -22,6 +22,7 @@ import type { CustomEmojiService } from '../CustomEmojiService.js';
import type { ReactionService } from '../ReactionService.js';
import type { UserEntityService } from './UserEntityService.js';
import type { DriveFileEntityService } from './DriveFileEntityService.js';
import type { Config } from '@/config.js';
@Injectable()
export class NoteEntityService implements OnModuleInit {
@ -36,6 +37,9 @@ export class NoteEntityService implements OnModuleInit {
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
@Inject(DI.config)
private config: Config,
@Inject(DI.notesRepository)
private notesRepository: NotesRepository,
@ -286,7 +290,7 @@ export class NoteEntityService implements OnModuleInit {
const meId = me ? me.id : null;
const note = typeof src === 'object' ? src : await this.notesRepository.findOneOrFail({ where: { id: src }, relations: ['user'] });
const host = note.userHost;
const host = note.userHost === null ? this.config.host : note.userHost;
let text = note.text;

View file

@ -339,6 +339,8 @@ export class UserEntityService implements OnModuleInit {
const falsy = opts.detail ? false : undefined;
const checkHost = user.host == null ? this.config.host : user.host;
const packed = {
id: user.id,
name: user.name,
@ -361,7 +363,7 @@ export class UserEntityService implements OnModuleInit {
followersCount: followersCount ?? 0,
followingCount: followingCount ?? 0,
notesCount: user.notesCount,
emojis: this.customEmojiService.populateEmojis(user.emojis, user.host),
emojis: this.customEmojiService.populateEmojis(user.emojis, checkHost),
onlineStatus: this.getOnlineStatus(user),
// パフォーマンス上の理由でローカルユーザーのみ
badgeRoles: user.host == null ? this.roleService.getUserBadgeRoles(user.id).then(rs => rs.sort((a, b) => b.displayOrder - a.displayOrder).map(r => ({