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:
default:
working_directory: /tmp/workspace
docker:
- image: misskey/ci:latest
- image: circleci/mongo:latest
with-redis:
working_directory: /tmp/workspace
docker:
- image: misskey/ci:latest
@ -24,7 +29,6 @@ jobs:
name: OK
command: |
echo -e '\033[0;32mOK\033[0;39m'
build:
executor: default
steps:
@ -68,10 +72,13 @@ jobs:
- .
test:
parameters:
without_redis:
executor:
type: string
default: ""
executor: default
default: "default"
without_redis:
type: boolean
default: false
executor: <<parameters.executor>>
steps:
- attach_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" }}
paths:
- node_modules
docker:
parameters:
with_deploy:
type: string
default: ""
type: boolean
default: false
executor: docker
steps:
- checkout
@ -126,7 +132,7 @@ jobs:
workflows:
version: 2
build-and-test:
nodejs:
jobs:
- ok:
filters:
@ -143,6 +149,7 @@ workflows:
- imgbot
- patch-autogen
- test:
executor: with-redis
requires:
- build
filters:
@ -153,7 +160,7 @@ workflows:
- imgbot
- patch-autogen
- test:
without_redis: "true"
without_redis: true
requires:
- build
filters:
@ -165,12 +172,21 @@ workflows:
- l10n_develop
- imgbot
- patch-autogen
# - docker:
# filters:
# branches:
# ignore: master
docker:
jobs:
- hold:
type: approval
filters:
branches:
ignore: master
- docker:
with_deploy: "true"
requires:
- hold
filters:
branches:
ignore: master
- docker:
with_deploy: true
filters:
branches:
only: master

View File

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

View File

@ -23,15 +23,11 @@ RUN apk add --no-cache \
procps \
python \
zlib-dev
RUN npm i -g node-gyp
COPY ./package.json ./
RUN npm i
RUN npm i -g yarn
COPY . ./
RUN node-gyp configure \
&& node-gyp build \
&& npm run build
RUN yarn install
RUN yarn build
FROM base AS runner

View File

