[frontend] Automatically update note datetime display

This commit is contained in:
Lilian 2024-07-24 18:25:05 +02:00
parent edf08679fd
commit 3b06ee1e12
No known key found for this signature in database

View file

@ -1,3 +1,4 @@
@using System.Timers
@using Iceshrimp.Assets.PhosphorIcons @using Iceshrimp.Assets.PhosphorIcons
@using Iceshrimp.Frontend.Localization @using Iceshrimp.Frontend.Localization
@using Iceshrimp.Shared.Schemas.Web @using Iceshrimp.Shared.Schemas.Web
@ -38,6 +39,11 @@
[Parameter] [EditorRequired] public required NoteVisibility Visibility { get; set; } [Parameter] [EditorRequired] public required NoteVisibility Visibility { get; set; }
[Parameter] [EditorRequired] public required string? InstanceName { get; set; } [Parameter] [EditorRequired] public required string? InstanceName { get; set; }
protected override void OnInitialized()
{
ResetTimer();
}
private string RenderDate(DateTime date) private string RenderDate(DateTime date)
{ {
var diff = DateTime.Now - date; var diff = DateTime.Now - date;
@ -49,7 +55,43 @@
{ TotalDays: >= 1 } => Loc["{0}d", Math.Round(diff.TotalDays)], { TotalDays: >= 1 } => Loc["{0}d", Math.Round(diff.TotalDays)],
{ TotalHours: >= 1 } => Loc["{0}h", Math.Round(diff.TotalHours)], { TotalHours: >= 1 } => Loc["{0}h", Math.Round(diff.TotalHours)],
{ TotalMinutes: >= 1 } => Loc["{0}m", Math.Round(diff.TotalMinutes)], { TotalMinutes: >= 1 } => Loc["{0}m", Math.Round(diff.TotalMinutes)],
{ TotalSeconds: >= 1 } => Loc["{0}s", Math.Round(diff.TotalSeconds)],
_ => Loc["Just now"] _ => 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;
}
} }