From 14cbfaed7c7d13bdb65c1d306591e534a8c093b7 Mon Sep 17 00:00:00 2001 From: pancakes Date: Mon, 23 Dec 2024 16:29:51 +1000 Subject: [PATCH] [backend/libmfm] Convert outgoing unixtime nodes to human readable date if possible --- .../Helpers/LibMfm/Conversion/MfmConverter.cs | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Iceshrimp.Backend/Core/Helpers/LibMfm/Conversion/MfmConverter.cs b/Iceshrimp.Backend/Core/Helpers/LibMfm/Conversion/MfmConverter.cs index 862d383b..2dc13c4b 100644 --- a/Iceshrimp.Backend/Core/Helpers/LibMfm/Conversion/MfmConverter.cs +++ b/Iceshrimp.Backend/Core/Helpers/LibMfm/Conversion/MfmConverter.cs @@ -235,6 +235,36 @@ public class MfmConverter( return el; } } + case MfmFnNode { Name: "unixtime" } fn: + { + var el = CreateInlineFormattingElement(document, "i"); + + if (fn.Children.Length != 1 || fn.Children.FirstOrDefault() is not MfmTextNode textNode) + return Fallback(); + + double timestamp; + try + { + timestamp = double.Parse(textNode.Text); + } + catch + { + return Fallback(); + } + + var date = DateTime.UnixEpoch.AddSeconds(timestamp); + el.TextContent = date.ToLocalTime().ToString("HH:mm, d MMM yyyy zzzz"); + + return el; + + IElement Fallback() + { + AddHtmlMarkup(document, el, "*"); + AppendChildren(el, document, node, mentions, host, usedMedia); + AddHtmlMarkup(document, el, "*"); + return el; + } + } case MfmBoldNode: { var el = CreateInlineFormattingElement(document, "b");