This commit is contained in:
syuilo 2017-12-22 07:26:23 +09:00
parent 34923888c7
commit 6575a6de5b
2 changed files with 49 additions and 7 deletions

View File

@ -3,6 +3,7 @@
*/ */
import $ from 'cafy'; import $ from 'cafy';
import Notification from '../../models/notification'; import Notification from '../../models/notification';
import Mute from '../../models/mute';
import serialize from '../../serializers/notification'; import serialize from '../../serializers/notification';
import getFriends from '../../common/get-friends'; import getFriends from '../../common/get-friends';
import read from '../../common/read-notification'; import read from '../../common/read-notification';
@ -45,8 +46,18 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
return rej('cannot set since_id and until_id'); return rej('cannot set since_id and until_id');
} }
const mute = await Mute.find({
muter_id: user._id,
deleted_at: { $exists: false }
});
const query = { const query = {
notifiee_id: user._id notifiee_id: user._id,
$and: [{
notifier_id: {
$nin: mute.map(m => m.mutee_id)
}
}]
} as any; } as any;
const sort = { const sort = {
@ -54,12 +65,14 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
}; };
if (following) { if (following) {
// ID list of the user $self and other users who the user follows // ID list of the user itself and other users who the user follows
const followingIds = await getFriends(user._id); const followingIds = await getFriends(user._id);
query.notifier_id = { query.$and.push({
$in: followingIds notifier_id: {
}; $in: followingIds
}
});
} }
if (type) { if (type) {

View File

@ -3,19 +3,48 @@ import * as redis from 'redis';
import * as debug from 'debug'; import * as debug from 'debug';
import User from '../models/user'; import User from '../models/user';
import Mute from '../models/mute';
import serializePost from '../serializers/post'; import serializePost from '../serializers/post';
import readNotification from '../common/read-notification'; import readNotification from '../common/read-notification';
const log = debug('misskey'); const log = debug('misskey');
export default function homeStream(request: websocket.request, connection: websocket.connection, subscriber: redis.RedisClient, user: any): void { export default async function(request: websocket.request, connection: websocket.connection, subscriber: redis.RedisClient, user: any) {
// Subscribe Home stream channel // Subscribe Home stream channel
subscriber.subscribe(`misskey:user-stream:${user._id}`); subscriber.subscribe(`misskey:user-stream:${user._id}`);
const mute = await Mute.find({
muter_id: user._id,
deleted_at: { $exists: false }
});
const mutedUserIds = mute.map(m => m.mutee_id.toString());
subscriber.on('message', async (channel, data) => { subscriber.on('message', async (channel, data) => {
switch (channel.split(':')[1]) { switch (channel.split(':')[1]) {
case 'user-stream': case 'user-stream':
connection.send(data); try {
const x = JSON.parse(data);
if (x.type == 'post') {
if (mutedUserIds.indexOf(x.body.user_id) != -1) {
return;
}
if (x.body.reply != null && mutedUserIds.indexOf(x.body.reply.user_id) != -1) {
return;
}
if (x.body.repost != null && mutedUserIds.indexOf(x.body.repost.user_id) != -1) {
return;
}
} else if (x.type == 'notification') {
if (mutedUserIds.indexOf(x.body.user_id) != -1) {
return;
}
}
connection.send(data);
} catch (e) {
connection.send(data);
}
break; break;
case 'post-stream': case 'post-stream':
const postId = channel.split(':')[2]; const postId = channel.split(':')[2];