From da99cff5826bc1f1847ca4f9ea31ed75a8dee0d0 Mon Sep 17 00:00:00 2001 From: Laura Hausmann Date: Mon, 12 Feb 2024 20:12:21 +0100 Subject: [PATCH] [backend/federation] Mention resolver failures shouldn't reject an entire request / job process (ISH-50) --- .../Core/Services/NoteService.cs | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/Iceshrimp.Backend/Core/Services/NoteService.cs b/Iceshrimp.Backend/Core/Services/NoteService.cs index ee2badec..62952d81 100644 --- a/Iceshrimp.Backend/Core/Services/NoteService.cs +++ b/Iceshrimp.Backend/Core/Services/NoteService.cs @@ -79,8 +79,8 @@ public class NoteService( var recipients = await db.Users .Where(p => mentionedUserIds.Contains(p.Id)) .Select(p => new User { - Host = p.Host, - Inbox = p.Inbox + Host = p.Host, + Inbox = p.Inbox }) .ToListAsync(); @@ -198,10 +198,17 @@ public class NoteService( private async Task ResolveNoteMentionsAsync(ASNote note) { var mentionTags = note.Tags?.OfType().Where(p => p.Href != null) ?? []; var users = await mentionTags - .Select(async p => await userResolver.ResolveAsync(p.Href!.Id!)) + .Select(async p => { + try { + return await userResolver.ResolveAsync(p.Href!.Id!); + } + catch { + return null; + } + }) .AwaitAllNoConcurrencyAsync(); - return ResolveNoteMentions(users); + return ResolveNoteMentions(users.Where(p => p != null).Select(p => p!).ToList()); } private async Task ResolveNoteMentionsAsync(string? text) { @@ -209,11 +216,19 @@ public class NoteService( ? await MfmParser.Parse(text) .SelectMany(p => p.Children.Append(p)) .OfType() - .Select(async p => await userResolver.ResolveAsync(p.Acct)) + .DistinctBy(p => p.Acct) + .Select(async p => { + try { + return await userResolver.ResolveAsync(p.Acct); + } + catch { + return null; + } + }) .AwaitAllNoConcurrencyAsync() : []; - return ResolveNoteMentions(users); + return ResolveNoteMentions(users.Where(p => p != null).Select(p => p!).ToList()); } private MentionQuad ResolveNoteMentions(IReadOnlyCollection users) {