blockings list
This commit is contained in:
		
							parent
							
								
									50cd6a036e
								
							
						
					
					
						commit
						560bb65384
					
				
					 4 changed files with 104 additions and 0 deletions
				
			
		| 
						 | 
					@ -833,6 +833,7 @@ desktop/views/components/settings.vue:
 | 
				
			||||||
  notification: "通知"
 | 
					  notification: "通知"
 | 
				
			||||||
  apps: "アプリ"
 | 
					  apps: "アプリ"
 | 
				
			||||||
  mute: "ミュート"
 | 
					  mute: "ミュート"
 | 
				
			||||||
 | 
					  blocking: "ブロック"
 | 
				
			||||||
  security: "セキュリティ"
 | 
					  security: "セキュリティ"
 | 
				
			||||||
  signin: "サインイン履歴"
 | 
					  signin: "サインイン履歴"
 | 
				
			||||||
  password: "パスワード"
 | 
					  password: "パスワード"
 | 
				
			||||||
| 
						 | 
					@ -976,6 +977,9 @@ common/views/components/drive-settings.vue:
 | 
				
			||||||
desktop/views/components/settings.mute.vue:
 | 
					desktop/views/components/settings.mute.vue:
 | 
				
			||||||
  no-users: "ミュートしているユーザーはいません"
 | 
					  no-users: "ミュートしているユーザーはいません"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					desktop/views/components/settings.blocking.vue:
 | 
				
			||||||
 | 
					  no-users: "ブロックしているユーザーはいません"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
