Merge branch 'art/dev' into art/bump-13.14.2
Signed-off-by: Mogyuchi <mogyuchi@mogyuchi.jp>
4
.github/workflows/check_copyright_year.yml
vendored
|
|
@ -3,8 +3,8 @@ name: Check copyright year
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- art/main
|
||||
- art/dev
|
||||
|
||||
jobs:
|
||||
check_copyright_year:
|
||||
|
|
|
|||
18
.github/workflows/docker-develop.yml
vendored
|
|
@ -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:
|
||||
|
|
|
|||
16
.github/workflows/docker.yml
vendored
|
|
@ -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:
|
||||
|
|
|
|||
4
.github/workflows/dockle.yml
vendored
|
|
@ -4,8 +4,8 @@ name: Dockle
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- art/main
|
||||
- art/dev
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
|
|
|
|||
4
.github/workflows/lint.yml
vendored
|
|
@ -3,8 +3,8 @@ name: Lint
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- art/main
|
||||
- art/dev
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
|
|
|
|||
13
.github/workflows/reviewer_lottery.yml
vendored
|
|
@ -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 }}
|
||||
2
.github/workflows/storybook.yml
vendored
|
|
@ -5,7 +5,7 @@ on:
|
|||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request_target:
|
||||
# pull_request_target:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
|
|
|||
4
.github/workflows/test-backend.yml
vendored
|
|
@ -3,8 +3,8 @@ name: Test (backend)
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- art/main
|
||||
- art/dev
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
|
|
|
|||
4
.github/workflows/test-frontend.yml
vendored
|
|
@ -3,8 +3,8 @@ name: Test (frontend)
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- art/main
|
||||
- art/dev
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
|
|
|
|||
4
.github/workflows/test-misskey-js.yml
vendored
|
|
@ -5,9 +5,9 @@ name: Test (misskey.js)
|
|||
|
||||
on:
|
||||
push:
|
||||
branches: [ develop ]
|
||||
branches: [ art/dev ]
|
||||
pull_request:
|
||||
branches: [ develop ]
|
||||
branches: [ art/dev ]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
|
|
|
|||
4
.github/workflows/test-production.yml
vendored
|
|
@ -3,8 +3,8 @@ name: Test (production install and build)
|
|||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- art/main
|
||||
- art/dev
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
|
|
|
|||
|
|
@ -1,3 +1,8 @@
|
|||
<div align="center">
|
||||
<img src="https://github.com/Misskey-art/misskey/assets/56180684/852c4783-eb4d-413d-b0ce-b184e9525ec8" alt="Misskey art logo" height=200/>
|
||||
<h2>Fork of Misskey by Misskey.art</h2>
|
||||
</div>
|
||||
|
||||
<div align="center">
|
||||
<a href="https://misskey-hub.net">
|
||||
<img src="./assets/title_float.svg" alt="Misskey logo" style="border-radius:50%" width="400"/>
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
4
locales/index.d.ts
vendored
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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: "グローバル"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "misskey",
|
||||
"version": "13.14.2",
|
||||
"version": "13.14.2-art+1.0",
|
||||
"codename": "nasubi",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 26 KiB |
BIN
packages/backend/assets/icons/192art.png
Normal file
|
After Width: | Height: | Size: 117 KiB |
|
Before Width: | Height: | Size: 162 KiB |
BIN
packages/backend/assets/icons/512art.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
packages/backend/assets/icons/mi-art.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 57 KiB |
|
|
@ -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, {
|
||||
|
|
|
|||
|
|
@ -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<string>(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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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, {
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 4.7 KiB |
|
|
@ -59,6 +59,7 @@
|
|||
<button class="_buttonPrimary" style="padding: 4px; border-radius: 8px;" @click="addVisibleUser"><i class="ti ti-plus ti-fw"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<MkInfo v-if="useCw" warn :class="$style.contentWarningCheckRule">{{ i18n.ts.contentWarningCheckRule }}</MkInfo>
|
||||
<MkInfo v-if="hasNotSpecifiedMentions" warn :class="$style.hasNotSpecifiedMentions">{{ i18n.ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ i18n.ts.add }}</button></MkInfo>
|
||||
<input v-show="useCw" ref="cwInputEl" v-model="cw" :class="$style.cw" :placeholder="i18n.ts.annotation" @keydown="onKeydown">
|
||||
<div :class="[$style.textOuter, { [$style.withCw]: useCw }]">
|
||||
|
|
@ -1052,6 +1053,10 @@ defineExpose({
|
|||
background: var(--X4);
|
||||
}
|
||||
|
||||
.contentWarningCheckRule {
|
||||
margin: 0 20px 16px 20px;
|
||||
}
|
||||
|
||||
.hasNotSpecifiedMentions {
|
||||
margin: 0 20px 16px 20px;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -24,11 +24,21 @@
|
|||
</div>
|
||||
<FormSection>
|
||||
<div class="_formLinks">
|
||||
<FormLink to="https://github.com/misskey-dev/misskey" external>
|
||||
<FormLink to="https://github.com/Misskey-art/misskey" external>
|
||||
<template #icon><i class="ti ti-code"></i></template>
|
||||
{{ i18n.ts._aboutMisskey.source }}
|
||||
<template #suffix>GitHub</template>
|
||||
</FormLink>
|
||||
<FormLink to="https://github.com/misskey-dev/misskey" external>
|
||||
<template #icon><i class="ti ti-code"></i></template>
|
||||
{{ i18n.ts._aboutMisskey.originalSource }}
|
||||
<template #suffix>GitHub</template>
|
||||
</FormLink>
|
||||
<FormLink to="https://github.com/misskeyIO/misskey" external>
|
||||
<template #icon><i class="ti ti-code"></i></template>
|
||||
{{ i18n.ts._aboutMisskey.ioSource }}
|
||||
<template #suffix>GitHub</template>
|
||||
</FormLink>
|
||||
<FormLink to="https://crowdin.com/project/misskey" external>
|
||||
<template #icon><i class="ti ti-language-hiragana"></i></template>
|
||||
{{ i18n.ts._aboutMisskey.translation }}
|
||||
|
|
|
|||
|
|
@ -128,6 +128,11 @@ const headerTabs = $computed(() => [{
|
|||
title: i18n.ts._timelines.local,
|
||||
icon: 'ti ti-planet',
|
||||
iconOnly: true,
|
||||
}, {
|
||||
key: 'media',
|
||||
title: i18n.ts._timelines.media,
|
||||
icon: 'ti ti-photo',
|
||||
iconOnly: true,
|
||||
}, {
|
||||
key: 'social',
|
||||
title: i18n.ts._timelines.social,
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ export type Column = {
|
|||
channelId?: string;
|
||||
roleId?: string;
|
||||
includingTypes?: typeof notificationTypes[number][];
|
||||
tl?: 'home' | 'local' | 'social' | 'global';
|
||||
tl?: 'home' | 'local' | 'media' | 'social' | 'global';
|
||||
};
|
||||
|
||||
export const deckStore = markRaw(new Storage('deck', {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
<i v-if="column.tl === 'home'" class="ti ti-home"></i>
|
||||
<i v-else-if="column.tl === 'local'" class="ti ti-planet"></i>
|
||||
<i v-else-if="column.tl === 'social'" class="ti ti-rocket"></i>
|
||||
<i v-else-if="column.tl === 'media'" class="ti ti-photo"></i>
|
||||
<i v-else-if="column.tl === 'global'" class="ti ti-whirl"></i>
|
||||
<span style="margin-left: 8px;">{{ column.name }}</span>
|
||||
</template>
|
||||
|
|
@ -56,6 +57,8 @@ async function setType() {
|
|||
value: 'home' as const, text: i18n.ts._timelines.home,
|
||||
}, {
|
||||
value: 'local' as const, text: i18n.ts._timelines.local,
|
||||
}, {
|
||||
value: 'media' as const, text: i18n.ts._timelines.media,
|
||||
}, {
|
||||
value: 'social' as const, text: i18n.ts._timelines.social,
|
||||
}, {
|
||||
|
|
|
|||
|
|
@ -117,6 +117,10 @@ const choose = async (ev) => {
|
|||
text: i18n.ts._timelines.local,
|
||||
icon: 'ti ti-planet',
|
||||
action: () => { setSrc('local'); },
|
||||
}, {
|
||||
text: i18n.ts._timelines.media,
|
||||
icon: 'ti ti-photo',
|
||||
action: () => { setSrc('media'); },
|
||||
}, {
|
||||
text: i18n.ts._timelines.social,
|
||||
icon: 'ti ti-rocket',
|
||||
|
|
|
|||