mirror of
https://github.com/hotomoe/hotomoe
synced 2024-12-04 01:38:09 +09:00
wip
This commit is contained in:
parent
34923888c7
commit
6575a6de5b
@ -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) {
|
||||||
|
@ -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];
|
||||||
|
Loading…
Reference in New Issue
Block a user