Compare commits
28 Commits
Author | SHA1 | Date | |
---|---|---|---|
52c3f9e98c | |||
6c8b4184fe | |||
a0979f8435 | |||
faba21d003 | |||
d82c5dff71 | |||
59fbc5b054 | |||
2c1a7f4392 | |||
769e6182d8 | |||
88176a17a3 | |||
fc660e869f | |||
dc04869650 | |||
93c3f34813 | |||
1282eed192 | |||
962b3ca78e | |||
62d17c9266 | |||
f5b928a537 | |||
c8811894b5 | |||
e579b49228 | |||
9561908ad3 | |||
fac7ebf4f6 | |||
a0769d65e3 | |||
d17aa4b24e | |||
310371658b | |||
7ca073aafd | |||
7216d0fb1f | |||
22a9e950c7 | |||
6683d50bae | |||
8f26176273 |
@ -2,6 +2,11 @@ version: 2.1
|
|||||||
|
|
||||||
executors:
|
executors:
|
||||||
default:
|
default:
|
||||||
|
working_directory: /tmp/workspace
|
||||||
|
docker:
|
||||||
|
- image: misskey/ci:latest
|
||||||
|
- image: circleci/mongo:latest
|
||||||
|
with-redis:
|
||||||
working_directory: /tmp/workspace
|
working_directory: /tmp/workspace
|
||||||
docker:
|
docker:
|
||||||
- image: misskey/ci:latest
|
- image: misskey/ci:latest
|
||||||
@ -24,7 +29,6 @@ jobs:
|
|||||||
name: OK
|
name: OK
|
||||||
command: |
|
command: |
|
||||||
echo -e '\033[0;32mOK\033[0;39m'
|
echo -e '\033[0;32mOK\033[0;39m'
|
||||||
|
|
||||||
build:
|
build:
|
||||||
executor: default
|
executor: default
|
||||||
steps:
|
steps:
|
||||||
@ -68,10 +72,13 @@ jobs:
|
|||||||
- .
|
- .
|
||||||
test:
|
test:
|
||||||
parameters:
|
parameters:
|
||||||
without_redis:
|
executor:
|
||||||
type: string
|
type: string
|
||||||
default: ""
|
default: "default"
|
||||||
executor: default
|
without_redis:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
executor: <<parameters.executor>>
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: /tmp/workspace
|
at: /tmp/workspace
|
||||||
@ -94,12 +101,11 @@ jobs:
|
|||||||
key: yarn-v1-arch-{{ arch }}-env-{{ .Environment.variableName }}-package-{{ checksum "package.json" }}-lock-{{ checksum "yarn.lock" }}
|
key: yarn-v1-arch-{{ arch }}-env-{{ .Environment.variableName }}-package-{{ checksum "package.json" }}-lock-{{ checksum "yarn.lock" }}
|
||||||
paths:
|
paths:
|
||||||
- node_modules
|
- node_modules
|
||||||
|
|
||||||
docker:
|
docker:
|
||||||
parameters:
|
parameters:
|
||||||
with_deploy:
|
with_deploy:
|
||||||
type: string
|
type: boolean
|
||||||
default: ""
|
default: false
|
||||||
executor: docker
|
executor: docker
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
@ -126,7 +132,7 @@ jobs:
|
|||||||
|
|
||||||
workflows:
|
workflows:
|
||||||
version: 2
|
version: 2
|
||||||
build-and-test:
|
nodejs:
|
||||||
jobs:
|
jobs:
|
||||||
- ok:
|
- ok:
|
||||||
filters:
|
filters:
|
||||||
@ -143,6 +149,7 @@ workflows:
|
|||||||
- imgbot
|
- imgbot
|
||||||
- patch-autogen
|
- patch-autogen
|
||||||
- test:
|
- test:
|
||||||
|
executor: with-redis
|
||||||
requires:
|
requires:
|
||||||
- build
|
- build
|
||||||
filters:
|
filters:
|
||||||
@ -153,7 +160,7 @@ workflows:
|
|||||||
- imgbot
|
- imgbot
|
||||||
- patch-autogen
|
- patch-autogen
|
||||||
- test:
|
- test:
|
||||||
without_redis: "true"
|
without_redis: true
|
||||||
requires:
|
requires:
|
||||||
- build
|
- build
|
||||||
filters:
|
filters:
|
||||||
@ -165,12 +172,21 @@ workflows:
|
|||||||
- l10n_develop
|
- l10n_develop
|
||||||
- imgbot
|
- imgbot
|
||||||
- patch-autogen
|
- patch-autogen
|
||||||
# - docker:
|
docker:
|
||||||
# filters:
|
jobs:
|
||||||
# branches:
|
- hold:
|
||||||
# ignore: master
|
type: approval
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: master
|
||||||
- docker:
|
- docker:
|
||||||
with_deploy: "true"
|
requires:
|
||||||
|
- hold
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
ignore: master
|
||||||
|
- docker:
|
||||||
|
with_deploy: true
|
||||||
filters:
|
filters:
|
||||||
branches:
|
branches:
|
||||||
only: master
|
only: master
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
ChangeLog
|
ChangeLog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
10.84.1
|
||||||
|
----------
|
||||||
|
* deckにフォローされていますマークを追加
|
||||||
|
* URLプレビューのサムネイルの調整
|
||||||
|
* 管理画面でサイレンスされているユーザーを一覧できるように
|
||||||
|
* ドキュメントにアクセスできない問題を修正
|
||||||
|
* ジョブキューを無効化
|
||||||
|
* 軽微なバグ修正
|
||||||
|
|
||||||
10.84.0
|
10.84.0
|
||||||
----------
|
----------
|
||||||
* インスタンス管理の強化
|
* インスタンス管理の強化
|
||||||
|
10
Dockerfile
10
Dockerfile
@ -23,15 +23,11 @@ RUN apk add --no-cache \
|
|||||||
procps \
|
procps \
|
||||||
python \
|
python \
|
||||||
zlib-dev
|
zlib-dev
|
||||||
RUN npm i -g node-gyp
|
RUN npm i -g yarn
|
||||||
|
|
||||||
COPY ./package.json ./
|
|
||||||
RUN npm i
|
|
||||||
|
|
||||||
COPY . ./
|
COPY . ./
|
||||||
RUN node-gyp configure \
|
RUN yarn install
|
||||||
&& node-gyp build \
|
RUN yarn build
|
||||||
&& npm run build
|
|
||||||
|
|
||||||
FROM base AS runner
|
FROM base AS runner
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
[](https://misskey.xyz/)
|
[](https://misskey.xyz/)
|
||||||
================================================================
|
================================================================
|
||||||
|
|
||||||
[](https://circleci.com/gh/syuilo/misskey)
|
[](https://circleci.com/gh/syuilo/misskey)
|
||||||
[](https://david-dm.org/syuilo/misskey)
|
[](https://david-dm.org/syuilo/misskey)
|
||||||
[](http://makeapullrequest.com)
|
[](http://makeapullrequest.com)
|
||||||
|
|
||||||
**A forever evolving, sophisticated microblogging platform.**
|
**A forever evolving, sophisticated microblogging platform.**
|
||||||
|
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "オリジン"
|
title: "オリジン"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "オリジン"
|
title: "オリジン"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
|
@ -1118,7 +1118,7 @@ admin/views/charts.vue:
|
|||||||
users: "The number of users: increase/decrease"
|
users: "The number of users: increase/decrease"
|
||||||
users-total: "Total users"
|
users-total: "Total users"
|
||||||
active-users: "Active users"
|
active-users: "Active users"
|
||||||
drive: "Capacity used as the storage: increase/decrease"
|
drive: "Increase and decrease in storage capacity use"
|
||||||
drive-total: "Total usage of Drive"
|
drive-total: "Total usage of Drive"
|
||||||
drive-files: "The number of files on the storage: increase/decrease"
|
drive-files: "The number of files on the storage: increase/decrease"
|
||||||
drive-files-total: "Total number of files on Drive"
|
drive-files-total: "Total number of files on Drive"
|
||||||
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "Moderator"
|
moderator: "Moderator"
|
||||||
adminOrModerator: "Admin/Moderator"
|
adminOrModerator: "Admin/Moderator"
|
||||||
verified: "Verified account"
|
verified: "Verified account"
|
||||||
|
silenced: "Already silenced"
|
||||||
suspended: "Suspended"
|
suspended: "Suspended"
|
||||||
origin:
|
origin:
|
||||||
title: "Origin"
|
title: "Origin"
|
||||||
@ -1244,7 +1245,7 @@ admin/views/federation.vue:
|
|||||||
latest-request-sent-at: "Time of last request sent"
|
latest-request-sent-at: "Time of last request sent"
|
||||||
latest-request-received-at: "Last request received at"
|
latest-request-received-at: "Last request received at"
|
||||||
remove-all-following: "Withold all followers"
|
remove-all-following: "Withold all followers"
|
||||||
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
|
remove-all-following-info: "Unfollow all accounts from {host}. Please run this if the instance no longer exists."
|
||||||
block: "Block"
|
block: "Block"
|
||||||
marked-as-closed: "Marked as closed"
|
marked-as-closed: "Marked as closed"
|
||||||
lookup: "Look up"
|
lookup: "Look up"
|
||||||
@ -1254,8 +1255,8 @@ admin/views/federation.vue:
|
|||||||
sorts:
|
sorts:
|
||||||
caughtAtAsc: "Date of discovery (Ascending)"
|
caughtAtAsc: "Date of discovery (Ascending)"
|
||||||
caughtAtDesc: "Date of discovery (Descending)"
|
caughtAtDesc: "Date of discovery (Descending)"
|
||||||
lastCommunicatedAtAsc: "最後にやり取りした日時が古い順"
|
lastCommunicatedAtAsc: "The date and time of the older interactions"
|
||||||
lastCommunicatedAtDesc: "最後にやり取りした日時が新しい順"
|
lastCommunicatedAtDesc: "The date and time of the newer interactions"
|
||||||
notesAsc: "Order by least Notes posted"
|
notesAsc: "Order by least Notes posted"
|
||||||
notesDesc: "Order by most Notes posted"
|
notesDesc: "Order by most Notes posted"
|
||||||
usersAsc: "Less followers"
|
usersAsc: "Less followers"
|
||||||
@ -1264,10 +1265,10 @@ admin/views/federation.vue:
|
|||||||
followingDesc: "Has more followers"
|
followingDesc: "Has more followers"
|
||||||
followersAsc: "Sort by having less followers"
|
followersAsc: "Sort by having less followers"
|
||||||
followersDesc: "Sort by the larger number of followers"
|
followersDesc: "Sort by the larger number of followers"
|
||||||
driveUsageAsc: "ドライブ使用量が少ない順"
|
driveUsageAsc: "Least storage used"
|
||||||
driveUsageDesc: "ドライブ使用量が多い順"
|
driveUsageDesc: "Most storage used"
|
||||||
driveFilesAsc: "ドライブのファイル数が少ない順"
|
driveFilesAsc: "By the smallest number of files stored on Drive"
|
||||||
driveFilesDesc: "ドライブのファイル数が多い順"
|
driveFilesDesc: "By the largest number of files stored on Drive"
|
||||||
state: "Status"
|
state: "Status"
|
||||||
states:
|
states:
|
||||||
all: "All"
|
all: "All"
|
||||||
@ -1282,12 +1283,12 @@ admin/views/federation.vue:
|
|||||||
users-total: "Total number of users"
|
users-total: "Total number of users"
|
||||||
notes: "Increase, or decrease in the number of notes"
|
notes: "Increase, or decrease in the number of notes"
|
||||||
notes-total: "Total number of notes"
|
notes-total: "Total number of notes"
|
||||||
ff: "フォロー/フォロワーの増減"
|
ff: "Increase of followers"
|
||||||
ff-total: "フォロー/フォロワーの積算"
|
ff-total: "Total number of follows accumulated"
|
||||||
drive-usage: "ドライブ使用量の増減"
|
drive-usage: "Increase and decrease in storage use"
|
||||||
drive-usage-total: "ドライブ使用量の積算"
|
drive-usage-total: "Total usage of the Drive"
|
||||||
drive-files: "ドライブファイル数の増減"
|
drive-files: "Increase, or decrease in the number of files stored on Drive"
|
||||||
drive-files-total: "ドライブファイル数の積算"
|
drive-files-total: "The number of files accumulated on Drive"
|
||||||
chart-spans:
|
chart-spans:
|
||||||
hour: "Hourly"
|
hour: "Hourly"
|
||||||
day: "Daily"
|
day: "Daily"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "Media view"
|
is-media-view: "Media view"
|
||||||
edit: "Options"
|
edit: "Options"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "Follows you"
|
||||||
posts: "Posts"
|
posts: "Posts"
|
||||||
following: "Following"
|
following: "Following"
|
||||||
followers: "Followers"
|
followers: "Followers"
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "オリジン"
|
title: "オリジン"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "Modérateur"
|
moderator: "Modérateur"
|
||||||
adminOrModerator: "Administrateur/Modérateur"
|
adminOrModerator: "Administrateur/Modérateur"
|
||||||
verified: "Compte vérifié"
|
verified: "Compte vérifié"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "Suspendu"
|
suspended: "Suspendu"
|
||||||
origin:
|
origin:
|
||||||
title: "Origine"
|
title: "Origine"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "Vue média"
|
is-media-view: "Vue média"
|
||||||
edit: "Option"
|
edit: "Option"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "Notes"
|
posts: "Notes"
|
||||||
following: "Suit"
|
following: "Suit"
|
||||||
followers: "Abonnés"
|
followers: "Abonnés"
|
||||||
|
6
locales/index.d.ts
vendored
6
locales/index.d.ts
vendored
@ -1,5 +1,3 @@
|
|||||||
type Locale = { [key: string]: string };
|
declare const locales: { [lang: string]: any };
|
||||||
|
|
||||||
declare const locales: { [lang: string]: Locale };
|
export = locales;
|
||||||
|
|
||||||
export default locales;
|
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "オリジン"
|
title: "オリジン"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
|
@ -1319,6 +1319,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "オリジン"
|
title: "オリジン"
|
||||||
@ -1833,6 +1834,7 @@ deck/deck.tl-column.vue:
|
|||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
|
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "オリジン"
|
title: "オリジン"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
|
@ -113,7 +113,7 @@ common:
|
|||||||
use-avatar-reversi-stones: "리버시의 돌로 아바타를 사용"
|
use-avatar-reversi-stones: "리버시의 돌로 아바타를 사용"
|
||||||
verified-user: "공식 계정"
|
verified-user: "공식 계정"
|
||||||
disable-animated-mfm: "글의 문자 애니메이션을 비활성화"
|
disable-animated-mfm: "글의 문자 애니메이션을 비활성화"
|
||||||
disable-showing-animated-images: "アニメーション画像を再生しない"
|
disable-showing-animated-images: "움직이는 이미지를 자동으로 재생하지 않음"
|
||||||
suggest-recent-hashtags: "최근 해시태그를 글 작성란에 표시"
|
suggest-recent-hashtags: "최근 해시태그를 글 작성란에 표시"
|
||||||
always-show-nsfw: "항상 열람주의 미디어를 표시"
|
always-show-nsfw: "항상 열람주의 미디어를 표시"
|
||||||
always-mark-nsfw: "항상 미디어를 열람주의로 설정하여 게시"
|
always-mark-nsfw: "항상 미디어를 열람주의로 설정하여 게시"
|
||||||
@ -345,8 +345,8 @@ common/views/components/note-menu.vue:
|
|||||||
copy-link: "링크 복사"
|
copy-link: "링크 복사"
|
||||||
favorite: "이 노트 즐겨찾기"
|
favorite: "이 노트 즐겨찾기"
|
||||||
unfavorite: "즐겨찾기에서 제거"
|
unfavorite: "즐겨찾기에서 제거"
|
||||||
watch: "ウォッチ"
|
watch: "지켜보기"
|
||||||
unwatch: "ウォッチ解除"
|
unwatch: "지켜보기 해제"
|
||||||
pin: "프로필에 고정"
|
pin: "프로필에 고정"
|
||||||
unpin: "프로필에서 고정 해제"
|
unpin: "프로필에서 고정 해제"
|
||||||
delete: "삭제"
|
delete: "삭제"
|
||||||
@ -509,13 +509,13 @@ common/views/components/profile-editor.vue:
|
|||||||
email-address: "메일 주소"
|
email-address: "메일 주소"
|
||||||
email-verified: "매일 주소가 확인되었습니다"
|
email-verified: "매일 주소가 확인되었습니다"
|
||||||
email-not-verified: "메일 주소가 확인되지 않았습니다. 받은 편지함을 확인하여 주시기 바랍니다."
|
email-not-verified: "메일 주소가 확인되지 않았습니다. 받은 편지함을 확인하여 주시기 바랍니다."
|
||||||
export: "エクスポート"
|
export: "내보내기"
|
||||||
export-targets:
|
export-targets:
|
||||||
all-notes: "すべての投稿データ"
|
all-notes: "모든 글 데이터"
|
||||||
following-list: "フォロー"
|
following-list: "팔로잉"
|
||||||
mute-list: "ミュート"
|
mute-list: "뮤트"
|
||||||
blocking-list: "ブロック"
|
blocking-list: "차단"
|
||||||
export-requested: "エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、ドライブにファイルが追加されます。"
|
export-requested: "내보내기를 요청하였습니다. 이 작업은 시간이 걸릴 수 있습니다. 내보내기가 완료되면 드라이브에 파일이 추가됩니다."
|
||||||
common/views/components/user-list-editor.vue:
|
common/views/components/user-list-editor.vue:
|
||||||
users: "사용자"
|
users: "사용자"
|
||||||
rename: "리스트 이름 바꾸기"
|
rename: "리스트 이름 바꾸기"
|
||||||
@ -1007,7 +1007,7 @@ admin/views/index.vue:
|
|||||||
announcements: "공지사항"
|
announcements: "공지사항"
|
||||||
hashtags: "해시태그"
|
hashtags: "해시태그"
|
||||||
abuse: "스팸 신고"
|
abuse: "스팸 신고"
|
||||||
queue: "ジョブキュー"
|
queue: "작업 대기열"
|
||||||
back-to-misskey: "Misskey로 돌아가기"
|
back-to-misskey: "Misskey로 돌아가기"
|
||||||
admin/views/dashboard.vue:
|
admin/views/dashboard.vue:
|
||||||
dashboard: "대시보드"
|
dashboard: "대시보드"
|
||||||
@ -1018,8 +1018,8 @@ admin/views/dashboard.vue:
|
|||||||
this-instance: "이 인스턴스"
|
this-instance: "이 인스턴스"
|
||||||
federated: "연합"
|
federated: "연합"
|
||||||
admin/views/queue.vue:
|
admin/views/queue.vue:
|
||||||
operation: "操作"
|
operation: "동작"
|
||||||
remove-all-jobs: "すべてのジョブをクリア"
|
remove-all-jobs: "모든 작업 제거"
|
||||||
admin/views/abuse.vue:
|
admin/views/abuse.vue:
|
||||||
title: "스팸 신고"
|
title: "스팸 신고"
|
||||||
target: "대상"
|
target: "대상"
|
||||||
@ -1114,7 +1114,7 @@ admin/views/charts.vue:
|
|||||||
notes: "글 증감 (통합)"
|
notes: "글 증감 (통합)"
|
||||||
local-notes: "글 증감 (로컬)"
|
local-notes: "글 증감 (로컬)"
|
||||||
remote-notes: "글 증감 (원격)"
|
remote-notes: "글 증감 (원격)"
|
||||||
notes-total: "글 누적 수"
|
notes-total: "글 누적"
|
||||||
users: "사용자 증감"
|
users: "사용자 증감"
|
||||||
users-total: "사용자 누적"
|
users-total: "사용자 누적"
|
||||||
active-users: "활성 사용자 수"
|
active-users: "활성 사용자 수"
|
||||||
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "모더레이터"
|
moderator: "모더레이터"
|
||||||
adminOrModerator: "관리자+모더레이터"
|
adminOrModerator: "관리자+모더레이터"
|
||||||
verified: "공식 계정"
|
verified: "공식 계정"
|
||||||
|
silenced: "침묵됨"
|
||||||
suspended: "정지됨"
|
suspended: "정지됨"
|
||||||
origin:
|
origin:
|
||||||
title: "위치 (오리진)"
|
title: "위치 (오리진)"
|
||||||
@ -1234,63 +1235,63 @@ admin/views/announcements.vue:
|
|||||||
admin/views/hashtags.vue:
|
admin/views/hashtags.vue:
|
||||||
hided-tags: "Hidden Tags"
|
hided-tags: "Hidden Tags"
|
||||||
admin/views/federation.vue:
|
admin/views/federation.vue:
|
||||||
federation: "連合"
|
federation: "연합"
|
||||||
host: "ホスト"
|
host: "호스트"
|
||||||
notes: "投稿"
|
notes: "글"
|
||||||
users: "ユーザー"
|
users: "사용자"
|
||||||
following: "フォロー中"
|
following: "팔로우 중"
|
||||||
followers: "フォロワー"
|
followers: "팔로워"
|
||||||
status: "ステータス"
|
status: "상태"
|
||||||
latest-request-sent-at: "直近のリクエスト送信"
|
latest-request-sent-at: "마지막으로 요청을 전송한 시간"
|
||||||
latest-request-received-at: "直近のリクエスト受信"
|
latest-request-received-at: "마지막으로 요청을 받은 시간"
|
||||||
remove-all-following: "フォローを全解除"
|
remove-all-following: "모든 팔로잉 해제"
|
||||||
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
|
remove-all-following-info: "{host}(으)로부터 모든 팔로잉을 해제합니다. 해당 인스턴스가 더 이상 존재하지 않게 된 경우 등에 실행하십시오."
|
||||||
block: "ブロック"
|
block: "차단"
|
||||||
marked-as-closed: "閉鎖されているとマーク"
|
marked-as-closed: "폐쇄된 것으로 표시"
|
||||||
lookup: "照会"
|
lookup: "조회"
|
||||||
instances: "インスタンス"
|
instances: "인스턴스"
|
||||||
instance-not-registered: "そのインスタンスは登録されていません"
|
instance-not-registered: "해당 인스턴스가 등록되어 있지 않습니다"
|
||||||
sort: "ソート"
|
sort: "정렬"
|
||||||
sorts:
|
sorts:
|
||||||
caughtAtAsc: "登録日時が古い順"
|
caughtAtAsc: "등록일이 오래된 순"
|
||||||
caughtAtDesc: "登録日時が新しい順"
|
caughtAtDesc: "등록일이 최신인 순"
|
||||||
lastCommunicatedAtAsc: "最後にやり取りした日時が古い順"
|
lastCommunicatedAtAsc: "마지막으로 요청을 주고받은 일시가 오래된 순"
|
||||||
lastCommunicatedAtDesc: "最後にやり取りした日時が新しい順"
|
lastCommunicatedAtDesc: "마지막으로 요청을 주고받은 일시가 빠른 순"
|
||||||
notesAsc: "投稿が少ない順"
|
notesAsc: "글이 적은 순"
|
||||||
notesDesc: "投稿が多い順"
|
notesDesc: "글이 많은 순"
|
||||||
usersAsc: "ユーザーが少ない順"
|
usersAsc: "사용자가 적은 순"
|
||||||
usersDesc: "ユーザーが多い順"
|
usersDesc: "사용자가 많은 순"
|
||||||
followingAsc: "フォローが少ない順"
|
followingAsc: "팔로잉이 적은 순"
|
||||||
followingDesc: "フォローが多い順"
|
followingDesc: "팔로잉이 많은 순"
|
||||||
followersAsc: "フォロワーが少ない順"
|
followersAsc: "팔로워가 적은 순"
|
||||||
followersDesc: "フォロワーが多い順"
|
followersDesc: "팔로워가 많은 순"
|
||||||
driveUsageAsc: "ドライブ使用量が少ない順"
|
driveUsageAsc: "드라이브 사용량이 적은 순"
|
||||||
driveUsageDesc: "ドライブ使用量が多い順"
|
driveUsageDesc: "드라이브 사용량이 많은 순"
|
||||||
driveFilesAsc: "ドライブのファイル数が少ない順"
|
driveFilesAsc: "드라이브 파일 수가 적은 순"
|
||||||
driveFilesDesc: "ドライブのファイル数が多い順"
|
driveFilesDesc: "드라이브 파일 수가 많은 순"
|
||||||
state: "状態"
|
state: "상태"
|
||||||
states:
|
states:
|
||||||
all: "すべて"
|
all: "모두"
|
||||||
blocked: "ブロック"
|
blocked: "차단됨"
|
||||||
not-responding: "応答なし"
|
not-responding: "응답 없음"
|
||||||
marked-as-closed: "閉鎖とマーク済み"
|
marked-as-closed: "폐쇄된 것으로 표시됨"
|
||||||
result-is-truncated: "上位{n}件を表示しています。"
|
result-is-truncated: "상위 {n}개를 표시하고 있습니다."
|
||||||
charts: "チャート"
|
charts: "차트"
|
||||||
chart-srcs:
|
chart-srcs:
|
||||||
requests: "リクエスト"
|
requests: "요청"
|
||||||
users: "ユーザーの増減"
|
users: "사용자 증감"
|
||||||
users-total: "ユーザーの積算"
|
users-total: "사용자 누적"
|
||||||
notes: "投稿の増減"
|
notes: "글 증감"
|
||||||
notes-total: "投稿の積算"
|
notes-total: "글 누적"
|
||||||
ff: "フォロー/フォロワーの増減"
|
ff: "팔로잉/팔로워 증감"
|
||||||
ff-total: "フォロー/フォロワーの積算"
|
ff-total: "팔로잉/팔로워 누적"
|
||||||
drive-usage: "ドライブ使用量の増減"
|
drive-usage: "드라이브 사용량 증감"
|
||||||
drive-usage-total: "ドライブ使用量の積算"
|
drive-usage-total: "드라이브 사용량 누적"
|
||||||
drive-files: "ドライブファイル数の増減"
|
drive-files: "드라이브 파일 수 증감"
|
||||||
drive-files-total: "ドライブファイル数の積算"
|
drive-files-total: "드라이브 파일 수 누적"
|
||||||
chart-spans:
|
chart-spans:
|
||||||
hour: "1時間ごと"
|
hour: "1시간마다"
|
||||||
day: "1日ごと"
|
day: "1일마다"
|
||||||
desktop/views/pages/welcome.vue:
|
desktop/views/pages/welcome.vue:
|
||||||
about: "자세히..."
|
about: "자세히..."
|
||||||
gotit: "알겠습니다"
|
gotit: "알겠습니다"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "미디어 보기"
|
is-media-view: "미디어 보기"
|
||||||
edit: "옵션"
|
edit: "옵션"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "당신을 팔로우합니다"
|
||||||
posts: "글"
|
posts: "글"
|
||||||
following: "팔로잉"
|
following: "팔로잉"
|
||||||
followers: "팔로워"
|
followers: "팔로워"
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "オリジン"
|
title: "オリジン"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "オリジン"
|
title: "オリジン"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "Źródło"
|
title: "Źródło"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "Widok multimediów"
|
is-media-view: "Widok multimediów"
|
||||||
edit: "Opcje"
|
edit: "Opcje"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "Wpisy"
|
posts: "Wpisy"
|
||||||
following: "Śledzeni"
|
following: "Śledzeni"
|
||||||
followers: "Śledzący"
|
followers: "Śledzący"
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "オリジン"
|
title: "オリジン"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "モデレーター"
|
moderator: "モデレーター"
|
||||||
adminOrModerator: "管理者+モデレーター"
|
adminOrModerator: "管理者+モデレーター"
|
||||||
verified: "公式アカウント"
|
verified: "公式アカウント"
|
||||||
|
silenced: "サイレンス済み"
|
||||||
suspended: "凍結済み"
|
suspended: "凍結済み"
|
||||||
origin:
|
origin:
|
||||||
title: "オリジン"
|
title: "オリジン"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "メディアビュー"
|
is-media-view: "メディアビュー"
|
||||||
edit: "オプション"
|
edit: "オプション"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "フォローされています"
|
||||||
posts: "投稿"
|
posts: "投稿"
|
||||||
following: "フォロー"
|
following: "フォロー"
|
||||||
followers: "フォロワー"
|
followers: "フォロワー"
|
||||||
|
@ -1186,6 +1186,7 @@ admin/views/users.vue:
|
|||||||
moderator: "版主"
|
moderator: "版主"
|
||||||
adminOrModerator: "管理员+版主"
|
adminOrModerator: "管理员+版主"
|
||||||
verified: "官方认证账户"
|
verified: "官方认证账户"
|
||||||
|
silenced: "已禁言"
|
||||||
suspended: "已冻结"
|
suspended: "已冻结"
|
||||||
origin:
|
origin:
|
||||||
title: "源自"
|
title: "源自"
|
||||||
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
|
|||||||
is-media-view: "媒体视图"
|
is-media-view: "媒体视图"
|
||||||
edit: "选项"
|
edit: "选项"
|
||||||
deck/deck.user-column.vue:
|
deck/deck.user-column.vue:
|
||||||
|
follows-you: "关注您"
|
||||||
posts: "帖子"
|
posts: "帖子"
|
||||||
following: "关注中"
|
following: "关注中"
|
||||||
followers: "关注者"
|
followers: "关注者"
|
||||||
|
15
package.json
15
package.json
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <i@syuilo.com>",
|
"author": "syuilo <i@syuilo.com>",
|
||||||
"version": "10.84.0",
|
"version": "10.84.1",
|
||||||
"clientVersion": "2.0.14224",
|
"clientVersion": "2.0.14252",
|
||||||
"codename": "nighthike",
|
"codename": "nighthike",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -23,9 +23,6 @@
|
|||||||
"test": "gulp test",
|
"test": "gulp test",
|
||||||
"format": "gulp format"
|
"format": "gulp format"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
|
||||||
"terser": "3.14.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-svg-core": "1.2.14",
|
"@fortawesome/fontawesome-svg-core": "1.2.14",
|
||||||
"@fortawesome/free-brands-svg-icons": "5.7.1",
|
"@fortawesome/free-brands-svg-icons": "5.7.1",
|
||||||
@ -99,7 +96,7 @@
|
|||||||
"@types/websocket": "0.0.40",
|
"@types/websocket": "0.0.40",
|
||||||
"@types/ws": "6.0.1",
|
"@types/ws": "6.0.1",
|
||||||
"animejs": "3.0.1",
|
"animejs": "3.0.1",
|
||||||
"apexcharts": "3.2.2",
|
"apexcharts": "3.3.0",
|
||||||
"autobind-decorator": "2.4.0",
|
"autobind-decorator": "2.4.0",
|
||||||
"autosize": "4.0.2",
|
"autosize": "4.0.2",
|
||||||
"autwh": "0.1.0",
|
"autwh": "0.1.0",
|
||||||
@ -144,7 +141,7 @@
|
|||||||
"hard-source-webpack-plugin": "0.13.1",
|
"hard-source-webpack-plugin": "0.13.1",
|
||||||
"html-minifier": "3.5.21",
|
"html-minifier": "3.5.21",
|
||||||
"http-signature": "1.2.0",
|
"http-signature": "1.2.0",
|
||||||
"insert-text-at-cursor": "0.1.1",
|
"insert-text-at-cursor": "0.1.2",
|
||||||
"is-root": "2.0.0",
|
"is-root": "2.0.0",
|
||||||
"is-svg": "3.0.0",
|
"is-svg": "3.0.0",
|
||||||
"js-yaml": "3.12.1",
|
"js-yaml": "3.12.1",
|
||||||
@ -232,7 +229,7 @@
|
|||||||
"uuid": "3.3.2",
|
"uuid": "3.3.2",
|
||||||
"v-animate-css": "0.0.3",
|
"v-animate-css": "0.0.3",
|
||||||
"video-thumbnail-generator": "1.1.3",
|
"video-thumbnail-generator": "1.1.3",
|
||||||
"vue": "2.6.4",
|
"vue": "2.6.5",
|
||||||
"vue-color": "2.7.0",
|
"vue-color": "2.7.0",
|
||||||
"vue-content-loading": "1.5.3",
|
"vue-content-loading": "1.5.3",
|
||||||
"vue-cropperjs": "3.0.0",
|
"vue-cropperjs": "3.0.0",
|
||||||
@ -245,7 +242,7 @@
|
|||||||
"vue-sequential-entrance": "1.1.3",
|
"vue-sequential-entrance": "1.1.3",
|
||||||
"vue-style-loader": "4.1.2",
|
"vue-style-loader": "4.1.2",
|
||||||
"vue-svg-inline-loader": "1.2.10",
|
"vue-svg-inline-loader": "1.2.10",
|
||||||
"vue-template-compiler": "2.6.4",
|
"vue-template-compiler": "2.6.5",
|
||||||
"vuedraggable": "2.17.0",
|
"vuedraggable": "2.17.0",
|
||||||
"vuewordcloud": "18.7.11",
|
"vuewordcloud": "18.7.11",
|
||||||
"vuex": "3.1.0",
|
"vuex": "3.1.0",
|
||||||
|
@ -5,9 +5,9 @@ program
|
|||||||
.version(pkg.version)
|
.version(pkg.version)
|
||||||
.option('--no-daemons', 'Disable daemon processes (for debbuging)')
|
.option('--no-daemons', 'Disable daemon processes (for debbuging)')
|
||||||
.option('--disable-clustering', 'Disable clustering')
|
.option('--disable-clustering', 'Disable clustering')
|
||||||
.option('--disable-ap-queue', 'Disable creating job queue related to ap')
|
|
||||||
.option('--disable-queue', 'Disable job queue processing')
|
.option('--disable-queue', 'Disable job queue processing')
|
||||||
.option('--only-queue', 'Pocessing job queue only')
|
.option('--only-server', 'Run server only (without job queue)')
|
||||||
|
.option('--only-queue', 'Pocessing job queue only (without server)')
|
||||||
.option('--quiet', 'Suppress all logs')
|
.option('--quiet', 'Suppress all logs')
|
||||||
.option('--verbose', 'Enable all logs')
|
.option('--verbose', 'Enable all logs')
|
||||||
.option('--with-log-time', 'Include timestamp for each logs')
|
.option('--with-log-time', 'Include timestamp for each logs')
|
||||||
@ -15,8 +15,7 @@ program
|
|||||||
.option('--color', 'This option is a dummy for some external program\'s (e.g. forever) issue.')
|
.option('--color', 'This option is a dummy for some external program\'s (e.g. forever) issue.')
|
||||||
.parse(process.argv);
|
.parse(process.argv);
|
||||||
|
|
||||||
/*if (process.env.MK_DISABLE_AP_QUEUE)*/ program.disableApQueue = true;
|
/*if (process.env.MK_DISABLE_QUEUE)*/ program.disableQueue = true;
|
||||||
if (process.env.MK_DISABLE_QUEUE) program.disableQueue = true;
|
|
||||||
if (process.env.MK_ONLY_QUEUE) program.onlyQueue = true;
|
if (process.env.MK_ONLY_QUEUE) program.onlyQueue = true;
|
||||||
|
|
||||||
export { program };
|
export { program };
|
||||||
|
@ -148,7 +148,7 @@ export default Vue.extend({
|
|||||||
return {
|
return {
|
||||||
instance: null,
|
instance: null,
|
||||||
target: null,
|
target: null,
|
||||||
sort: '+caughtAt',
|
sort: '+lastCommunicatedAt',
|
||||||
state: 'all',
|
state: 'all',
|
||||||
limit: 50,
|
limit: 50,
|
||||||
instances: [],
|
instances: [],
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
<option value="admin">{{ $t('users.state.admin') }}</option>
|
<option value="admin">{{ $t('users.state.admin') }}</option>
|
||||||
<option value="moderator">{{ $t('users.state.moderator') }}</option>
|
<option value="moderator">{{ $t('users.state.moderator') }}</option>
|
||||||
<option value="verified">{{ $t('users.state.verified') }}</option>
|
<option value="verified">{{ $t('users.state.verified') }}</option>
|
||||||
|
<option value="silenced">{{ $t('users.state.silenced') }}</option>
|
||||||
<option value="suspended">{{ $t('users.state.suspended') }}</option>
|
<option value="suspended">{{ $t('users.state.suspended') }}</option>
|
||||||
</ui-select>
|
</ui-select>
|
||||||
<ui-select v-model="origin">
|
<ui-select v-model="origin">
|
||||||
@ -89,7 +90,7 @@ export default Vue.extend({
|
|||||||
unsuspending: false,
|
unsuspending: false,
|
||||||
sort: '+createdAt',
|
sort: '+createdAt',
|
||||||
state: 'all',
|
state: 'all',
|
||||||
origin: 'combined',
|
origin: 'local',
|
||||||
limit: 10,
|
limit: 10,
|
||||||
offset: 0,
|
offset: 0,
|
||||||
users: [],
|
users: [],
|
||||||
@ -129,16 +130,25 @@ export default Vue.extend({
|
|||||||
const usernamePromise = this.$root.api('users/show', parseAcct(this.target));
|
const usernamePromise = this.$root.api('users/show', parseAcct(this.target));
|
||||||
const idPromise = this.$root.api('users/show', { userId: this.target });
|
const idPromise = this.$root.api('users/show', { userId: this.target });
|
||||||
|
|
||||||
usernamePromise.then(res);
|
let _notFound = false;
|
||||||
idPromise.then(res);
|
const notFound = () => {
|
||||||
|
if (_notFound) {
|
||||||
idPromise.catch(e => {
|
|
||||||
if (e == 'user not found') {
|
|
||||||
this.$root.dialog({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: this.$t('user-not-found')
|
text: this.$t('user-not-found')
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
_notFound = true;
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
usernamePromise.then(res).catch(e => {
|
||||||
|
if (e == 'user not found') {
|
||||||
|
notFound();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
idPromise.then(res).catch(e => {
|
||||||
|
notFound();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<div class="zvdbznxvfixtmujpsigoccczftvpiwqh">
|
<div class="zvdbznxvfixtmujpsigoccczftvpiwqh">
|
||||||
<div class="banner" :style="bannerStyle"></div>
|
<div class="banner" :style="bannerStyle"></div>
|
||||||
<mk-avatar class="avatar" :user="user" :disable-preview="true"/>
|
<mk-avatar class="avatar" :user="user" :disable-preview="true"/>
|
||||||
<mk-follow-button :user="user" class="follow" mini/>
|
<mk-follow-button v-if="$store.getters.isSignedIn && user.id != $store.state.i.id" :user="user" class="follow" mini/>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<router-link :to="user | userPage" class="name">
|
<router-link :to="user | userPage" class="name">
|
||||||
<mk-user-name :user="user"/>
|
<mk-user-name :user="user"/>
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
<mk-user-name :user="user"/>
|
<mk-user-name :user="user"/>
|
||||||
</span>
|
</span>
|
||||||
<span class="acct">@{{ user | acct }} <fa v-if="user.isLocked == true" class="locked" icon="lock" fixed-width/></span>
|
<span class="acct">@{{ user | acct }} <fa v-if="user.isLocked == true" class="locked" icon="lock" fixed-width/></span>
|
||||||
|
<span class="followed" v-if="user.isFollowed">{{ $t('follows-you') }}</span>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<div class="info">
|
<div class="info">
|
||||||
@ -376,6 +377,7 @@ export default Vue.extend({
|
|||||||
text-shadow 0 0 8px #000
|
text-shadow 0 0 8px #000
|
||||||
|
|
||||||
> .acct
|
> .acct
|
||||||
|
display block
|
||||||
font-size 14px
|
font-size 14px
|
||||||
opacity 0.7
|
opacity 0.7
|
||||||
text-shadow 0 0 8px #000
|
text-shadow 0 0 8px #000
|
||||||
@ -383,6 +385,15 @@ export default Vue.extend({
|
|||||||
> .locked
|
> .locked
|
||||||
opacity 0.8
|
opacity 0.8
|
||||||
|
|
||||||
|
> .followed
|
||||||
|
display inline-block
|
||||||
|
font-size 12px
|
||||||
|
background rgba(0, 0, 0, 0.5)
|
||||||
|
opacity 0.7
|
||||||
|
margin-top: 2px
|
||||||
|
padding 4px
|
||||||
|
border-radius 4px
|
||||||
|
|
||||||
> .info
|
> .info
|
||||||
padding 16px
|
padding 16px
|
||||||
font-size 12px
|
font-size 12px
|
||||||
|
@ -64,6 +64,8 @@ export default Vue.extend({
|
|||||||
margin 4px
|
margin 4px
|
||||||
|
|
||||||
> img
|
> img
|
||||||
|
display inline-block
|
||||||
|
text-align center
|
||||||
width 48px
|
width 48px
|
||||||
height 48px
|
height 48px
|
||||||
vertical-align bottom
|
vertical-align bottom
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<mk-user-name :user="user"/>
|
<mk-user-name :user="user"/>
|
||||||
</a>
|
</a>
|
||||||
<p class="username"><mk-acct :user="user"/></p>
|
<p class="username"><mk-acct :user="user"/></p>
|
||||||
<mk-follow-button class="follow-button" :user="user"/>
|
<mk-follow-button v-if="$store.getters.isSignedIn && user.id != $store.state.i.id" class="follow-button" :user="user"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -8,12 +8,13 @@ import handler from './processors';
|
|||||||
import { queueLogger } from './logger';
|
import { queueLogger } from './logger';
|
||||||
|
|
||||||
const enableQueue = !program.disableQueue;
|
const enableQueue = !program.disableQueue;
|
||||||
|
const enableQueueProcessing = !program.onlyServer && enableQueue;
|
||||||
const queueAvailable = config.redis != null;
|
const queueAvailable = config.redis != null;
|
||||||
|
|
||||||
const queue = initializeQueue();
|
const queue = initializeQueue();
|
||||||
|
|
||||||
function initializeQueue() {
|
function initializeQueue() {
|
||||||
if (queueAvailable) {
|
if (queueAvailable && enableQueue) {
|
||||||
return new Queue('misskey', {
|
return new Queue('misskey', {
|
||||||
redis: {
|
redis: {
|
||||||
port: config.redis.port,
|
port: config.redis.port,
|
||||||
@ -42,7 +43,7 @@ export function deliver(user: ILocalUser, content: any, to: any) {
|
|||||||
to
|
to
|
||||||
};
|
};
|
||||||
|
|
||||||
if (queueAvailable && !program.disableApQueue) {
|
if (queueAvailable && enableQueueProcessing) {
|
||||||
return queue.createJob(data)
|
return queue.createJob(data)
|
||||||
.retries(8)
|
.retries(8)
|
||||||
.backoff('exponential', 1000)
|
.backoff('exponential', 1000)
|
||||||
@ -59,7 +60,7 @@ export function processInbox(activity: any, signature: httpSignature.IParsedSign
|
|||||||
signature
|
signature
|
||||||
};
|
};
|
||||||
|
|
||||||
if (queueAvailable && !program.disableApQueue) {
|
if (queueAvailable && enableQueueProcessing) {
|
||||||
return queue.createJob(data)
|
return queue.createJob(data)
|
||||||
.retries(3)
|
.retries(3)
|
||||||
.backoff('exponential', 500)
|
.backoff('exponential', 500)
|
||||||
@ -70,47 +71,59 @@ export function processInbox(activity: any, signature: httpSignature.IParsedSign
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function createExportNotesJob(user: ILocalUser) {
|
export function createExportNotesJob(user: ILocalUser) {
|
||||||
if (!queueAvailable) throw 'queue unavailable';
|
const data = {
|
||||||
|
|
||||||
return queue.createJob({
|
|
||||||
type: 'exportNotes',
|
type: 'exportNotes',
|
||||||
user: user
|
user: user
|
||||||
})
|
};
|
||||||
.save();
|
|
||||||
|
if (queueAvailable && enableQueueProcessing) {
|
||||||
|
return queue.createJob(data).save();
|
||||||
|
} else {
|
||||||
|
return handler({ data }, () => {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createExportFollowingJob(user: ILocalUser) {
|
export function createExportFollowingJob(user: ILocalUser) {
|
||||||
if (!queueAvailable) throw 'queue unavailable';
|
const data = {
|
||||||
|
|
||||||
return queue.createJob({
|
|
||||||
type: 'exportFollowing',
|
type: 'exportFollowing',
|
||||||
user: user
|
user: user
|
||||||
})
|
};
|
||||||
.save();
|
|
||||||
|
if (queueAvailable && enableQueueProcessing) {
|
||||||
|
return queue.createJob(data).save();
|
||||||
|
} else {
|
||||||
|
return handler({ data }, () => {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createExportMuteJob(user: ILocalUser) {
|
export function createExportMuteJob(user: ILocalUser) {
|
||||||
if (!queueAvailable) throw 'queue unavailable';
|
const data = {
|
||||||
|
|
||||||
return queue.createJob({
|
|
||||||
type: 'exportMute',
|
type: 'exportMute',
|
||||||
user: user
|
user: user
|
||||||
})
|
};
|
||||||
.save();
|
|
||||||
|
if (queueAvailable && enableQueueProcessing) {
|
||||||
|
return queue.createJob(data).save();
|
||||||
|
} else {
|
||||||
|
return handler({ data }, () => {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createExportBlockingJob(user: ILocalUser) {
|
export function createExportBlockingJob(user: ILocalUser) {
|
||||||
if (!queueAvailable) throw 'queue unavailable';
|
const data = {
|
||||||
|
|
||||||
return queue.createJob({
|
|
||||||
type: 'exportBlocking',
|
type: 'exportBlocking',
|
||||||
user: user
|
user: user
|
||||||
})
|
};
|
||||||
.save();
|
|
||||||
|
if (queueAvailable && enableQueueProcessing) {
|
||||||
|
return queue.createJob(data).save();
|
||||||
|
} else {
|
||||||
|
return handler({ data }, () => {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function() {
|
export default function() {
|
||||||
if (queueAvailable && enableQueue) {
|
if (queueAvailable && enableQueueProcessing) {
|
||||||
queue.process(128, handler);
|
queue.process(128, handler);
|
||||||
queueLogger.succ('Processing started');
|
queueLogger.succ('Processing started');
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ export async function exportBlocking(job: bq.Job, done: any): Promise<void> {
|
|||||||
|
|
||||||
if (blockings.length === 0) {
|
if (blockings.length === 0) {
|
||||||
ended = true;
|
ended = true;
|
||||||
job.reportProgress(100);
|
if (job.reportProgress) job.reportProgress(100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ export async function exportBlocking(job: bq.Job, done: any): Promise<void> {
|
|||||||
blockerId: user._id,
|
blockerId: user._id,
|
||||||
});
|
});
|
||||||
|
|
||||||
job.reportProgress(exportedCount / total);
|
if (job.reportProgress) job.reportProgress(exportedCount / total);
|
||||||
}
|
}
|
||||||
|
|
||||||
stream.end();
|
stream.end();
|
||||||
|
@ -48,7 +48,7 @@ export async function exportFollowing(job: bq.Job, done: any): Promise<void> {
|
|||||||
|
|
||||||
if (followings.length === 0) {
|
if (followings.length === 0) {
|
||||||
ended = true;
|
ended = true;
|
||||||
job.reportProgress(100);
|
if (job.reportProgress) job.reportProgress(100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ export async function exportFollowing(job: bq.Job, done: any): Promise<void> {
|
|||||||
followerId: user._id,
|
followerId: user._id,
|
||||||
});
|
});
|
||||||
|
|
||||||
job.reportProgress(exportedCount / total);
|
if (job.reportProgress) job.reportProgress(exportedCount / total);
|
||||||
}
|
}
|
||||||
|
|
||||||
stream.end();
|
stream.end();
|
||||||
|
@ -48,7 +48,7 @@ export async function exportMute(job: bq.Job, done: any): Promise<void> {
|
|||||||
|
|
||||||
if (mutes.length === 0) {
|
if (mutes.length === 0) {
|
||||||
ended = true;
|
ended = true;
|
||||||
job.reportProgress(100);
|
if (job.reportProgress) job.reportProgress(100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ export async function exportMute(job: bq.Job, done: any): Promise<void> {
|
|||||||
muterId: user._id,
|
muterId: user._id,
|
||||||
});
|
});
|
||||||
|
|
||||||
job.reportProgress(exportedCount / total);
|
if (job.reportProgress) job.reportProgress(exportedCount / total);
|
||||||
}
|
}
|
||||||
|
|
||||||
stream.end();
|
stream.end();
|
||||||
|
@ -58,7 +58,7 @@ export async function exportNotes(job: bq.Job, done: any): Promise<void> {
|
|||||||
|
|
||||||
if (notes.length === 0) {
|
if (notes.length === 0) {
|
||||||
ended = true;
|
ended = true;
|
||||||
job.reportProgress(100);
|
if (job.reportProgress) job.reportProgress(100);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ export async function exportNotes(job: bq.Job, done: any): Promise<void> {
|
|||||||
userId: user._id,
|
userId: user._id,
|
||||||
});
|
});
|
||||||
|
|
||||||
job.reportProgress(exportedNotesCount / total);
|
if (job.reportProgress) job.reportProgress(exportedNotesCount / total);
|
||||||
}
|
}
|
||||||
|
|
||||||
await new Promise((res, rej) => {
|
await new Promise((res, rej) => {
|
||||||
|
@ -35,6 +35,7 @@ export const meta = {
|
|||||||
'moderator',
|
'moderator',
|
||||||
'adminOrModerator',
|
'adminOrModerator',
|
||||||
'verified',
|
'verified',
|
||||||
|
'silenced',
|
||||||
'suspended',
|
'suspended',
|
||||||
]),
|
]),
|
||||||
default: 'all'
|
default: 'all'
|
||||||
@ -101,6 +102,7 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
|
|||||||
}]
|
}]
|
||||||
} :
|
} :
|
||||||
ps.state == 'verified' ? { isVerified: true } :
|
ps.state == 'verified' ? { isVerified: true } :
|
||||||
|
ps.state == 'silenced' ? { isSilenced: true } :
|
||||||
ps.state == 'suspended' ? { isSuspended: true } :
|
ps.state == 'suspended' ? { isSuspended: true } :
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
|
@ -16,7 +16,7 @@ import config from '../../config';
|
|||||||
import { licenseHtml } from '../../misc/license';
|
import { licenseHtml } from '../../misc/license';
|
||||||
import { copyright } from '../../const.json';
|
import { copyright } from '../../const.json';
|
||||||
import endpoints from '../api/endpoints';
|
import endpoints from '../api/endpoints';
|
||||||
import locales from '../../../locales';
|
import * as locales from '../../../locales';
|
||||||
import * as nestedProperty from 'nested-property';
|
import * as nestedProperty from 'nested-property';
|
||||||
|
|
||||||
function getLang(lang: string): string {
|
function getLang(lang: string): string {
|
||||||
|
@ -33,8 +33,8 @@ module.exports = async (ctx: Koa.BaseContext) => {
|
|||||||
|
|
||||||
function wrap(url: string): string {
|
function wrap(url: string): string {
|
||||||
return url != null
|
return url != null
|
||||||
? url.startsWith('https://') || url.startsWith('data:')
|
? url.match(/^https?:\/\//)
|
||||||
? url
|
? `https://images.weserv.nl/?url=${encodeURIComponent(url.replace(/^http:\/\//, '').replace(/^https:\/\//, 'ssl:'))}&w=200&h=200`
|
||||||
: `https://images.weserv.nl/?url=${encodeURIComponent(url.replace(/^http:\/\//, ''))}`
|
: url
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
@ -46,11 +46,19 @@ export async function insertFollowingDoc(followee: IUser, follower: IUser) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
await FollowRequest.remove({
|
const removed = await FollowRequest.remove({
|
||||||
followeeId: followee._id,
|
followeeId: followee._id,
|
||||||
followerId: follower._id
|
followerId: follower._id
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (removed.deletedCount === 1) {
|
||||||
|
await User.update({ _id: followee._id }, {
|
||||||
|
$inc: {
|
||||||
|
pendingReceivedFollowRequestsCount: -1
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (alreadyFollowed) return;
|
if (alreadyFollowed) return;
|
||||||
|
|
||||||
//#region Increment counts
|
//#region Increment counts
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import User, { IUser, isRemoteUser, ILocalUser, pack as packUser } from '../../../models/user';
|
import { IUser, isRemoteUser, ILocalUser, pack as packUser } from '../../../models/user';
|
||||||
import FollowRequest from '../../../models/follow-request';
|
import FollowRequest from '../../../models/follow-request';
|
||||||
import { renderActivity } from '../../../remote/activitypub/renderer';
|
import { renderActivity } from '../../../remote/activitypub/renderer';
|
||||||
import renderFollow from '../../../remote/activitypub/renderer/follow';
|
import renderFollow from '../../../remote/activitypub/renderer/follow';
|
||||||
@ -20,12 +20,6 @@ export default async function(followee: IUser, follower: IUser) {
|
|||||||
deliver(followee as ILocalUser, content, follower.inbox);
|
deliver(followee as ILocalUser, content, follower.inbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
await User.update({ _id: followee._id }, {
|
|
||||||
$inc: {
|
|
||||||
pendingReceivedFollowRequestsCount: -1
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
packUser(followee, followee, {
|
packUser(followee, followee, {
|
||||||
detail: true
|
detail: true
|
||||||
}).then(packed => publishMainStream(followee._id, 'meUpdated', packed));
|
}).then(packed => publishMainStream(followee._id, 'meUpdated', packed));
|
||||||
|
Reference in New Issue
Block a user