[backend/libmfm] Fix broken rendering of mentions of local users in some circumstances (ISH-567)

This was caused because of an inconsistency of whether to set the account domain as a fallback value or not. Therefore, invocations with the mentioned local user host not having a fallback value would cause broken mention rendering, e.g. in bios/profile fields.
This commit is contained in:
Laura Hausmann 2024-10-31 21:20:16 +01:00
parent e61e3d2fde
commit 525bd02022
No known key found for this signature in database
GPG key ID: D044E84C5BE01605

View file

@ -193,7 +193,7 @@ public class MfmConverter(IOptions<Config.InstanceSection> config)
var punyHost = host?.ToPunycodeLower(); var punyHost = host?.ToPunycodeLower();
if (emoji?.FirstOrDefault(p => p.Name == emojiCodeNode.Name && p.Host == punyHost) is { } hit) if (emoji?.FirstOrDefault(p => p.Name == emojiCodeNode.Name && p.Host == punyHost) is { } hit)
{ {
var el = document.CreateElement("span"); var el = document.CreateElement("span");
var inner = document.CreateElement("img"); var inner = document.CreateElement("img");
inner.SetAttribute("src", hit.PublicUrl); inner.SetAttribute("src", hit.PublicUrl);
el.AppendChild(inner); el.AppendChild(inner);
@ -246,9 +246,13 @@ public class MfmConverter(IOptions<Config.InstanceSection> config)
if (finalHost == config.Value.WebDomain) if (finalHost == config.Value.WebDomain)
finalHost = config.Value.AccountDomain; finalHost = config.Value.AccountDomain;
var mention = mentions.FirstOrDefault(p => p.Username.EqualsIgnoreCase(mentionNode.Username) && Func<Note.MentionedUser, bool> predicate = finalHost == config.Value.AccountDomain
p.Host.EqualsIgnoreCase(finalHost)); ? p => p.Username.EqualsIgnoreCase(mentionNode.Username) &&
if (mention == null) (p.Host.EqualsIgnoreCase(finalHost) || p.Host == null)
: p => p.Username.EqualsIgnoreCase(mentionNode.Username) &&
p.Host.EqualsIgnoreCase(finalHost);
if (mentions.FirstOrDefault(predicate) is not { } mention)
{ {
el.TextContent = $"@{mentionNode.Acct}"; el.TextContent = $"@{mentionNode.Acct}";
} }