desktop/views/components/settings.password.vue:
 | 
					desktop/views/components/settings.password.vue:
 | 
				
			||||||
  reset: "パスワードを変更する"
 | 
					  reset: "パスワードを変更する"
 | 
				
			||||||
  enter-current-password: "現在のパスワードを入力してください"
 | 
					  enter-current-password: "現在のパスワードを入力してください"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,31 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					<div>
 | 
				
			||||||
 | 
						<div class="none ui info" v-if="!fetching && users.length == 0">
 | 
				
			||||||
 | 
							<p>%fa:info-circle%%i18n:@no-users%</p>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						<div class="users" v-if="users.length != 0">
 | 
				
			||||||
 | 
							<div v-for="user in users" :key="user.id">
 | 
				
			||||||
 | 
								<p><b>{{ user | userName }}</b> @{{ user | acct }}</p>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script lang="ts">
 | 
				
			||||||
 | 
					import Vue from 'vue';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default Vue.extend({
 | 
				
			||||||
 | 
						data() {
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								fetching: true,
 | 
				
			||||||
 | 
								users: []
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						mounted() {
 | 
				
			||||||
 | 
							(this as any).api('blocking/list').then(x => {
 | 
				
			||||||
 | 
								this.users = x.users;
 | 
				
			||||||
 | 
								this.fetching = false;
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@
 | 
				
			||||||
		<p :class="{ active: page == 'drive' }" @mousedown="page = 'drive'">%fa:cloud .fw%%i18n:common.drive%</p>
 | 
							<p :class="{ active: page == 'drive' }" @mousedown="page = 'drive'">%fa:cloud .fw%%i18n:common.drive%</p>
 | 
				
			||||||
		<p :class="{ active: page == 'hashtags' }" @mousedown="page = 'hashtags'">%fa:hashtag .fw%%i18n:@tags%</p>
 | 
							<p :class="{ active: page == 'hashtags' }" @mousedown="page = 'hashtags'">%fa:hashtag .fw%%i18n:@tags%</p>
 | 
				
			||||||
		<p :class="{ active: page == 'mute' }" @mousedown="page = 'mute'">%fa:ban .fw%%i18n:@mute%</p>
 | 
							<p :class="{ active: page == 'mute' }" @mousedown="page = 'mute'">%fa:ban .fw%%i18n:@mute%</p>
 | 
				
			||||||
 | 
							<p :class="{ active: page == 'blocking' }" @mousedown="page = 'blocking'">%fa:ban .fw%%i18n:@blocking%</p>
 | 
				
			||||||
		<p :class="{ active: page == 'apps' }" @mousedown="page = 'apps'">%fa:puzzle-piece .fw%%i18n:@apps%</p>
 | 
							<p :class="{ active: page == 'apps' }" @mousedown="page = 'apps'">%fa:puzzle-piece .fw%%i18n:@apps%</p>
 | 
				
			||||||
		<p :class="{ active: page == 'security' }" @mousedown="page = 'security'">%fa:unlock-alt .fw%%i18n:@security%</p>
 | 
							<p :class="{ active: page == 'security' }" @mousedown="page = 'security'">%fa:unlock-alt .fw%%i18n:@security%</p>
 | 
				
			||||||
		<p :class="{ active: page == 'api' }" @mousedown="page = 'api'">%fa:key .fw%API</p>
 | 
							<p :class="{ active: page == 'api' }" @mousedown="page = 'api'">%fa:key .fw%API</p>
 | 
				
			||||||
| 
						 | 
					@ -207,6 +208,13 @@
 | 
				
			||||||
			</section>
 | 
								</section>
 | 
				
			||||||
		</ui-card>
 | 
							</ui-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<ui-card class="blocking" v-show="page == 'blocking'">
 | 
				
			||||||
 | 
								<div slot="title">%fa:ban% %i18n:@blocking%</div>
 | 
				
			||||||
 | 
								<section>
 | 
				
			||||||
 | 
									<x-blocking/>
 | 
				
			||||||
 | 
								</section>
 | 
				
			||||||
 | 
							</ui-card>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<ui-card class="apps" v-show="page == 'apps'">
 | 
							<ui-card class="apps" v-show="page == 'apps'">
 | 
				
			||||||
			<div slot="title">%fa:puzzle-piece% %i18n:@apps%</div>
 | 
								<div slot="title">%fa:puzzle-piece% %i18n:@apps%</div>
 | 
				
			||||||
			<section>
 | 
								<section>
 | 
				
			||||||
| 
						 | 
					@ -290,6 +298,7 @@
 | 
				
			||||||
<script lang="ts">
 | 
					<script lang="ts">
 | 
				
			||||||
import Vue from 'vue';
 | 
					import Vue from 'vue';
 | 
				
			||||||
import XMute from './settings.mute.vue';
 | 
					import XMute from './settings.mute.vue';
 | 
				
			||||||
 | 
					import XBlocking from './settings.blocking.vue';
 | 
				
			||||||
import XPassword from './settings.password.vue';
 | 
					import XPassword from './settings.password.vue';
 | 
				
			||||||
import X2fa from './settings.2fa.vue';
 | 
					import X2fa from './settings.2fa.vue';
 | 
				
			||||||
import XApps from './settings.apps.vue';
 | 
					import XApps from './settings.apps.vue';
 | 
				
			||||||
| 
						 | 
					@ -301,6 +310,7 @@ import checkForUpdate from '../../../common/scripts/check-for-update';
 | 
				
			||||||
export default Vue.extend({
 | 
					export default Vue.extend({
 | 
				
			||||||
	components: {
 | 
						components: {
 | 
				
			||||||
		XMute,
 | 
							XMute,
 | 
				
			||||||
 | 
							XBlocking,
 | 
				
			||||||
		XPassword,
 | 
							XPassword,
 | 
				
			||||||
		X2fa,
 | 
							X2fa,
 | 
				
			||||||
		XApps,
 | 
							XApps,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										59
									
								
								src/server/api/endpoints/blocking/list.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								src/server/api/endpoints/blocking/list.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,59 @@
 | 
				
			||||||
 | 
					import $ from 'cafy'; import ID from '../../../../misc/cafy-id';
 | 
				
			||||||
 | 
					import Blocking from '../../../../models/blocking';
 | 
				
			||||||
 | 
					import { pack, ILocalUser } from '../../../../models/user';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const meta = {
 | 
				
			||||||
 | 
						desc: {
 | 
				
			||||||
 | 
							'ja-JP': 'ブロックしているユーザー一覧を取得します。',
 | 
				
			||||||
 | 
							'en-US': 'Get blocking users.'
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						requireCredential: true,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						kind: 'following-read'
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default (params: any, me: ILocalUser) => new Promise(async (res, rej) => {
 | 
				
			||||||
 | 
						// Get 'limit' parameter
 | 
				
			||||||
 | 
						const [limit = 30, limitErr] = $.num.optional.range(1, 100).get(params.limit);
 | 
				
			||||||
 | 
						if (limitErr) return rej('invalid limit param');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get 'cursor' parameter
 | 
				
			||||||
 | 
						const [cursor = null, cursorErr] = $.type(ID).optional.get(params.cursor);
 | 
				
			||||||
 | 
						if (cursorErr) return rej('invalid cursor param');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Construct query
 | 
				
			||||||
 | 
						const query = {
 | 
				
			||||||
 | 
							blockerId: me._id
 | 
				
			||||||
 | 
						} as any;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// カーソルが指定されている場合
 | 
				
			||||||
 | 
						if (cursor) {
 | 
				
			||||||
 | 
							query._id = {
 | 
				
			||||||
 | 
								$lt: cursor
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Get blockings
 | 
				
			||||||
 | 
						const blockings = await Blocking
 | 
				
			||||||
 | 
							.find(query, {
 | 
				
			||||||
 | 
								limit: limit + 1,
 | 
				
			||||||
 | 
								sort: { _id: -1 }
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 「次のページ」があるかどうか
 | 
				
			||||||
 | 
						const inStock = blockings.length === limit + 1;
 | 
				
			||||||
 | 
						if (inStock) {
 | 
				
			||||||
 | 
							blockings.pop();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Serialize
 | 
				
			||||||
 | 
						const users = await Promise.all(blockings.map(async m =>
 | 
				
			||||||
 | 
							await pack(m.blockeeId, me, { detail: true })));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Response
 | 
				
			||||||
 | 
						res({
 | 
				
			||||||
 | 
							users: users,
 | 
				
			||||||
 | 
							next: inStock ? blockings[blockings.length - 1]._id : null,
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue