From 6909add1ec991cf4f9fdcc05978520f30414f576 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 20 Jan 2019 12:25:00 +0900 Subject: [PATCH] Drop stalk feature Resolve #3935 Closes #2226 Closes #1946 --- CHANGELOG.md | 1 + locales/ja-JP.yml | 3 -- .../desktop/views/pages/user/user.profile.vue | 27 ---------- src/docs/follow.ja-JP.md | 5 -- src/models/following.ts | 1 - src/models/user.ts | 2 - src/server/api/common/get-friends.ts | 6 +-- src/server/api/endpoints/following/stalk.ts | 50 ------------------- src/server/api/endpoints/following/unstalk.ts | 50 ------------------- .../api/endpoints/notes/hybrid-timeline.ts | 8 ++- src/server/api/endpoints/notes/timeline.ts | 6 +-- src/services/note/create.ts | 9 ++-- 12 files changed, 11 insertions(+), 157 deletions(-) delete mode 100644 src/server/api/endpoints/following/stalk.ts delete mode 100644 src/server/api/endpoints/following/unstalk.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 3246aabe82..7ab5b1f68d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ unreleased * ログイン時に二段階認証が分かりにくいのを改善 * 投稿のツールチップを出すのは時間の上だけに変更 * ハッシュタグ判定の強化 +* ストーク機能の廃止 * クライアントのAPIリクエストをストリーム経由で行うオプションを廃止 * 一部箇所でカスタム絵文字が適用されていないのを修正 diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 2cb1c317db..6b70ed08d4 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1402,9 +1402,6 @@ desktop/views/pages/user/user.photos.vue: desktop/views/pages/user/user.profile.vue: follows-you: "フォローされています" - stalk: "ストークする" - stalking: "ストーキングしています" - unstalk: "ストーク解除" menu: "メニュー" desktop/views/pages/user/user.header.vue: diff --git a/src/client/app/desktop/views/pages/user/user.profile.vue b/src/client/app/desktop/views/pages/user/user.profile.vue index 22cbf6546f..5f424432a9 100644 --- a/src/client/app/desktop/views/pages/user/user.profile.vue +++ b/src/client/app/desktop/views/pages/user/user.profile.vue @@ -3,10 +3,6 @@

{{ $t('follows-you') }}

-

- {{ $t('stalking') }} {{ $t('unstalk') }} - {{ $t('stalk') }} -

