[backend/core] Generate reply notifications for notes that aren't of specified visibility
This commit is contained in:
parent
b27572bf27
commit
c4190781e3
2 changed files with 16 additions and 9 deletions
|
@ -43,4 +43,6 @@ public static class EnumerableExtensions
|
||||||
var yArray = y as T[] ?? y.ToArray();
|
var yArray = y as T[] ?? y.ToArray();
|
||||||
return xArray.Length == yArray.Length && xArray.All(yArray.Contains);
|
return xArray.Length == yArray.Length && xArray.All(yArray.Contains);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IEnumerable<T> NotNull<T>(this IEnumerable<T?> @enum) => @enum.OfType<T>();
|
||||||
}
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using Iceshrimp.Backend.Core.Database;
|
using Iceshrimp.Backend.Core.Database;
|
||||||
using Iceshrimp.Backend.Core.Database.Tables;
|
using Iceshrimp.Backend.Core.Database.Tables;
|
||||||
|
using Iceshrimp.Backend.Core.Extensions;
|
||||||
using Iceshrimp.Backend.Core.Helpers;
|
using Iceshrimp.Backend.Core.Helpers;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
@ -42,14 +43,18 @@ public class NotificationService(
|
||||||
|
|
||||||
public async Task GenerateReplyNotifications(Note note, IReadOnlyCollection<string> mentionedLocalUserIds)
|
public async Task GenerateReplyNotifications(Note note, IReadOnlyCollection<string> mentionedLocalUserIds)
|
||||||
{
|
{
|
||||||
if (note.Visibility != Note.NoteVisibility.Specified) return;
|
var users = mentionedLocalUserIds
|
||||||
if (note.VisibleUserIds.Count == 0) return;
|
.Concat(note.VisibleUserIds)
|
||||||
|
.Append(note.ReplyUserId)
|
||||||
|
.NotNull()
|
||||||
|
.Distinct()
|
||||||
|
.Except(mentionedLocalUserIds)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
var users = mentionedLocalUserIds.Concat(note.VisibleUserIds).Distinct().Except(mentionedLocalUserIds).ToList();
|
|
||||||
if (users.Count == 0) return;
|
if (users.Count == 0) return;
|
||||||
|
|
||||||
var blocks = await db.Blockings
|
var blocks = await db.Blockings
|
||||||
.Where(p => p.BlockeeId == note.UserId && mentionedLocalUserIds.Contains(p.BlockerId))
|
.Where(p => p.BlockeeId == note.UserId && users.Contains(p.BlockerId))
|
||||||
.Select(p => p.BlockerId)
|
.Select(p => p.BlockerId)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue