hideNotesInSensitiveChannel -> excludeNotesInSensitiveChannel

This commit is contained in:
syuilo 2025-04-08 20:50:38 +09:00
parent 0d18c0169f
commit c500e4392a
11 changed files with 37 additions and 21 deletions

2
locales/index.d.ts vendored
View File

@ -1717,7 +1717,7 @@ export interface Locale extends ILocale {
/** /**
* *
*/ */
"hideNotesInSensitiveChannel": string; "excludeNotesInSensitiveChannel": string;
/** /**
* *
*/ */

View File

@ -0,0 +1,16 @@
/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
export class ExcludeNotesInSensitiveChannel1744075766000 {
name = 'ExcludeNotesInSensitiveChannel1744075766000'
async up(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna" RENAME COLUMN "hideNotesInSensitiveChannel" TO "excludeNotesInSensitiveChannel"`);
}
async down(queryRunner) {
await queryRunner.query(`ALTER TABLE "antenna" RENAME COLUMN "excludeNotesInSensitiveChannel" TO "hideNotesInSensitiveChannel"`);
}
}

View File

@ -114,7 +114,7 @@ export class AntennaService implements OnApplicationShutdown {
if (note.visibility === 'specified') return false; if (note.visibility === 'specified') return false;
if (note.visibility === 'followers') return false; if (note.visibility === 'followers') return false;
if (antenna.hideNotesInSensitiveChannel && note.channel?.isSensitive) return false; if (antenna.excludeNotesInSensitiveChannel && note.channel?.isSensitive) return false;
if (antenna.excludeBots && noteUser.isBot) return false; if (antenna.excludeBots && noteUser.isBot) return false;

View File

@ -41,7 +41,7 @@ export class AntennaEntityService {
excludeBots: antenna.excludeBots, excludeBots: antenna.excludeBots,
withReplies: antenna.withReplies, withReplies: antenna.withReplies,
withFile: antenna.withFile, withFile: antenna.withFile,
hideNotesInSensitiveChannel: antenna.hideNotesInSensitiveChannel, excludeNotesInSensitiveChannel: antenna.excludeNotesInSensitiveChannel,
isActive: antenna.isActive, isActive: antenna.isActive,
hasUnreadNote: false, // TODO hasUnreadNote: false, // TODO
notify: false, // 後方互換性のため notify: false, // 後方互換性のため

View File

@ -104,5 +104,5 @@ export class MiAntenna {
@Column('boolean', { @Column('boolean', {
default: false, default: false,
}) })
public hideNotesInSensitiveChannel: boolean; public excludeNotesInSensitiveChannel: boolean;
} }

View File

@ -100,7 +100,7 @@ export const packedAntennaSchema = {
optional: false, nullable: false, optional: false, nullable: false,
default: false, default: false,
}, },
hideNotesInSensitiveChannel: { excludeNotesInSensitiveChannel: {
type: 'boolean', type: 'boolean',
optional: false, nullable: false, optional: false, nullable: false,
default: false, default: false,

View File

@ -73,7 +73,7 @@ export const paramDef = {
excludeBots: { type: 'boolean' }, excludeBots: { type: 'boolean' },
withReplies: { type: 'boolean' }, withReplies: { type: 'boolean' },
withFile: { type: 'boolean' }, withFile: { type: 'boolean' },
hideNotesInSensitiveChannel: { type: 'boolean' }, excludeNotesInSensitiveChannel: { type: 'boolean' },
}, },
required: ['name', 'src', 'keywords', 'excludeKeywords', 'users', 'caseSensitive', 'withReplies', 'withFile'], required: ['name', 'src', 'keywords', 'excludeKeywords', 'users', 'caseSensitive', 'withReplies', 'withFile'],
} as const; } as const;
@ -134,7 +134,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
excludeBots: ps.excludeBots, excludeBots: ps.excludeBots,
withReplies: ps.withReplies, withReplies: ps.withReplies,
withFile: ps.withFile, withFile: ps.withFile,
hideNotesInSensitiveChannel: ps.hideNotesInSensitiveChannel, excludeNotesInSensitiveChannel: ps.excludeNotesInSensitiveChannel,
}); });
this.globalEventService.publishInternalEvent('antennaCreated', antenna); this.globalEventService.publishInternalEvent('antennaCreated', antenna);

View File

