diff --git a/CHANGELOG.md b/CHANGELOG.md index 796ab42d6f..67aa45c8c9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,10 +12,11 @@ --> -## 2023.x.x (unreleased) +## 2023.11.0 (unreleased) ### General -- +- Feat: アイコンデコレーション機能 +- Enhance: すでにフォローしたすべての人の返信をTLに追加できるように ## Client - Feat: プラグイン・テーマを外部サイトから直接インストールできるようになりました @@ -23,7 +24,7 @@ https://misskey-hub.net/docs/advanced/publish-on-your-website.html ### Server -- +- Fix: リストTLに自分のフォロワー限定投稿が含まれない問題を修正 ## 2023.10.2 @@ -35,7 +36,6 @@ - Enhance: フォロー/フォロー解除したときに過去分のHTLにも含まれる投稿が反映されるように - Enhance: ローカリゼーションの更新 - Enhance: 依存関係の更新 -- Enhance: すでにフォローしたすべての人の返信をTLに追加できるように ### Client - Enhance: TLの返信表示オプションを記憶するように diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index 364a300d23..fae512336d 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -868,7 +868,7 @@ export class NoteCreateService implements OnApplicationShutdown { if (note.visibility === 'followers') { // TODO: 重そうだから何とかしたい Set 使う? - userListMemberships = userListMemberships.filter(x => followings.some(f => f.followerId === x.userListUserId)); + userListMemberships = userListMemberships.filter(x => x.userListUserId === user.id || followings.some(f => f.followerId === x.userListUserId)); } // TODO: あまりにも数が多いと redisPipeline.exec に失敗する(理由は不明)ため、3万件程度を目安に分割して実行するようにする diff --git a/packages/backend/src/server/api/openapi/schemas.ts b/packages/backend/src/server/api/openapi/schemas.ts index 0b9eb4fe24..1a1d973e56 100644 --- a/packages/backend/src/server/api/openapi/schemas.ts +++ b/packages/backend/src/server/api/openapi/schemas.ts @@ -26,7 +26,12 @@ export function convertSchemaToOpenApiSchema(schema: Schema) { if (schema.allOf) res.allOf = schema.allOf.map(convertSchemaToOpenApiSchema); if (schema.ref) { - res.$ref = `#/components/schemas/${schema.ref}`; + const $ref = `#/components/schemas/${schema.ref}`; + if (schema.nullable || schema.optional) { + res.allOf = [{ $ref }]; + } else { + res.$ref = $ref; + } } return res; diff --git a/packages/backend/test/e2e/timelines.ts b/packages/backend/test/e2e/timelines.ts index 28f07bf3f7..974d2f6820 100644 --- a/packages/backend/test/e2e/timelines.ts +++ b/packages/backend/test/e2e/timelines.ts @@ -947,6 +947,22 @@ describe('Timelines', () => { assert.strictEqual(res.body.find((note: any) => note.id === bobNote.id).text, 'hi'); }); + test.concurrent('リスインしている自分の visibility: followers なノートが含まれる', async () => { + const [alice] = await Promise.all([signup(), signup()]); + + const list = await api('/users/lists/create', { name: 'list' }, alice).then(res => res.body); + await api('/users/lists/push', { listId: list.id, userId: alice.id }, alice); + await sleep(1000); + const aliceNote = await post(alice, { text: 'hi', visibility: 'followers' }); + + await waitForPushToTl(); + + const res = await api('/notes/user-list-timeline', { listId: list.id }, alice); + + assert.strictEqual(res.body.some((note: any) => note.id === aliceNote.id), true); + assert.strictEqual(res.body.find((note: any) => note.id === aliceNote.id).text, 'hi'); + }); + test.concurrent('リスインしているユーザーのチャンネルノートが含まれない', async () => { const [alice, bob] = await Promise.all([signup(), signup()]); diff --git a/packages/frontend/src/pages/about-misskey.vue b/packages/frontend/src/pages/about-misskey.vue index 6314f9f5d2..c443cdeb76 100644 --- a/packages/frontend/src/pages/about-misskey.vue +++ b/packages/frontend/src/pages/about-misskey.vue @@ -294,6 +294,7 @@ const patrons = [ '美少女JKぐーちゃん', 'てば', 'たっくん', + 'SHO SEKIGUCHI', ]; let thereIsTreasure = $ref($i && !claimedAchievements.includes('foundTreasure')); diff --git a/packages/frontend/src/pages/settings/profile.vue b/packages/frontend/src/pages/settings/profile.vue index c44a58d04a..f3d0c12dce 100644 --- a/packages/frontend/src/pages/settings/profile.vue +++ b/packages/frontend/src/pages/settings/profile.vue @@ -94,7 +94,7 @@ SPDX-License-Identifier: AGPL-3.0-only :class="[$style.avatarDecoration, { [$style.avatarDecorationActive]: $i.avatarDecorations.some(x => x.id === avatarDecoration.id) }]" @click="toggleDecoration(avatarDecoration)" > -
{{ avatarDecoration.name }}
+
{{ avatarDecoration.name }}
@@ -377,13 +377,17 @@ definePageMetadata({ .avatarDecoration { cursor: pointer; - padding: 16px 16px 24px 16px; + padding: 16px 16px 28px 16px; border: solid 2px var(--divider); border-radius: 8px; text-align: center; + font-size: 90%; + overflow: clip; + contain: content; } .avatarDecorationActive { + background-color: var(--accentedBg); border-color: var(--accent); } @@ -391,6 +395,6 @@ definePageMetadata({ position: relative; z-index: 10; font-weight: bold; - margin-bottom: 16px; + margin-bottom: 20px; }