diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 33125a9765..f2e48ec61d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -529,7 +529,8 @@ enumの列挙の内容の削除は、その値をもつレコードを全て削 ### Migration作成方法 packages/backendで: ```sh -pnpm dlx typeorm migration:generate -d ormconfig.js -o +pnpm run build +pnpm dlx typeorm migration:generate -d ormconfig.js -o migration/ ``` - 生成後、ファイルをmigration下に移してください diff --git a/packages/backend/src/core/FederatedInstanceService.ts b/packages/backend/src/core/FederatedInstanceService.ts index 7aeeb78178..7ec565557c 100644 --- a/packages/backend/src/core/FederatedInstanceService.ts +++ b/packages/backend/src/core/FederatedInstanceService.ts @@ -12,6 +12,8 @@ import { IdService } from '@/core/IdService.js'; import { DI } from '@/di-symbols.js'; import { UtilityService } from '@/core/UtilityService.js'; import { bindThis } from '@/decorators.js'; +import { QueryFailedError } from 'typeorm'; +import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js'; @Injectable() export class FederatedInstanceService implements OnApplicationShutdown { @@ -56,11 +58,24 @@ export class FederatedInstanceService implements OnApplicationShutdown { const index = await this.instancesRepository.findOneBy({ host }); if (index == null) { - const i = await this.instancesRepository.insertOne({ - id: this.idService.gen(), - host, - firstRetrievedAt: new Date(), - }); + let i; + try { + i = await this.instancesRepository.insertOne({ + id: this.idService.gen(), + host, + firstRetrievedAt: new Date(), + }); + } catch (e: unknown) { + if (e instanceof QueryFailedError) { + if (isDuplicateKeyValueError(e)) { + i = await this.instancesRepository.findOneBy({ host }); + } + } + + if (i == null) { + throw e; + } + } this.federatedInstanceCache.set(host, i); return i; diff --git a/packages/backend/src/core/entities/InstanceEntityService.ts b/packages/backend/src/core/entities/InstanceEntityService.ts index 721cff53bc..63e5923255 100644 --- a/packages/backend/src/core/entities/InstanceEntityService.ts +++ b/packages/backend/src/core/entities/InstanceEntityService.ts @@ -59,6 +59,7 @@ export class InstanceEntityService { infoUpdatedAt: instance.infoUpdatedAt ? instance.infoUpdatedAt.toISOString() : null, latestRequestReceivedAt: instance.latestRequestReceivedAt ? instance.latestRequestReceivedAt.toISOString() : null, isNSFW: instance.isNSFW, + rejectReports: instance.rejectReports, moderationNote: iAmModerator ? instance.moderationNote : null, }; } diff --git a/packages/backend/src/models/json-schema/federation-instance.ts b/packages/backend/src/models/json-schema/federation-instance.ts index 062dba9bad..7960e748e9 100644 --- a/packages/backend/src/models/json-schema/federation-instance.ts +++ b/packages/backend/src/models/json-schema/federation-instance.ts @@ -121,6 +121,11 @@ export const packedFederationInstanceSchema = { optional: false, nullable: false, }, + rejectReports: { + type: 'boolean', + optional: false, + nullable: false, + }, moderationNote: { type: 'string', optional: true, nullable: true, diff --git a/packages/frontend/src/components/MkReactionsViewer.details.vue b/packages/frontend/src/components/MkReactionsViewer.details.vue index 8038ec7429..6fdeb3a3ab 100644 --- a/packages/frontend/src/components/MkReactionsViewer.details.vue +++ b/packages/frontend/src/components/MkReactionsViewer.details.vue @@ -13,7 +13,7 @@ SPDX-License-Identifier: AGPL-3.0-only
- +
+{{ count - 10 }}
@@ -99,4 +99,11 @@ function getReactionName(reaction: string): string { .more { padding-top: 4px; } + +.username { + text-overflow: ellipsis; + white-space: nowrap; + min-width: 0; + overflow: hidden; +} diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index e92224480f..4ea0f72bce 100644 --- a/packages/misskey-js/src/autogen/types.ts +++ b/packages/misskey-js/src/autogen/types.ts @@ -4808,6 +4808,7 @@ export type components = { /** Format: date-time */ latestRequestReceivedAt: string | null; isNSFW: boolean; + rejectReports: boolean; moderationNote?: string | null; }; GalleryPost: {