@ -72,7 +72,7 @@ export const paramDef = {
excludeBots: { type: 'boolean' }, excludeBots: { type: 'boolean' },
withReplies: { type: 'boolean' }, withReplies: { type: 'boolean' },
withFile: { type: 'boolean' }, withFile: { type: 'boolean' },
hideNotesInSensitiveChannel: { type: 'boolean' }, excludeNotesInSensitiveChannel: { type: 'boolean' },
}, },
required: ['antennaId'], required: ['antennaId'],
} as const; } as const;
@ -130,7 +130,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
excludeBots: ps.excludeBots, excludeBots: ps.excludeBots,
withReplies: ps.withReplies, withReplies: ps.withReplies,
withFile: ps.withFile, withFile: ps.withFile,
hideNotesInSensitiveChannel: ps.hideNotesInSensitiveChannel, excludeNotesInSensitiveChannel: ps.excludeNotesInSensitiveChannel,
isActive: true, isActive: true,
lastUsedAt: new Date(), lastUsedAt: new Date(),
}); });

View File

@ -146,7 +146,7 @@ describe('アンテナ', () => {
caseSensitive: false, caseSensitive: false,
createdAt: new Date(response.createdAt).toISOString(), createdAt: new Date(response.createdAt).toISOString(),
excludeKeywords: [['']], excludeKeywords: [['']],
hideNotesInSensitiveChannel: false, excludeNotesInSensitiveChannel: false,
hasUnreadNote: false, hasUnreadNote: false,
isActive: true, isActive: true,
keywords: [['keyword']], keywords: [['keyword']],
@ -218,8 +218,8 @@ describe('アンテナ', () => {
{ parameters: () => ({ withReplies: true }) }, { parameters: () => ({ withReplies: true }) },
{ parameters: () => ({ withFile: false }) }, { parameters: () => ({ withFile: false }) },
{ parameters: () => ({ withFile: true }) }, { parameters: () => ({ withFile: true }) },
{ parameters: () => ({ hideNotesInSensitiveChannel: false }) }, { parameters: () => ({ excludeNotesInSensitiveChannel: false }) },
{ parameters: () => ({ hideNotesInSensitiveChannel: true }) }, { parameters: () => ({ excludeNotesInSensitiveChannel: true }) },
]; ];
test.each(antennaParamPattern)('を作成できること($#)', async ({ parameters }) => { test.each(antennaParamPattern)('を作成できること($#)', async ({ parameters }) => {
const response = await successfulApiCall({ const response = await successfulApiCall({
@ -633,7 +633,7 @@ describe('アンテナ', () => {
const keyword = 'キーワード'; const keyword = 'キーワード';
const antenna = await successfulApiCall({ const antenna = await successfulApiCall({
endpoint: 'antennas/create', endpoint: 'antennas/create',
parameters: { ...defaultParam, keywords: [[keyword]], hideNotesInSensitiveChannel: true }, parameters: { ...defaultParam, keywords: [[keyword]], excludeNotesInSensitiveChannel: true },
user: alice, user: alice,
}); });
const nonSensitiveChannel = await successfulApiCall({ const nonSensitiveChannel = await successfulApiCall({

View File

@ -39,7 +39,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkSwitch v-model="localOnly">{{ i18n.ts.localOnly }}</MkSwitch> <MkSwitch v-model="localOnly">{{ i18n.ts.localOnly }}</MkSwitch>
<MkSwitch v-model="caseSensitive">{{ i18n.ts.caseSensitive }}</MkSwitch> <MkSwitch v-model="caseSensitive">{{ i18n.ts.caseSensitive }}</MkSwitch>
<MkSwitch v-model="withFile">{{ i18n.ts.withFileAntenna }}</MkSwitch> <MkSwitch v-model="withFile">{{ i18n.ts.withFileAntenna }}</MkSwitch>
<MkSwitch v-model="hideNotesInSensitiveChannel">{{ i18n.ts.hideNotesInSensitiveChannel }}</MkSwitch> <MkSwitch v-model="excludeNotesInSensitiveChannel">{{ i18n.ts.hideNotesInSensitiveChannel }}</MkSwitch>
</div> </div>
<div :class="$style.actions"> <div :class="$style.actions">
<div class="_buttons"> <div class="_buttons">
@ -54,6 +54,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<script lang="ts" setup> <script lang="ts" setup>
import { watch, ref } from 'vue'; import { watch, ref } from 'vue';
import * as Misskey from 'misskey-js'; import * as Misskey from 'misskey-js';
import type { DeepPartial } from '@/utility/merge.js';
import MkButton from '@/components/MkButton.vue'; import MkButton from '@/components/MkButton.vue';
import MkInput from '@/components/MkInput.vue'; import MkInput from '@/components/MkInput.vue';
import MkTextarea from '@/components/MkTextarea.vue'; import MkTextarea from '@/components/MkTextarea.vue';
@ -63,7 +64,6 @@ import * as os from '@/os.js';
import { misskeyApi } from '@/utility/misskey-api.js'; import { misskeyApi } from '@/utility/misskey-api.js';
import { i18n } from '@/i18n.js'; import { i18n } from '@/i18n.js';
import { deepMerge } from '@/utility/merge.js'; import { deepMerge } from '@/utility/merge.js';
import type { DeepPartial } from '@/utility/merge.js';
type PartialAllowedAntenna = Omit<Misskey.entities.Antenna, 'id' | 'createdAt' | 'updatedAt'> & { type PartialAllowedAntenna = Omit<Misskey.entities.Antenna, 'id' | 'createdAt' | 'updatedAt'> & {
id?: string; id?: string;
@ -87,7 +87,7 @@ const initialAntenna = deepMerge<PartialAllowedAntenna>(props.antenna ?? {}, {
caseSensitive: false, caseSensitive: false,
localOnly: false, localOnly: false,
withFile: false, withFile: false,
hideNotesInSensitiveChannel: false, excludeNotesInSensitiveChannel: false,
isActive: true, isActive: true,
hasUnreadNote: false, hasUnreadNote: false,
notify: false, notify: false,
@ -110,7 +110,7 @@ const localOnly = ref<boolean>(initialAntenna.localOnly);
const excludeBots = ref<boolean>(initialAntenna.excludeBots); const excludeBots = ref<boolean>(initialAntenna.excludeBots);
const withReplies = ref<boolean>(initialAntenna.withReplies); const withReplies = ref<boolean>(initialAntenna.withReplies);
const withFile = ref<boolean>(initialAntenna.withFile); const withFile = ref<boolean>(initialAntenna.withFile);
const hideNotesInSensitiveChannel = ref<boolean>(initialAntenna.hideNotesInSensitiveChannel); const excludeNotesInSensitiveChannel = ref<boolean>(initialAntenna.excludeNotesInSensitiveChannel);
const userLists = ref<Misskey.entities.UserList[] | null>(null); const userLists = ref<Misskey.entities.UserList[] | null>(null);
watch(() => src.value, async () => { watch(() => src.value, async () => {
@ -127,7 +127,7 @@ async function saveAntenna() {
excludeBots: excludeBots.value, excludeBots: excludeBots.value,
withReplies: withReplies.value, withReplies: withReplies.value,
withFile: withFile.value, withFile: withFile.value,
hideNotesInSensitiveChannel: hideNotesInSensitiveChannel.value, excludeNotesInSensitiveChannel: excludeNotesInSensitiveChannel.value,
caseSensitive: caseSensitive.value, caseSensitive: caseSensitive.value,
localOnly: localOnly.value, localOnly: localOnly.value,
users: users.value.trim().split('\n').map(x => x.trim()), users: users.value.trim().split('\n').map(x => x.trim()),

View File

@ -4899,7 +4899,7 @@ export type components = {
/** @default false */ /** @default false */
notify: boolean; notify: boolean;
/** @default false */ /** @default false */
hideNotesInSensitiveChannel: boolean; excludeNotesInSensitiveChannel: boolean;
}; };
Clip: { Clip: {
/** /**
@ -11340,7 +11340,7 @@ export type operations = {
excludeBots?: boolean; excludeBots?: boolean;
withReplies: boolean; withReplies: boolean;
withFile: boolean; withFile: boolean;
hideNotesInSensitiveChannel?: boolean; excludeNotesInSensitiveChannel?: boolean;
}; };
}; };
}; };
@ -11622,7 +11622,7 @@ export type operations = {
excludeBots?: boolean; excludeBots?: boolean;
withReplies?: boolean; withReplies?: boolean;
withFile?: boolean; withFile?: boolean;
hideNotesInSensitiveChannel?: boolean; excludeNotesInSensitiveChannel?: boolean;
}; };
}; };
}; };