diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 33125a97658665ccc1f0b88b19ce5398ff87a2b0..f2e48ec61ddbc4314b701234187c49a84ff7a140 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 <migration name> +pnpm run build +pnpm dlx typeorm migration:generate -d ormconfig.js -o migration/<migration name> ``` - 生æˆå¾Œã€ãƒ•ã‚¡ã‚¤ãƒ«ã‚’migration下ã«ç§»ã—ã¦ãã ã•ã„ diff --git a/packages/backend/src/core/FederatedInstanceService.ts b/packages/backend/src/core/FederatedInstanceService.ts index 7aeeb781786c8b60d7d00b091eebcf0902ee73cd..7ec565557c5dd1bc702f4086b1d121893be9e281 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 721cff53bc3c989a9fb2358728f3c9b01c2c91a3..63e5923255b6f64a3c5cb39850826c08fc99fa76 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 062dba9bad6449427749e733fdaf31f043a36e1f..7960e748e9a5e63b4669c78552c130544ed40b93 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 8038ec74292a3f7a874a517ed608df3a24be93ff..6fdeb3a3abbe74f517bf3620f19f648ede1e409b 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 <div :class="$style.users"> <div v-for="u in users" :key="u.id" :class="$style.user"> <MkAvatar :class="$style.avatar" :user="u"/> - <MkUserName :user="u" :nowrap="true"/> + <MkUserName :user="u" :nowrap="true" :class="$style.username"/> </div> <div v-if="count > 10" :class="$style.more">+{{ count - 10 }}</div> </div> @@ -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; +} </style> diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts index e92224480faeead7bea1c399928da4ddee9e7426..4ea0f72bceaba7f92f9292ca7d895c418b9decf6 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: {