diff --git a/Content.Client/Changelog/ChangelogManager.cs b/Content.Client/Changelog/ChangelogManager.cs
index 396af99d2c..d62ce17f0e 100644
--- a/Content.Client/Changelog/ChangelogManager.cs
+++ b/Content.Client/Changelog/ChangelogManager.cs
@@ -1,5 +1,6 @@
using System.Globalization;
using System.Linq;
+using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Content.Shared.CCVar;
using Robust.Shared.Configuration;
@@ -25,8 +26,8 @@ namespace Content.Client.Changelog
private ISawmill _sawmill = default!;
public bool NewChangelogEntries { get; private set; }
- public int LastReadId { get; private set; }
- public int MaxId { get; private set; }
+ public DateTime LastReadTime { get; private set; }
+ public DateTime MaxTime { get; private set; }
public event Action? NewChangelogEntriesChanged;
@@ -35,7 +36,7 @@ namespace Content.Client.Changelog
/// stores the new ID to disk and clears .
///
///
- /// is NOT cleared
+ /// is NOT cleared
/// since that's used in the changelog menu to show the "since you last read" bar.
///
public void SaveNewReadId()
@@ -43,9 +44,11 @@ namespace Content.Client.Changelog
NewChangelogEntries = false;
NewChangelogEntriesChanged?.Invoke();
- using var sw = _resource.UserData.OpenWriteText(new ($"/changelog_last_seen_{_configManager.GetCVar(CCVars.ServerId)}"));
+ using var sw =
+ _resource.UserData.OpenWriteText(
+ new($"/changelog_last_seen_{_configManager.GetCVar(CCVars.ServerId)}_datetime"));
- sw.Write(MaxId.ToString());
+ sw.Write(MaxTime.ToString("O"));
}
public async void Initialize()
@@ -80,15 +83,19 @@ namespace Content.Client.Changelog
return;
}
- MaxId = changelog.Entries.Max(c => c.Id);
+ MaxTime = changelog.Entries.Max(c => c.Time);
- var path = new ResPath($"/changelog_last_seen_{_configManager.GetCVar(CCVars.ServerId)}");
- if (_resource.UserData.TryReadAllText(path, out var lastReadIdText))
+ var path = new ResPath($"/changelog_last_seen_{_configManager.GetCVar(CCVars.ServerId)}_datetime");
+ if(_resource.UserData.TryReadAllText(path, out var lastReadTimeText))
{
- LastReadId = int.Parse(lastReadIdText);
+ if (Regex.IsMatch(lastReadTimeText,
+ @"^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$"))
+ {
+ LastReadTime = DateTime.ParseExact(lastReadTimeText, "O", CultureInfo.InvariantCulture);
+ }
}
- NewChangelogEntries = LastReadId < MaxId;
+ NewChangelogEntries = LastReadTime < MaxTime;
NewChangelogEntriesChanged?.Invoke();
}
diff --git a/Content.Client/Changelog/ChangelogTab.xaml.cs b/Content.Client/Changelog/ChangelogTab.xaml.cs
index d1e2bc7533..bb677db40e 100644
--- a/Content.Client/Changelog/ChangelogTab.xaml.cs
+++ b/Content.Client/Changelog/ChangelogTab.xaml.cs
@@ -34,14 +34,14 @@ public sealed partial class ChangelogTab : Control
.OrderByDescending(c => c.Key);
var hasRead = changelog.Name != MainChangelogName ||
- _changelog.MaxId <= _changelog.LastReadId;
+ _changelog.MaxTime <= _changelog.LastReadTime;
foreach (var dayEntries in byDay)
{
var day = dayEntries.Key;
var groupedEntries = dayEntries
- .GroupBy(c => (c.Author, Read: c.Id <= _changelog.LastReadId))
+ .GroupBy(c => (c.Author, Read: c.Time <= _changelog.LastReadTime))
.OrderBy(c => c.Key.Read)
.ThenBy(c => c.Key.Author);