{{ $t('menu') }} @@ -24,26 +20,6 @@ export default Vue.extend({ props: ['user'], methods: { - stalk() { - this.$root.api('following/stalk', { - userId: this.user.id - }).then(() => { - this.user.isStalking = true; - }, () => { - alert('error'); - }); - }, - - unstalk() { - this.$root.api('following/unstalk', { - userId: this.user.id - }).then(() => { - this.user.isStalking = false; - }, () => { - alert('error'); - }); - }, - menu() { this.$root.new(XUserMenu, { source: this.$refs.menu.$el, @@ -78,9 +54,6 @@ export default Vue.extend({ background #eefaff border-radius 4px - > .stalk - margin 12px 0 0 0 - > .action-form padding 16px text-align center diff --git a/src/docs/follow.ja-JP.md b/src/docs/follow.ja-JP.md index a883435ab4..28a606e283 100644 --- a/src/docs/follow.ja-JP.md +++ b/src/docs/follow.ja-JP.md @@ -1,8 +1,3 @@ # フォロー ユーザーをフォローすると、タイムラインにそのユーザーの投稿が表示されるようになります。ただし、他のユーザーに対する返信は含まれません。 ユーザーをフォローするには、ユーザーページの「フォロー」ボタンをクリックします。フォローを解除するには、もう一度クリックします。 - -## ストーキング -ユーザーをフォローしている状態では、さらに「ストーキング」モードをオンにすることができます。ストーキングを行うと、タイムラインにそのユーザーの全ての投稿が表示されるようになります。つまり、他のユーザーに対する返信も含まれることになります。 -ストーキングするには、ユーザーページの「ストークする」をクリックします。ストーキングをやめるには、もう一度クリックします。 -ストーキングしていることは相手に通知されません。 diff --git a/src/models/following.ts b/src/models/following.ts index 58d55bbeef..12cc27211b 100644 --- a/src/models/following.ts +++ b/src/models/following.ts @@ -12,7 +12,6 @@ export type IFollowing = { createdAt: Date; followeeId: mongo.ObjectID; followerId: mongo.ObjectID; - stalk: boolean; // 非正規化 _followee: { diff --git a/src/models/user.ts b/src/models/user.ts index 85dfdf2909..6987bd3da8 100644 --- a/src/models/user.ts +++ b/src/models/user.ts @@ -219,7 +219,6 @@ export async function getRelation(me: mongo.ObjectId, target: mongo.ObjectId) { return { id: target, isFollowing: following1 !== null, - isStalking: following1 ? following1.stalk : false, hasPendingFollowRequestFromYou: followReq1 !== null, hasPendingFollowRequestToYou: followReq2 !== null, isFollowed: following2 !== null, @@ -352,7 +351,6 @@ export const pack = ( _user.isFollowing = relation.isFollowing; _user.isFollowed = relation.isFollowed; - _user.isStalking = relation.isStalking; _user.hasPendingFollowRequestFromYou = relation.hasPendingFollowRequestFromYou; _user.hasPendingFollowRequestToYou = relation.hasPendingFollowRequestToYou; _user.isBlocking = relation.isBlocking; diff --git a/src/server/api/common/get-friends.ts b/src/server/api/common/get-friends.ts index e0b05f73df..876aa399f7 100644 --- a/src/server/api/common/get-friends.ts +++ b/src/server/api/common/get-friends.ts @@ -36,14 +36,12 @@ export const getFriends = async (me: mongodb.ObjectID, includeMe = true, remoteO // ID list of other users who the I follows const myfollowings = followings.map(following => ({ - id: following.followeeId, - stalk: following.stalk + id: following.followeeId })); if (includeMe) { myfollowings.push({ - id: me, - stalk: true + id: me }); } diff --git a/src/server/api/endpoints/following/stalk.ts b/src/server/api/endpoints/following/stalk.ts deleted file mode 100644 index 3a58e2192f..0000000000 --- a/src/server/api/endpoints/following/stalk.ts +++ /dev/null @@ -1,50 +0,0 @@ -import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id'; -import Following from '../../../../models/following'; -import define from '../../define'; - -export const meta = { - desc: { - 'ja-JP': '指定したユーザーをストーキングします。', - 'en-US': 'Stalk a user.' - }, - - requireCredential: true, - - kind: 'following-write', - - params: { - userId: { - validator: $.type(ID), - transform: transform, - desc: { - 'ja-JP': '対象のユーザーのID', - 'en-US': 'Target user ID' - } - } - } -}; - -export default define(meta, (ps, user) => new Promise(async (res, rej) => { - const follower = user; - - // Fetch following - const following = await Following.findOne({ - followerId: follower._id, - followeeId: ps.userId - }); - - if (following === null) { - return rej('following not found'); - } - - // Stalk - await Following.update({ _id: following._id }, { - $set: { - stalk: true - } - }); - - res(); - - // TODO: イベント -})); diff --git a/src/server/api/endpoints/following/unstalk.ts b/src/server/api/endpoints/following/unstalk.ts deleted file mode 100644 index ad07ec38ba..0000000000 --- a/src/server/api/endpoints/following/unstalk.ts +++ /dev/null @@ -1,50 +0,0 @@ -import $ from 'cafy'; import ID, { transform } from '../../../../misc/cafy-id'; -import Following from '../../../../models/following'; -import define from '../../define'; - -export const meta = { - desc: { - 'ja-JP': '指定したユーザーのストーキングをやめます。', - 'en-US': 'Unstalk a user.' - }, - - requireCredential: true, - - kind: 'following-write', - - params: { - userId: { - validator: $.type(ID), - transform: transform, - desc: { - 'ja-JP': '対象のユーザーのID', - 'en-US': 'Target user ID' - } - } - } -}; - -export default define(meta, (ps, user) => new Promise(async (res, rej) => { - const follower = user; - - // Fetch following - const following = await Following.findOne({ - followerId: follower._id, - followeeId: ps.userId - }); - - if (following === null) { - return rej('following not found'); - } - - // Stalk - await Following.update({ _id: following._id }, { - $set: { - stalk: false - } - }); - - res(); - - // TODO: イベント -})); diff --git a/src/server/api/endpoints/notes/hybrid-timeline.ts b/src/server/api/endpoints/notes/hybrid-timeline.ts index 919b0662aa..c05b88a01b 100644 --- a/src/server/api/endpoints/notes/hybrid-timeline.ts +++ b/src/server/api/endpoints/notes/hybrid-timeline.ts @@ -119,12 +119,10 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { _id: -1 }; - const followQuery = followings.map(f => f.stalk ? { - userId: f.id - } : { + const followQuery = followings.map(f => ({ userId: f.id, - // ストーキングしてないならリプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める) + // リプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める) $or: [{ // リプライでない replyId: null @@ -140,7 +138,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { // 自分(フォロワー)が送信したリプライ userId: user._id }] - }); + })); const visibleQuery = user == null ? [{ visibility: { $in: [ 'public', 'home' ] } diff --git a/src/server/api/endpoints/notes/timeline.ts b/src/server/api/endpoints/notes/timeline.ts index 24ed222e9a..9b0cc6ac20 100644 --- a/src/server/api/endpoints/notes/timeline.ts +++ b/src/server/api/endpoints/notes/timeline.ts @@ -117,9 +117,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { _id: -1 }; - const followQuery = followings.map(f => f.stalk ? { - userId: f.id - } : { + const followQuery = followings.map(f => ({ userId: f.id, // ストーキングしてないならリプライは含めない(ただし投稿者自身の投稿へのリプライ、自分の投稿へのリプライ、自分のリプライは含める) @@ -138,7 +136,7 @@ export default define(meta, (ps, user) => new Promise(async (res, rej) => { // 自分(フォロワー)が送信したリプライ userId: user._id }] - }); + })); const visibleQuery = user == null ? [{ visibility: { $in: [ 'public', 'home' ] } diff --git a/src/services/note/create.ts b/src/services/note/create.ts index 8031746c89..f8d1c24087 100644 --- a/src/services/note/create.ts +++ b/src/services/note/create.ts @@ -540,12 +540,9 @@ async function publishToFollowers(note: INote, user: IUser, noteActivity: any) { const follower = following._follower; if (isLocalUser(follower)) { - // ストーキングしていない場合 - if (!following.stalk) { - // この投稿が返信ならスキップ - if (note.replyId && !note._reply.userId.equals(following.followerId) && !note._reply.userId.equals(note.userId)) - continue; - } + // この投稿が返信ならスキップ + if (note.replyId && !note._reply.userId.equals(following.followerId) && !note._reply.userId.equals(note.userId)) + continue; // Publish event to followers stream publishHomeTimelineStream(following.followerId, detailPackedNote);