@ -3,9 +3,9 @@
[![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)
[![Dependencies](https://img.shields.io/david/syuilo/misskey.svg?style=for-the-badge)](https://david-dm.org/syuilo/misskey)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge)](http://makeapullrequest.com)
[![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&logo=npm)](https://david-dm.org/syuilo/misskey)
[![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.**

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1118,7 +1118,7 @@ admin/views/charts.vue:
users: "The number of users: increase/decrease"
users-total: "Total 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-files: "The number of files on the storage: increase/decrease"
drive-files-total: "Total number of files on Drive"
@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "Moderator"
adminOrModerator: "Admin/Moderator"
verified: "Verified account"
silenced: "Already silenced"
suspended: "Suspended"
origin:
title: "Origin"
@ -1244,7 +1245,7 @@ admin/views/federation.vue:
latest-request-sent-at: "Time of last request sent"
latest-request-received-at: "Last request received at"
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"
marked-as-closed: "Marked as closed"
lookup: "Look up"
@ -1254,8 +1255,8 @@ admin/views/federation.vue:
sorts:
caughtAtAsc: "Date of discovery (Ascending)"
caughtAtDesc: "Date of discovery (Descending)"
lastCommunicatedAtAsc: "最後にやり取りした日時が古い順"
lastCommunicatedAtDesc: "最後にやり取りした日時が新しい順"
lastCommunicatedAtAsc: "The date and time of the older interactions"
lastCommunicatedAtDesc: "The date and time of the newer interactions"
notesAsc: "Order by least Notes posted"
notesDesc: "Order by most Notes posted"
usersAsc: "Less followers"
@ -1264,10 +1265,10 @@ admin/views/federation.vue:
followingDesc: "Has more followers"
followersAsc: "Sort by having less followers"
followersDesc: "Sort by the larger number of followers"
driveUsageAsc: "ドライブ使用量が少ない順"
driveUsageDesc: "ドライブ使用量が多い順"
driveFilesAsc: "ドライブのファイル数が少ない順"
driveFilesDesc: "ドライブのファイル数が多い順"
driveUsageAsc: "Least storage used"
driveUsageDesc: "Most storage used"
driveFilesAsc: "By the smallest number of files stored on Drive"
driveFilesDesc: "By the largest number of files stored on Drive"
state: "Status"
states:
all: "All"
@ -1282,12 +1283,12 @@ admin/views/federation.vue:
users-total: "Total number of users"
notes: "Increase, or decrease in the number of notes"
notes-total: "Total number of notes"
ff: "フォロー/フォロワーの増減"
ff-total: "フォロー/フォロワーの積算"
drive-usage: "ドライブ使用量の増減"
drive-usage-total: "ドライブ使用量の積算"
drive-files: "ドライブファイル数の増減"
drive-files-total: "ドライブファイル数の積算"
ff: "Increase of followers"
ff-total: "Total number of follows accumulated"
drive-usage: "Increase and decrease in storage use"
drive-usage-total: "Total usage of the Drive"
drive-files: "Increase, or decrease in the number of files stored on Drive"
drive-files-total: "The number of files accumulated on Drive"
chart-spans:
hour: "Hourly"
day: "Daily"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "Media view"
edit: "Options"
deck/deck.user-column.vue:
follows-you: "Follows you"
posts: "Posts"
following: "Following"
followers: "Followers"

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "Modérateur"
adminOrModerator: "Administrateur/Modérateur"
verified: "Compte vérifié"
silenced: "サイレンス済み"
suspended: "Suspendu"
origin:
title: "Origine"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "Vue média"
edit: "Option"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "Notes"
following: "Suit"
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 default locales;
export = locales;

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1319,6 +1319,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1833,6 +1834,7 @@ deck/deck.tl-column.vue:
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -113,7 +113,7 @@ common:
use-avatar-reversi-stones: "리버시의 돌로 아바타를 사용"
verified-user: "공식 계정"
disable-animated-mfm: "글의 문자 애니메이션을 비활성화"
disable-showing-animated-images: "アニメーション画像を再生しない"
disable-showing-animated-images: "움직이는 이미지를 자동으로 재생하지 않음"
suggest-recent-hashtags: "최근 해시태그를 글 작성란에 표시"
always-show-nsfw: "항상 열람주의 미디어를 표시"
always-mark-nsfw: "항상 미디어를 열람주의로 설정하여 게시"
@ -345,8 +345,8 @@ common/views/components/note-menu.vue:
copy-link: "링크 복사"
favorite: "이 노트 즐겨찾기"
unfavorite: "즐겨찾기에서 제거"
watch: "ウォッチ"
unwatch: "ウォッチ解除"
watch: "지켜보기"
unwatch: "지켜보기 해제"
pin: "프로필에 고정"
unpin: "프로필에서 고정 해제"
delete: "삭제"
@ -509,13 +509,13 @@ common/views/components/profile-editor.vue:
email-address: "메일 주소"
email-verified: "매일 주소가 확인되었습니다"
email-not-verified: "메일 주소가 확인되지 않았습니다. 받은 편지함을 확인하여 주시기 바랍니다."
export: "エクスポート"
export: "내보내기"
export-targets:
all-notes: "すべての投稿データ"
following-list: "フォロー"
mute-list: "ミュート"
blocking-list: "ブロック"
export-requested: "エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、ドライブにファイルが追加されます。"
all-notes: "모든 글 데이터"
following-list: "팔로잉"
mute-list: "뮤트"
blocking-list: "차단"
export-requested: "내보내기를 요청하였습니다. 이 작업은 시간이 걸릴 수 있습니다. 내보내기가 완료되면 드라이브에 파일이 추가됩니다."
common/views/components/user-list-editor.vue:
users: "사용자"
rename: "리스트 이름 바꾸기"
@ -1007,7 +1007,7 @@ admin/views/index.vue:
announcements: "공지사항"
hashtags: "해시태그"
abuse: "스팸 신고"
queue: "ジョブキュー"
queue: "작업 대기열"
back-to-misskey: "Misskey로 돌아가기"
admin/views/dashboard.vue:
dashboard: "대시보드"
@ -1018,8 +1018,8 @@ admin/views/dashboard.vue:
this-instance: "이 인스턴스"
federated: "연합"
admin/views/queue.vue:
operation: "操作"
remove-all-jobs: "すべてのジョブをクリア"
operation: "동작"
remove-all-jobs: "모든 작업 제거"
admin/views/abuse.vue:
title: "스팸 신고"
target: "대상"
@ -1114,7 +1114,7 @@ admin/views/charts.vue:
notes: "글 증감 (통합)"
local-notes: "글 증감 (로컬)"
remote-notes: "글 증감 (원격)"
notes-total: "글 누적"
notes-total: "글 누적"
users: "사용자 증감"
users-total: "사용자 누적"
active-users: "활성 사용자 수"
@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "모더레이터"
adminOrModerator: "관리자+모더레이터"
verified: "공식 계정"
silenced: "침묵됨"
suspended: "정지됨"
origin:
title: "위치 (오리진)"
@ -1234,63 +1235,63 @@ admin/views/announcements.vue:
admin/views/hashtags.vue:
hided-tags: "Hidden Tags"
admin/views/federation.vue:
federation: "連合"
host: "ホスト"
notes: "投稿"
users: "ユーザー"
following: "フォロー中"
followers: "フォロワー"
status: "ステータス"
latest-request-sent-at: "直近のリクエスト送信"
latest-request-received-at: "直近のリクエスト受信"
remove-all-following: "フォローを全解除"
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
block: "ブロック"
marked-as-closed: "閉鎖されているとマーク"
lookup: "照会"
instances: "インスタンス"
instance-not-registered: "そのインスタンスは登録されていません"
sort: "ソート"
federation: "연합"
host: "호스트"
notes: ""
users: "사용자"
following: "팔로우 중"
followers: "팔로워"
status: "상태"
latest-request-sent-at: "마지막으로 요청을 전송한 시간"
latest-request-received-at: "마지막으로 요청을 받은 시간"
remove-all-following: "모든 팔로잉 해제"
remove-all-following-info: "{host}(으)로부터 모든 팔로잉을 해제합니다. 해당 인스턴스가 더 이상 존재하지 않게 된 경우 등에 실행하십시오."
block: "차단"
marked-as-closed: "폐쇄된 것으로 표시"
lookup: "조회"
instances: "인스턴스"
instance-not-registered: "해당 인스턴스가 등록되어 있지 않습니다"
sort: "정렬"
sorts:
caughtAtAsc: "登録日時が古い順"
caughtAtDesc: "登録日時が新しい順"
lastCommunicatedAtAsc: "最後にやり取りした日時が古い順"
lastCommunicatedAtDesc: "最後にやり取りした日時が新しい順"
notesAsc: "投稿が少ない順"
notesDesc: "投稿が多い順"
usersAsc: "ユーザーが少ない順"
usersDesc: "ユーザーが多い順"
followingAsc: "フォローが少ない順"
followingDesc: "フォローが多い順"
followersAsc: "フォロワーが少ない順"
followersDesc: "フォロワーが多い順"
driveUsageAsc: "ドライブ使用量が少ない順"
driveUsageDesc: "ドライブ使用量が多い順"
driveFilesAsc: "ドライブのファイル数が少ない順"
driveFilesDesc: "ドライブのファイル数が多い順"
state: "状態"
caughtAtAsc: "등록일이 오래된 순"
caughtAtDesc: "등록일이 최신인 순"
lastCommunicatedAtAsc: "마지막으로 요청을 주고받은 일시가 오래된 순"
lastCommunicatedAtDesc: "마지막으로 요청을 주고받은 일시가 빠른 순"
notesAsc: "글이 적은 순"
notesDesc: "글이 많은 순"
usersAsc: "사용자가 적은 순"
usersDesc: "사용자가 많은 순"
followingAsc: "팔로잉이 적은 순"
followingDesc: "팔로잉이 많은 순"
followersAsc: "팔로워가 적은 순"
followersDesc: "팔로워가 많은 순"
driveUsageAsc: "드라이브 사용량이 적은 순"
driveUsageDesc: "드라이브 사용량이 많은 순"
driveFilesAsc: "드라이브 파일 수가 적은 순"
driveFilesDesc: "드라이브 파일 수가 많은 순"
state: "상태"
states:
all: "すべて"
blocked: "ブロック"
not-responding: "応答なし"
marked-as-closed: "閉鎖とマーク済み"
result-is-truncated: "上位{n}件を表示しています。"
charts: "チャート"
all: "모두"
blocked: "차단됨"
not-responding: "응답 없음"
marked-as-closed: "폐쇄된 것으로 표시됨"
result-is-truncated: "상위 {n}개를 표시하고 있습니다."
charts: "차트"
chart-srcs:
requests: "リクエスト"
users: "ユーザーの増減"
users-total: "ユーザーの積算"
notes: "投稿の増減"
notes-total: "投稿の積算"
ff: "フォロー/フォロワーの増減"
ff-total: "フォロー/フォロワーの積算"
drive-usage: "ドライブ使用量の増減"
drive-usage-total: "ドライブ使用量の積算"
drive-files: "ドライブファイル数の増減"
drive-files-total: "ドライブファイル数の積算"
requests: "요청"
users: "사용자 증감"
users-total: "사용자 누적"
notes: "글 증감"
notes-total: "글 누적"
ff: "팔로잉/팔로워 증감"
ff-total: "팔로잉/팔로워 누적"
drive-usage: "드라이브 사용량 증감"
drive-usage-total: "드라이브 사용량 누적"
drive-files: "드라이브 파일 수 증감"
drive-files-total: "드라이브 파일 수 누적"
chart-spans:
hour: "1時間ごと"
day: "1日ごと"
hour: "1시간마다"
day: "1일마다"
desktop/views/pages/welcome.vue:
about: "자세히..."
gotit: "알겠습니다"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "미디어 보기"
edit: "옵션"
deck/deck.user-column.vue:
follows-you: "당신을 팔로우합니다"
posts: "글"
following: "팔로잉"
followers: "팔로워"

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "Źródło"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "Widok multimediów"
edit: "Opcje"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "Wpisy"
following: "Śledzeni"
followers: "Śledzący"

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "メディアビュー"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"

View File

@ -1186,6 +1186,7 @@ admin/views/users.vue:
moderator: "版主"
adminOrModerator: "管理员+版主"
verified: "官方认证账户"
silenced: "已禁言"
suspended: "已冻结"
origin:
title: "源自"
@ -1626,6 +1627,7 @@ deck/deck.tl-column.vue:
is-media-view: "媒体视图"
edit: "选项"
deck/deck.user-column.vue:
follows-you: "关注您"
posts: "帖子"
following: "关注中"
followers: "关注者"

View File

@ -1,8 +1,8 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "10.84.0",
"clientVersion": "2.0.14224",
"version": "10.84.1",
"clientVersion": "2.0.14252",
"codename": "nighthike",
"repository": {
"type": "git",
@ -23,9 +23,6 @@
"test": "gulp test",
"format": "gulp format"
},
"resolutions": {
"terser": "3.14.1"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "1.2.14",
"@fortawesome/free-brands-svg-icons": "5.7.1",
@ -99,7 +96,7 @@
"@types/websocket": "0.0.40",
"@types/ws": "6.0.1",
"animejs": "3.0.1",
"apexcharts": "3.2.2",
"apexcharts": "3.3.0",
"autobind-decorator": "2.4.0",
"autosize": "4.0.2",
"autwh": "0.1.0",
@ -144,7 +141,7 @@
"hard-source-webpack-plugin": "0.13.1",
"html-minifier": "3.5.21",
"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-svg": "3.0.0",
"js-yaml": "3.12.1",
@ -232,7 +229,7 @@
"uuid": "3.3.2",
"v-animate-css": "0.0.3",
"video-thumbnail-generator": "1.1.3",
"vue": "2.6.4",
"vue": "2.6.5",
"vue-color": "2.7.0",
"vue-content-loading": "1.5.3",
"vue-cropperjs": "3.0.0",
@ -245,7 +242,7 @@
"vue-sequential-entrance": "1.1.3",
"vue-style-loader": "4.1.2",
"vue-svg-inline-loader": "1.2.10",
"vue-template-compiler": "2.6.4",
"vue-template-compiler": "2.6.5",
"vuedraggable": "2.17.0",
"vuewordcloud": "18.7.11",
"vuex": "3.1.0",

View File

@ -5,9 +5,9 @@ program
.version(pkg.version)
.option('--no-daemons', 'Disable daemon processes (for debbuging)')
.option('--disable-clustering', 'Disable clustering')
.option('--disable-ap-queue', 'Disable creating job queue related to ap')
.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('--verbose', 'Enable all 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.')
.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;
export { program };

View File

@ -148,7 +148,7 @@ export default Vue.extend({
return {
instance: null,
target: null,
sort: '+caughtAt',
sort: '+lastCommunicatedAt',
state: 'all',
limit: 50,
instances: [],

View File

@ -48,6 +48,7 @@
<option value="admin">{{ $t('users.state.admin') }}</option>
<option value="moderator">{{ $t('users.state.moderator') }}</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>
</ui-select>
<ui-select v-model="origin">
@ -89,7 +90,7 @@ export default Vue.extend({
unsuspending: false,
sort: '+createdAt',
state: 'all',
origin: 'combined',
origin: 'local',
limit: 10,
offset: 0,
users: [],
@ -129,16 +130,25 @@ export default Vue.extend({
const usernamePromise = this.$root.api('users/show', parseAcct(this.target));
const idPromise = this.$root.api('users/show', { userId: this.target });
usernamePromise.then(res);
idPromise.then(res);
idPromise.catch(e => {
if (e == 'user not found') {
let _notFound = false;
const notFound = () => {
if (_notFound) {
this.$root.dialog({
type: 'error',
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="banner" :style="bannerStyle"></div>
<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">
<router-link :to="user | userPage" class="name">
<mk-user-name :user="user"/>

View File

@ -20,6 +20,7 @@
<mk-user-name :user="user"/>
</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>
</header>
<div class="info">
@ -376,6 +377,7 @@ export default Vue.extend({
text-shadow 0 0 8px #000
> .acct
display block
font-size 14px
opacity 0.7
text-shadow 0 0 8px #000
@ -383,6 +385,15 @@ export default Vue.extend({
> .locked
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
padding 16px
font-size 12px

View File

@ -64,6 +64,8 @@ export default Vue.extend({
margin 4px
> img
display inline-block
text-align center
width 48px
height 48px
vertical-align bottom

View File

@ -7,7 +7,7 @@
<mk-user-name :user="user"/>
</a>
<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>
</template>

View File

@ -8,12 +8,13 @@ import handler from './processors';
import { queueLogger } from './logger';
const enableQueue = !program.disableQueue;
const enableQueueProcessing = !program.onlyServer && enableQueue;
const queueAvailable = config.redis != null;
const queue = initializeQueue();
function initializeQueue() {
if (queueAvailable) {
if (queueAvailable && enableQueue) {
return new Queue('misskey', {
redis: {
port: config.redis.port,
@ -42,7 +43,7 @@ export function deliver(user: ILocalUser, content: any, to: any) {
to
};
if (queueAvailable && !program.disableApQueue) {
if (queueAvailable && enableQueueProcessing) {
return queue.createJob(data)
.retries(8)
.backoff('exponential', 1000)
@ -59,7 +60,7 @@ export function processInbox(activity: any, signature: httpSignature.IParsedSign
signature
};
if (queueAvailable && !program.disableApQueue) {
if (queueAvailable && enableQueueProcessing) {
return queue.createJob(data)
.retries(3)
.backoff('exponential', 500)
@ -70,47 +71,59 @@ export function processInbox(activity: any, signature: httpSignature.IParsedSign
}
export function createExportNotesJob(user: ILocalUser) {
if (!queueAvailable) throw 'queue unavailable';
return queue.createJob({
const data = {
type: 'exportNotes',
user: user
})
.save();
};
if (queueAvailable && enableQueueProcessing) {
return queue.createJob(data).save();
} else {
return handler({ data }, () => {});
}
}
export function createExportFollowingJob(user: ILocalUser) {
if (!queueAvailable) throw 'queue unavailable';
return queue.createJob({
const data = {
type: 'exportFollowing',
user: user
})
.save();
};
if (queueAvailable && enableQueueProcessing) {
return queue.createJob(data).save();
} else {
return handler({ data }, () => {});
}
}
export function createExportMuteJob(user: ILocalUser) {
if (!queueAvailable) throw 'queue unavailable';
return queue.createJob({
const data = {
type: 'exportMute',
user: user
})
.save();
};
if (queueAvailable && enableQueueProcessing) {
return queue.createJob(data).save();
} else {
return handler({ data }, () => {});
}
}
export function createExportBlockingJob(user: ILocalUser) {
if (!queueAvailable) throw 'queue unavailable';
return queue.createJob({
const data = {
type: 'exportBlocking',
user: user
})
.save();
};
if (queueAvailable && enableQueueProcessing) {
return queue.createJob(data).save();
} else {
return handler({ data }, () => {});
}
}
export default function() {
if (queueAvailable && enableQueue) {
if (queueAvailable && enableQueueProcessing) {
queue.process(128, handler);
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) {
ended = true;
job.reportProgress(100);
if (job.reportProgress) job.reportProgress(100);
break;
}
@ -74,7 +74,7 @@ export async function exportBlocking(job: bq.Job, done: any): Promise<void> {
blockerId: user._id,
});
job.reportProgress(exportedCount / total);
if (job.reportProgress) job.reportProgress(exportedCount / total);
}
stream.end();

View File

@ -48,7 +48,7 @@ export async function exportFollowing(job: bq.Job, done: any): Promise<void> {
if (followings.length === 0) {
ended = true;
job.reportProgress(100);
if (job.reportProgress) job.reportProgress(100);
break;
}
@ -74,7 +74,7 @@ export async function exportFollowing(job: bq.Job, done: any): Promise<void> {
followerId: user._id,
});
job.reportProgress(exportedCount / total);
if (job.reportProgress) job.reportProgress(exportedCount / total);
}
stream.end();

View File

@ -48,7 +48,7 @@ export async function exportMute(job: bq.Job, done: any): Promise<void> {
if (mutes.length === 0) {
ended = true;
job.reportProgress(100);
if (job.reportProgress) job.reportProgress(100);
break;
}
@ -74,7 +74,7 @@ export async function exportMute(job: bq.Job, done: any): Promise<void> {
muterId: user._id,
});
job.reportProgress(exportedCount / total);
if (job.reportProgress) job.reportProgress(exportedCount / total);
}
stream.end();

View File

@ -58,7 +58,7 @@ export async function exportNotes(job: bq.Job, done: any): Promise<void> {
if (notes.length === 0) {
ended = true;
job.reportProgress(100);
if (job.reportProgress) job.reportProgress(100);
break;
}
@ -83,7 +83,7 @@ export async function exportNotes(job: bq.Job, done: any): Promise<void> {
userId: user._id,
});
job.reportProgress(exportedNotesCount / total);
if (job.reportProgress) job.reportProgress(exportedNotesCount / total);
}
await new Promise((res, rej) => {

View File

@ -35,6 +35,7 @@ export const meta = {
'moderator',
'adminOrModerator',
'verified',
'silenced',
'suspended',
]),
default: 'all'
@ -101,6 +102,7 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
}]
} :
ps.state == 'verified' ? { isVerified: true } :
ps.state == 'silenced' ? { isSilenced: true } :
ps.state == 'suspended' ? { isSuspended: true } :
{}
);

View File

@ -16,7 +16,7 @@ import config from '../../config';
import { licenseHtml } from '../../misc/license';
import { copyright } from '../../const.json';
import endpoints from '../api/endpoints';
import locales from '../../../locales';
import * as locales from '../../../locales';
import * as nestedProperty from 'nested-property';
function getLang(lang: string): string {

View File

@ -33,8 +33,8 @@ module.exports = async (ctx: Koa.BaseContext) => {
function wrap(url: string): string {
return url != null
? url.startsWith('https://') || url.startsWith('data:')
? url
: `https://images.weserv.nl/?url=${encodeURIComponent(url.replace(/^http:\/\//, ''))}`
? url.match(/^https?:\/\//)
? `https://images.weserv.nl/?url=${encodeURIComponent(url.replace(/^http:\/\//, '').replace(/^https:\/\//, 'ssl:'))}&w=200&h=200`
: url
: 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,
followerId: follower._id
});
if (removed.deletedCount === 1) {
await User.update({ _id: followee._id }, {
$inc: {
pendingReceivedFollowRequestsCount: -1
}
});
}
if (alreadyFollowed) return;
//#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 { renderActivity } from '../../../remote/activitypub/renderer';
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);
}
await User.update({ _id: followee._id }, {
$inc: {
pendingReceivedFollowRequestsCount: -1
}
});
packUser(followee, followee, {
detail: true
}).then(packed => publishMainStream(followee._id, 'meUpdated', packed));