From 3b06ee1e1272ff35a2f570bac459af20088c6d50 Mon Sep 17 00:00:00 2001 From: Lilian Date: Wed, 24 Jul 2024 18:25:05 +0200 Subject: [PATCH] [frontend] Automatically update note datetime display --- .../Components/Note/NoteMetadata.razor | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/Iceshrimp.Frontend/Components/Note/NoteMetadata.razor b/Iceshrimp.Frontend/Components/Note/NoteMetadata.razor index 4b429e85..011de872 100644 --- a/Iceshrimp.Frontend/Components/Note/NoteMetadata.razor +++ b/Iceshrimp.Frontend/Components/Note/NoteMetadata.razor @@ -1,3 +1,4 @@ +@using System.Timers @using Iceshrimp.Assets.PhosphorIcons @using Iceshrimp.Frontend.Localization @using Iceshrimp.Shared.Schemas.Web @@ -38,18 +39,59 @@ [Parameter] [EditorRequired] public required NoteVisibility Visibility { get; set; } [Parameter] [EditorRequired] public required string? InstanceName { get; set; } + protected override void OnInitialized() + { + ResetTimer(); + } + private string RenderDate(DateTime date) { var diff = DateTime.Now - date; return diff switch { { TotalDays: >= 365 } => Loc["{0}y", Math.Round(diff.TotalDays / 365)], - { TotalDays: >= 30 } => Loc["{0}mo",Math.Round(diff.TotalDays / 30)], + { TotalDays: >= 30 } => Loc["{0}mo", Math.Round(diff.TotalDays / 30)], { TotalDays: >= 7 } => Loc["{0}d", Math.Round(diff.TotalDays / 7)], { TotalDays: >= 1 } => Loc["{0}d", Math.Round(diff.TotalDays)], { TotalHours: >= 1 } => Loc["{0}h", Math.Round(diff.TotalHours)], { TotalMinutes: >= 1 } => Loc["{0}m", Math.Round(diff.TotalMinutes)], + { TotalSeconds: >= 1 } => Loc["{0}s", Math.Round(diff.TotalSeconds)], _ => Loc["Just now"] }; } + + private void UpdateDisplay(object? _, ElapsedEventArgs elapsedEventArgs) + { + StateHasChanged(); + ResetTimer(); + } + + private void ResetTimer() + { + var diff = DateTime.Now - CreatedAt; + if (diff.TotalMinutes < 1) // Default of 2 seconds + { + SetTimer(); + } + else if (diff.TotalHours < 1) + { + SetTimer(20000); // 20 seconds + } + else if (diff.TotalDays < 1 && diff.TotalHours > 1) + { + SetTimer(600000); // 10 minutes + } + else + { + SetTimer(3600000); // 1 hour + } + } + + private void SetTimer(int duration = 2000) + { + var timer = new Timer(duration); + timer.Elapsed += UpdateDisplay; + timer.AutoReset = false; + timer.Enabled = true; + } } \ No newline at end of file