diff --git a/.github/workflows/check_copyright_year.yml b/.github/workflows/check_copyright_year.yml index 8daea44a83..ecb487ace3 100644 --- a/.github/workflows/check_copyright_year.yml +++ b/.github/workflows/check_copyright_year.yml @@ -3,8 +3,8 @@ name: Check copyright year on: push: branches: - - master - - develop + - art/main + - art/dev jobs: check_copyright_year: diff --git a/.github/workflows/docker-develop.yml b/.github/workflows/docker-develop.yml index 09a2c33e0c..56b2f0a11c 100644 --- a/.github/workflows/docker-develop.yml +++ b/.github/workflows/docker-develop.yml @@ -3,12 +3,18 @@ name: Publish Docker image (develop) on: push: branches: - - develop + - art/dev workflow_dispatch: +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + jobs: push_to_registry: name: Push Docker image to Docker Hub + permissions: + packages: write runs-on: ubuntu-latest if: github.repository == 'misskey-dev/misskey' steps: @@ -23,12 +29,14 @@ jobs: id: meta uses: docker/metadata-action@v4 with: - images: misskey/misskey - - name: Log in to Docker Hub + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + - name: Log in to the Container registry uses: docker/login-action@v2 with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and Push to Docker Hub uses: docker/build-push-action@v4 with: diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index a465d92eaf..046006bdf6 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -5,9 +5,15 @@ on: types: [published] workflow_dispatch: +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + jobs: push_to_registry: name: Push Docker image to Docker Hub + permissions: + packages: write runs-on: ubuntu-latest steps: @@ -22,7 +28,7 @@ jobs: id: meta uses: docker/metadata-action@v4 with: - images: misskey/misskey + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} tags: | type=edge type=ref,event=pr @@ -30,11 +36,13 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - - name: Log in to Docker Hub + - name: Log in to the Container registry uses: docker/login-action@v2 with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and Push to Docker Hub uses: docker/build-push-action@v4 with: diff --git a/.github/workflows/dockle.yml b/.github/workflows/dockle.yml index 9b79ee54f0..b31ff5ad7c 100644 --- a/.github/workflows/dockle.yml +++ b/.github/workflows/dockle.yml @@ -4,8 +4,8 @@ name: Dockle on: push: branches: - - master - - develop + - art/main + - art/dev pull_request: jobs: diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 0f3702f958..ca34626e78 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -3,8 +3,8 @@ name: Lint on: push: branches: - - master - - develop + - art/main + - art/dev pull_request: jobs: diff --git a/.github/workflows/reviewer_lottery.yml b/.github/workflows/reviewer_lottery.yml deleted file mode 100644 index 33228d7465..0000000000 --- a/.github/workflows/reviewer_lottery.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: "Reviewer lottery" -on: - pull_request_target: - types: [opened, ready_for_review, reopened] - -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - uses: uesteibar/reviewer-lottery@v2 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml index 1aea8b5459..efbfbf918e 100644 --- a/.github/workflows/storybook.yml +++ b/.github/workflows/storybook.yml @@ -5,7 +5,7 @@ on: branches: - master - develop - pull_request_target: + # pull_request_target: jobs: build: diff --git a/.github/workflows/test-backend.yml b/.github/workflows/test-backend.yml index 96e64c322e..443178cf56 100644 --- a/.github/workflows/test-backend.yml +++ b/.github/workflows/test-backend.yml @@ -3,8 +3,8 @@ name: Test (backend) on: push: branches: - - master - - develop + - art/main + - art/dev pull_request: jobs: diff --git a/.github/workflows/test-frontend.yml b/.github/workflows/test-frontend.yml index eef68aa0d1..16fb12d66a 100644 --- a/.github/workflows/test-frontend.yml +++ b/.github/workflows/test-frontend.yml @@ -3,8 +3,8 @@ name: Test (frontend) on: push: branches: - - master - - develop + - art/main + - art/dev pull_request: jobs: diff --git a/.github/workflows/test-misskey-js.yml b/.github/workflows/test-misskey-js.yml index 213657ce1f..cf0a46137a 100644 --- a/.github/workflows/test-misskey-js.yml +++ b/.github/workflows/test-misskey-js.yml @@ -5,9 +5,9 @@ name: Test (misskey.js) on: push: - branches: [ develop ] + branches: [ art/dev ] pull_request: - branches: [ develop ] + branches: [ art/dev ] jobs: test: diff --git a/.github/workflows/test-production.yml b/.github/workflows/test-production.yml index 8429465b5b..37e65b7b47 100644 --- a/.github/workflows/test-production.yml +++ b/.github/workflows/test-production.yml @@ -3,8 +3,8 @@ name: Test (production install and build) on: push: branches: - - master - - develop + - art/main + - art/dev pull_request: env: diff --git a/README.md b/README.md index ab4388c2eb..6444e471d8 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ +
+ Misskey art logo +

