[frontend] Automatically update note datetime display
This commit is contained in:
parent
edf08679fd
commit
3b06ee1e12
1 changed files with 43 additions and 1 deletions
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue