Compare commits

..

28 Commits

Author SHA1 Message Date
52c3f9e98c 10.84.1 2019-02-11 23:42:39 +09:00
6c8b4184fe Update CHANGELOG.md 2019-02-11 23:41:00 +09:00
a0979f8435 Update dependencies 🚀 2019-02-11 23:40:10 +09:00
faba21d003 Remove unused import 2019-02-11 23:39:05 +09:00
d82c5dff71 Fix bug 2019-02-11 23:37:15 +09:00
59fbc5b054 New translations ja-JP.yml (English) (#4221) 2019-02-11 22:37:28 +09:00
2c1a7f4392 Fix #4152 (#4224)
* Fix #4152

* fix

* remove unused code
2019-02-11 22:37:20 +09:00
769e6182d8 New Crowdin translations (#4220)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)
2019-02-11 01:39:46 +09:00
88176a17a3 New Crowdin translations (#4218)
* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (English)
2019-02-10 23:17:49 +09:00
fc660e869f [Client] Make default sort lastCommunicatedAt in instances list of admin panel 2019-02-10 19:46:47 +09:00
dc04869650 [Client] Make default origin local in user list of admin panel 2019-02-10 19:44:57 +09:00
93c3f34813 管理画面でサイレンスされているユーザーを一覧できるように 2019-02-10 19:43:46 +09:00
1282eed192 Update CHANGELOG.md 2019-02-10 19:39:42 +09:00
962b3ca78e [Client] Fix bug 2019-02-10 19:38:17 +09:00
62d17c9266 Optimize url-preview image (#4216) 2019-02-10 19:19:26 +09:00
f5b928a537 New translations ja-JP.yml (English) (#4210) 2019-02-10 19:19:10 +09:00
c8811894b5 Update package.json 2019-02-10 17:58:03 +09:00
e579b49228 Update package.json 2019-02-10 17:55:42 +09:00
9561908ad3 Update user.followers-you-know.vue (#4215) 2019-02-10 17:15:41 +09:00
fac7ebf4f6 Fix Dockerfile (#4214)
* Update Dockerfile

* Update Dockerfile
2019-02-10 16:14:48 +09:00
a0769d65e3 Update package.json 2019-02-10 15:08:13 +09:00
d17aa4b24e New translations ja-JP.yml (Korean) (#4209) 2019-02-10 11:45:00 +09:00
310371658b 重いのでジョブキュー無効化 2019-02-10 11:44:08 +09:00
7ca073aafd Hide unusable follow buttons (#4208) 2019-02-10 05:56:11 +09:00
7216d0fb1f New Crowdin translations (#4201)
* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)
2019-02-10 05:34:23 +09:00
22a9e950c7 deckにフォローされていますマークを追加 (#4207)
* deckにフォローされていますを追加

* opacity
2019-02-10 05:26:49 +09:00
6683d50bae Update CircleCI configuration (#4204)
* Update config.yml

* Update config.yml

* Update config.yml

* Update config.yml

* Update config.yml
2019-02-10 02:17:43 +09:00
8f26176273 Update README.md (#4198) 2019-02-09 13:35:04 +09:00
38 changed files with 259 additions and 174 deletions

View File

@ -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

View File

@ -1,6 +1,15 @@
ChangeLog ChangeLog
========= =========
10.84.1
----------
* deckにフォローされていますマークを追加
* URLプレビューのサムネイルの調整
* 管理画面でサイレンスされているユーザーを一覧できるように
* ドキュメントにアクセスできない問題を修正
* ジョブキューを無効化
* 軽微なバグ修正
10.84.0 10.84.0
---------- ----------
* インスタンス管理の強化 * インスタンス管理の強化

View File

@ -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

View File

@ -3,9 +3,9 @@
[![Misskey](/assets/title.png)](https://misskey.xyz/) [![Misskey](/assets/title.png)](https://misskey.xyz/)
================================================================ ================================================================
[![CircleCI](https://img.shields.io/circleci/project/github/syuilo/misskey.svg?style=for-the-badge)](https://circleci.com/gh/syuilo/misskey) [![CircleCI](https://img.shields.io/circleci/project/github/syuilo/misskey.svg?style=for-the-badge&logo=circleci)](https://circleci.com/gh/syuilo/misskey)
[![Dependencies](https://img.shields.io/david/syuilo/misskey.svg?style=for-the-badge)](https://david-dm.org/syuilo/misskey) [![Dependencies](https://img.shields.io/david/syuilo/misskey.svg?style=for-the-badge&logo=npm)](https://david-dm.org/syuilo/misskey)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge)](http://makeapullrequest.com) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge&logo=github)](http://makeapullrequest.com)
**A forever evolving, sophisticated microblogging platform.** **A forever evolving, sophisticated microblogging platform.**

View File

@ -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: "フォロワー"

View File

@ -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: "フォロワー"

View File

@ -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"

View File

@ -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: "フォロワー"

View File

@ -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
View File

@ -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;

View File

@ -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: "フォロワー"

View File

@ -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: "フォロワー"

View File

@ -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: "フォロワー"

View File

@ -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: "팔로워"

View File

@ -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: "フォロワー"

View File

@ -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: "フォロワー"

View File

@ -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"

View File

@ -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: "フォロワー"

View File

@ -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: "フォロワー"

View File

@ -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: "关注者"

View File

@ -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",

View File

@ -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 };

View File

@ -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: [],

View File

@ -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();
}); });
}); });
}, },

View File

@ -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"/>

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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');
} }

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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) => {

View File

@ -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 } :
{} {}
); );

View File

@ -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 {

View File

@ -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;
} }

View File

@ -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

View File

@ -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));