Fork of Misskey by Misskey.art

+
+
Misskey logo diff --git a/locales/en-US.yml b/locales/en-US.yml index 097aba76ba..ca53d413b5 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -1517,6 +1517,8 @@ _aboutMisskey: contributors: "Main contributors" allContributors: "All contributors" source: "Source code" + originalSource: "Original source code" + ioSource: "Misskey.io's source code" translation: "Translate Misskey" donate: "Donate to Misskey" morePatrons: "We also appreciate the support of many other helpers not listed here. Thank you! 🥰" @@ -1882,6 +1884,7 @@ _instanceCharts: _timelines: home: "Home" local: "Local" + media: "Media" social: "Social" global: "Global" _play: diff --git a/locales/index.d.ts b/locales/index.d.ts index db7e3e9575..978931e867 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -996,6 +996,7 @@ export interface Locale { "disableFederationConfirm": string; "disableFederationConfirmWarn": string; "disableFederationOk": string; + "contentWarningCheckRule": string; "invitationRequiredToRegister": string; "emailNotSupported": string; "postToTheChannel": string; @@ -1617,6 +1618,8 @@ export interface Locale { "contributors": string; "allContributors": string; "source": string; + "originalSource": string; + "ioSource": string; "translation": string; "donate": string; "morePatrons": string; @@ -2012,6 +2015,7 @@ export interface Locale { "_timelines": { "home": string; "local": string; + "media": string; "social": string; "global": string; }; diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index b2fa9c337e..cfde5f015b 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -993,6 +993,7 @@ letsLookAtTimeline: "タイムラインを見てみる" disableFederationConfirm: "連合なしにしますか?" disableFederationConfirmWarn: "連合なしにしても投稿は非公開になりません。ほとんどの場合、連合なしにする必要はありません。" disableFederationOk: "連合なしにする" +contentWarningCheckRule: "R18など、NSFWに相当する内容を投稿する場合は、注釈に投稿の内容に関する簡単な説明を記述してください。\n詳しくはルールをご覧ください。https://service.misskey.art" invitationRequiredToRegister: "現在このサーバーは招待制です。招待コードをお持ちの方のみ登録できます。" emailNotSupported: "このサーバーではメール配信はサポートされていません" postToTheChannel: "チャンネルに投稿" @@ -1535,6 +1536,8 @@ _aboutMisskey: contributors: "主なコントリビューター" allContributors: "全てのコントリビューター" source: "ソースコード" + originalSource: "本家のソースコード" + ioSource: "Misskey.ioのソースコード" translation: "Misskeyを翻訳" donate: "Misskeyに寄付" morePatrons: "他にも多くの方が支援してくれています。ありがとうございます🥰" @@ -1928,6 +1931,7 @@ _instanceCharts: _timelines: home: "ホーム" local: "ローカル" + media: "メディア" social: "ソーシャル" global: "グローバル" diff --git a/package.json b/package.json index 125a33f406..1b4e6a365a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "13.14.2", + "version": "13.14.2-art+1.0", "codename": "nasubi", "repository": { "type": "git", diff --git a/packages/backend/assets/favicon.ico b/packages/backend/assets/favicon.ico index 9be1ff6295..b813b8cc28 100644 Binary files a/packages/backend/assets/favicon.ico and b/packages/backend/assets/favicon.ico differ diff --git a/packages/backend/assets/favicon.png b/packages/backend/assets/favicon.png index b4eb18a5cb..110e0e0707 100644 Binary files a/packages/backend/assets/favicon.png and b/packages/backend/assets/favicon.png differ diff --git a/packages/backend/assets/icons/192.png b/packages/backend/assets/icons/192.png deleted file mode 100644 index 15fd1e3731..0000000000 Binary files a/packages/backend/assets/icons/192.png and /dev/null differ diff --git a/packages/backend/assets/icons/192art.png b/packages/backend/assets/icons/192art.png new file mode 100644 index 0000000000..ab5c4f51bd Binary files /dev/null and b/packages/backend/assets/icons/192art.png differ diff --git a/packages/backend/assets/icons/512.png b/packages/backend/assets/icons/512.png deleted file mode 100644 index f2169ec9b0..0000000000 Binary files a/packages/backend/assets/icons/512.png and /dev/null differ diff --git a/packages/backend/assets/icons/512art.png b/packages/backend/assets/icons/512art.png new file mode 100644 index 0000000000..9ddc462b9f Binary files /dev/null and b/packages/backend/assets/icons/512art.png differ diff --git a/packages/backend/assets/icons/mi-art.png b/packages/backend/assets/icons/mi-art.png new file mode 100644 index 0000000000..9ddc462b9f Binary files /dev/null and b/packages/backend/assets/icons/mi-art.png differ diff --git a/packages/backend/assets/splash.png b/packages/backend/assets/splash.png index 3430e6efe7..4d84283787 100644 Binary files a/packages/backend/assets/splash.png and b/packages/backend/assets/splash.png differ diff --git a/packages/backend/src/server/api/stream/channels/global-timeline.ts b/packages/backend/src/server/api/stream/channels/global-timeline.ts index d3339072c1..77d4f0592a 100644 --- a/packages/backend/src/server/api/stream/channels/global-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/global-timeline.ts @@ -14,6 +14,7 @@ class GlobalTimelineChannel extends Channel { public static shouldShare = true; public static requireCredential = false; private withReplies: boolean; + private withFiles: boolean; constructor( private metaService: MetaService, @@ -33,6 +34,7 @@ class GlobalTimelineChannel extends Channel { if (!policies.gtlAvailable) return; this.withReplies = params.withReplies as boolean; + this.withFiles = params.withFiles as boolean; // Subscribe events this.subscriber.on('notesStream', this.onNote); @@ -43,6 +45,9 @@ class GlobalTimelineChannel extends Channel { if (note.visibility !== 'public') return; if (note.channelId != null) return; + // ファイルを含まない投稿は除外 + if (this.withFiles && (note.files === undefined || note.files.length === 0)) return; + // リプライなら再pack if (note.replyId != null) { note.reply = await this.noteEntityService.pack(note.replyId, this.user, { diff --git a/packages/backend/src/server/api/stream/channels/home-timeline.ts b/packages/backend/src/server/api/stream/channels/home-timeline.ts index fe0cc37b6b..d740b2efb7 100644 --- a/packages/backend/src/server/api/stream/channels/home-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/home-timeline.ts @@ -12,6 +12,7 @@ class HomeTimelineChannel extends Channel { public static shouldShare = true; public static requireCredential = true; private withReplies: boolean; + private withFiles: boolean; constructor( private noteEntityService: NoteEntityService, @@ -26,6 +27,7 @@ class HomeTimelineChannel extends Channel { @bindThis public async init(params: any) { this.withReplies = params.withReplies as boolean; + this.withFiles = params.withFiles as boolean; this.subscriber.on('notesStream', this.onNote); } @@ -42,6 +44,9 @@ class HomeTimelineChannel extends Channel { // Ignore notes from instances the user has muted if (isInstanceMuted(note, new Set(this.userProfile!.mutedInstances ?? []))) return; + // ファイルを含まない投稿は除外 + if (this.withFiles && (note.files === undefined || note.files.length === 0)) return; + if (['followers', 'specified'].includes(note.visibility)) { note = await this.noteEntityService.pack(note.id, this.user!, { detail: true, diff --git a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts index 5a33e13cf5..6627621dc8 100644 --- a/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/hybrid-timeline.ts @@ -14,6 +14,7 @@ class HybridTimelineChannel extends Channel { public static shouldShare = true; public static requireCredential = true; private withReplies: boolean; + private withFiles: boolean; constructor( private metaService: MetaService, @@ -33,6 +34,7 @@ class HybridTimelineChannel extends Channel { if (!policies.ltlAvailable) return; this.withReplies = params.withReplies as boolean; + this.withFiles = params.withFiles as boolean; // Subscribe events this.subscriber.on('notesStream', this.onNote); @@ -51,6 +53,9 @@ class HybridTimelineChannel extends Channel { (note.channelId != null && this.followingChannels.has(note.channelId)) )) return; + // ファイルを含まない投稿は除外 + if (this.withFiles && (note.files === undefined || note.files.length === 0)) return; + if (['followers', 'specified'].includes(note.visibility)) { note = await this.noteEntityService.pack(note.id, this.user!, { detail: true, diff --git a/packages/backend/src/server/api/stream/channels/local-timeline.ts b/packages/backend/src/server/api/stream/channels/local-timeline.ts index 9ca4db8ced..30be8778ed 100644 --- a/packages/backend/src/server/api/stream/channels/local-timeline.ts +++ b/packages/backend/src/server/api/stream/channels/local-timeline.ts @@ -13,6 +13,7 @@ class LocalTimelineChannel extends Channel { public static shouldShare = true; public static requireCredential = false; private withReplies: boolean; + private withFiles: boolean; constructor( private metaService: MetaService, @@ -32,6 +33,7 @@ class LocalTimelineChannel extends Channel { if (!policies.ltlAvailable) return; this.withReplies = params.withReplies as boolean; + this.withFiles = params.withFiles as boolean; // Subscribe events this.subscriber.on('notesStream', this.onNote); @@ -43,6 +45,9 @@ class LocalTimelineChannel extends Channel { if (note.visibility !== 'public') return; if (note.channelId != null && !this.followingChannels.has(note.channelId)) return; + // ファイルを含まない投稿は除外 + if (this.withFiles && (note.files === undefined || note.files.length === 0)) return; + // リプライなら再pack if (note.replyId != null) { note.reply = await this.noteEntityService.pack(note.replyId, this.user, { diff --git a/packages/backend/src/server/web/manifest.json b/packages/backend/src/server/web/manifest.json index 41171d62a1..c57fbfe5b6 100644 --- a/packages/backend/src/server/web/manifest.json +++ b/packages/backend/src/server/web/manifest.json @@ -7,13 +7,13 @@ "theme_color": "#86b300", "icons": [ { - "src": "/static-assets/icons/192.png", + "src": "/static-assets/icons/192art.png", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/static-assets/icons/512.png", + "src": "/static-assets/icons/512art.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/packages/frontend/assets/cookie.png b/packages/frontend/assets/cookie.png index 4a7f040613..ce87628e8b 100644 Binary files a/packages/frontend/assets/cookie.png and b/packages/frontend/assets/cookie.png differ diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index 0527811ab0..517376cb9d 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -59,6 +59,7 @@
+ {{ i18n.ts.contentWarningCheckRule }} {{ i18n.ts.notSpecifiedMentionWarning }} -
@@ -1052,6 +1053,10 @@ defineExpose({ background: var(--X4); } +.contentWarningCheckRule { + margin: 0 20px 16px 20px; +} + .hasNotSpecifiedMentions { margin: 0 20px 16px 20px; } diff --git a/packages/frontend/src/components/MkTimeline.vue b/packages/frontend/src/components/MkTimeline.vue index 062d0bd87a..348bd5a3a4 100644 --- a/packages/frontend/src/components/MkTimeline.vue +++ b/packages/frontend/src/components/MkTimeline.vue @@ -74,6 +74,17 @@ if (props.src === 'antenna') { withReplies: defaultStore.state.showTimelineReplies, }); connection.on('note', prepend); +} else if (props.src === 'media') { + endpoint = 'notes/hybrid-timeline'; + query = { + withFiles: true, + withReplies: defaultStore.state.showTimelineReplies, + }; + connection = stream.useChannel('hybridTimeline', { + withFiles: true, + withReplies: defaultStore.state.showTimelineReplies, + }); + connection.on('note', prepend); } else if (props.src === 'social') { endpoint = 'notes/hybrid-timeline'; query = { diff --git a/packages/frontend/src/pages/about-misskey.vue b/packages/frontend/src/pages/about-misskey.vue index 6d2f7e155e..e8647ba432 100644 --- a/packages/frontend/src/pages/about-misskey.vue +++ b/packages/frontend/src/pages/about-misskey.vue @@ -24,11 +24,21 @@