From aacde76f43267aac2556fabda2b5768ea020f10d Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Mon, 31 Jul 2023 15:03:38 +0900 Subject: [PATCH 1/7] feat(backend): add isSensitive to Channel --- .../migration/1690782653311-SensitiveChannel.js | 12 ++++++++++++ packages/backend/src/models/entities/Channel.ts | 5 +++++ 2 files changed, 17 insertions(+) create mode 100644 packages/backend/migration/1690782653311-SensitiveChannel.js diff --git a/packages/backend/migration/1690782653311-SensitiveChannel.js b/packages/backend/migration/1690782653311-SensitiveChannel.js new file mode 100644 index 0000000000..5779172c44 --- /dev/null +++ b/packages/backend/migration/1690782653311-SensitiveChannel.js @@ -0,0 +1,12 @@ +export class SensitiveChannel1690782653311 { + name = 'SensitiveChannel1690782653311' + + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "channel" + ADD "isSensitive" boolean NOT NULL DEFAULT false`); + } + + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "channel" DROP COLUMN "isSensitive"`); + } +} diff --git a/packages/backend/src/models/entities/Channel.ts b/packages/backend/src/models/entities/Channel.ts index d7c4583da3..e5e2b579aa 100644 --- a/packages/backend/src/models/entities/Channel.ts +++ b/packages/backend/src/models/entities/Channel.ts @@ -89,4 +89,9 @@ export class Channel { comment: 'The count of users.', }) public usersCount: number; + + @Column('boolean', { + default: false, + }) + public isSensitive: boolean; } From 11593a76b0aafe0e3d3ee3de389710407b3e70a3 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Mon, 31 Jul 2023 15:33:57 +0900 Subject: [PATCH 2/7] feat(backend): support isSensitive in channel endpoints --- packages/backend/src/core/entities/ChannelEntityService.ts | 1 + packages/backend/src/models/json-schema/channel.ts | 4 ++++ packages/backend/src/server/api/endpoints/channels/create.ts | 2 ++ packages/backend/src/server/api/endpoints/channels/update.ts | 2 ++ 4 files changed, 9 insertions(+) diff --git a/packages/backend/src/core/entities/ChannelEntityService.ts b/packages/backend/src/core/entities/ChannelEntityService.ts index de99ce72c4..0be2005548 100644 --- a/packages/backend/src/core/entities/ChannelEntityService.ts +++ b/packages/backend/src/core/entities/ChannelEntityService.ts @@ -87,6 +87,7 @@ export class ChannelEntityService { isArchived: channel.isArchived, usersCount: channel.usersCount, notesCount: channel.notesCount, + isSensitive: channel.isSensitive, ...(me ? { isFollowing, diff --git a/packages/backend/src/models/json-schema/channel.ts b/packages/backend/src/models/json-schema/channel.ts index fd61a70c0e..996888724b 100644 --- a/packages/backend/src/models/json-schema/channel.ts +++ b/packages/backend/src/models/json-schema/channel.ts @@ -67,5 +67,9 @@ export const packedChannelSchema = { type: 'string', optional: false, nullable: false, }, + isSensitive: { + type: 'boolean', + optional: false, nullable: false, + }, }, } as const; diff --git a/packages/backend/src/server/api/endpoints/channels/create.ts b/packages/backend/src/server/api/endpoints/channels/create.ts index 69e2f2504c..371033231d 100644 --- a/packages/backend/src/server/api/endpoints/channels/create.ts +++ b/packages/backend/src/server/api/endpoints/channels/create.ts @@ -44,6 +44,7 @@ export const paramDef = { description: { type: 'string', nullable: true, minLength: 1, maxLength: 2048 }, bannerId: { type: 'string', format: 'misskey:id', nullable: true }, color: { type: 'string', minLength: 1, maxLength: 16 }, + isSensitive: { type: 'boolean', nullable: true }, }, required: ['name'], } as const; @@ -81,6 +82,7 @@ export default class extends Endpoint { name: ps.name, description: ps.description ?? null, bannerId: banner ? banner.id : null, + isSensitive: ps.isSensitive ?? false, ...(ps.color !== undefined ? { color: ps.color } : {}), } as Channel).then(x => this.channelsRepository.findOneByOrFail(x.identifiers[0])); diff --git a/packages/backend/src/server/api/endpoints/channels/update.ts b/packages/backend/src/server/api/endpoints/channels/update.ts index 30d7f8b244..e1e8df8111 100644 --- a/packages/backend/src/server/api/endpoints/channels/update.ts +++ b/packages/backend/src/server/api/endpoints/channels/update.ts @@ -55,6 +55,7 @@ export const paramDef = { }, }, color: { type: 'string', minLength: 1, maxLength: 16 }, + isSensitive: { type: 'boolean', nullable: true }, }, required: ['channelId'], } as const; @@ -109,6 +110,7 @@ export default class extends Endpoint { ...(ps.color !== undefined ? { color: ps.color } : {}), ...(typeof ps.isArchived === 'boolean' ? { isArchived: ps.isArchived } : {}), ...(banner ? { bannerId: banner.id } : {}), + ...(typeof ps.isSensitive === 'boolean' ? { isSensitive: ps.isSensitive } : {}), }); return await this.channelEntityService.pack(channel.id, me); From fb91b8cb95bfc401aa5514a27286d1e85cad36a6 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Mon, 31 Jul 2023 15:40:16 +0900 Subject: [PATCH 3/7] feat(frontend/channel-editor): support isSensitive in create/edit channel page --- packages/frontend/src/pages/channel-editor.vue | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/frontend/src/pages/channel-editor.vue b/packages/frontend/src/pages/channel-editor.vue index cacdab040f..881211feaa 100644 --- a/packages/frontend/src/pages/channel-editor.vue +++ b/packages/frontend/src/pages/channel-editor.vue @@ -15,6 +15,10 @@ + + + +
{{ i18n.ts._channel.setBanner }}
@@ -67,6 +71,7 @@ import { useRouter } from '@/router'; import { definePageMetadata } from '@/scripts/page-metadata'; import { i18n } from '@/i18n'; import MkFolder from '@/components/MkFolder.vue'; +import MkSwitch from "@/components/MkSwitch.vue"; const Sortable = defineAsyncComponent(() => import('vuedraggable').then(x => x.default)); @@ -82,6 +87,7 @@ let description = $ref(null); let bannerUrl = $ref(null); let bannerId = $ref(null); let color = $ref('#000'); +let isSensitive = $ref(false); const pinnedNotes = ref([]); watch(() => bannerId, async () => { @@ -105,6 +111,7 @@ async function fetchChannel() { description = channel.description; bannerId = channel.bannerId; bannerUrl = channel.bannerUrl; + isSensitive = channel.isSensitive; pinnedNotes.value = channel.pinnedNoteIds.map(id => ({ id, })); @@ -137,6 +144,7 @@ function save() { bannerId: bannerId, pinnedNoteIds: pinnedNotes.value.map(x => x.id), color: color, + isSensitive: isSensitive, }; if (props.channelId) { From 1d22f64d36401f21b7971c40b38c4f472d130d10 Mon Sep 17 00:00:00 2001 From: anatawa12 Date: Mon, 31 Jul 2023 16:32:44 +0900 Subject: [PATCH 4/7] feat(frontend/channel): show sensitive indicator for sensitive channels --- .../frontend/src/components/MkChannelPreview.vue | 14 ++++++++++++++ packages/frontend/src/pages/channel.vue | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/packages/frontend/src/components/MkChannelPreview.vue b/packages/frontend/src/components/MkChannelPreview.vue index 6ef50bddcf..422a5847be 100644 --- a/packages/frontend/src/components/MkChannelPreview.vue +++ b/packages/frontend/src/components/MkChannelPreview.vue @@ -3,6 +3,7 @@