Prevent notifications if the notification is for a note that is muted (#9323)
This commit is contained in:
commit
16ee7cd442
3 changed files with 23 additions and 2 deletions
|
@ -1,6 +1,6 @@
|
||||||
import { publishMainStream } from '@/services/stream.js';
|
import { publishMainStream } from '@/services/stream.js';
|
||||||
import { pushNotification } from '@/services/push-notification.js';
|
import { pushNotification } from '@/services/push-notification.js';
|
||||||
import { Notifications, Mutings, UserProfiles, Users } from '@/models/index.js';
|
import { Notifications, Mutings, NoteThreadMutings, UserProfiles, Users } from '@/models/index.js';
|
||||||
import { genId } from '@/misc/gen-id.js';
|
import { genId } from '@/misc/gen-id.js';
|
||||||
import { User } from '@/models/entities/user.js';
|
import { User } from '@/models/entities/user.js';
|
||||||
import { Notification } from '@/models/entities/notification.js';
|
import { Notification } from '@/models/entities/notification.js';
|
||||||
|
@ -19,6 +19,17 @@ export async function createNotification(
|
||||||
|
|
||||||
const isMuted = profile?.mutingNotificationTypes.includes(type);
|
const isMuted = profile?.mutingNotificationTypes.includes(type);
|
||||||
|
|
||||||
|
if (data.note != null) {
|
||||||
|
const threadMute = await NoteThreadMutings.findOneBy({
|
||||||
|
userId: notifieeId,
|
||||||
|
threadId: data.note.threadId || data.note.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (threadMute) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Create notification
|
// Create notification
|
||||||
const notification = await Notifications.insert({
|
const notification = await Notifications.insert({
|
||||||
id: genId(),
|
id: genId(),
|
||||||
|
|
|
@ -92,6 +92,7 @@ class NotificationManager {
|
||||||
createNotification(x.target, x.reason, {
|
createNotification(x.target, x.reason, {
|
||||||
notifierId: this.notifier.id,
|
notifierId: this.notifier.id,
|
||||||
noteId: this.note.id,
|
noteId: this.note.id,
|
||||||
|
note: this.note,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -394,7 +395,14 @@ export default async (user: { id: User['id']; username: User['username']; host:
|
||||||
|
|
||||||
// Notify
|
// Notify
|
||||||
if (data.renote.userHost === null) {
|
if (data.renote.userHost === null) {
|
||||||
nm.push(data.renote.userId, type);
|
const threadMuted = await NoteThreadMutings.findOneBy({
|
||||||
|
userId: data.renote.userId,
|
||||||
|
threadId: data.renote.threadId || data.renote.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!threadMuted) {
|
||||||
|
nm.push(data.renote.userId, type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch watchers
|
// Fetch watchers
|
||||||
|
|
|
@ -102,6 +102,7 @@ export default async (user: { id: User['id']; host: User['host']; }, note: Note,
|
||||||
if (note.userHost === null) {
|
if (note.userHost === null) {
|
||||||
createNotification(note.userId, 'reaction', {
|
createNotification(note.userId, 'reaction', {
|
||||||
notifierId: user.id,
|
notifierId: user.id,
|
||||||
|
note: note,
|
||||||
noteId: note.id,
|
noteId: note.id,
|
||||||
reaction: reaction,
|
reaction: reaction,
|
||||||
});
|
});
|
||||||
|
@ -115,6 +116,7 @@ export default async (user: { id: User['id']; host: User['host']; }, note: Note,
|
||||||
for (const watcher of watchers) {
|
for (const watcher of watchers) {
|
||||||
createNotification(watcher.userId, 'reaction', {
|
createNotification(watcher.userId, 'reaction', {
|
||||||
notifierId: user.id,
|
notifierId: user.id,
|
||||||
|
note: note,
|
||||||
noteId: note.id,
|
noteId: note.id,
|
||||||
reaction: reaction,
|
reaction: reaction,
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue