diff --git a/src/SiteMonitor/Constants.cs b/src/SiteMonitor/Constants.cs
index e189039..0cc8052 100644
--- a/src/SiteMonitor/Constants.cs
+++ b/src/SiteMonitor/Constants.cs
@@ -1,4 +1,5 @@
-using System.Reflection;
+using System;
+using System.Reflection;
namespace SiteMonitor;
@@ -6,6 +7,16 @@ namespace SiteMonitor;
/// Constants used throughout the file.
///
public class Constants {
+ ///
+ /// The maximum amount of time before alerting the user that we aren't getting chat messages.
+ ///
+ public static readonly TimeSpan MAX_TIME_WITHOUT_CHATS = TimeSpan.FromMinutes(30);
+
+ ///
+ /// The maximum amount of time before alerting the user that the APIs are down and not automatically coming back up.
+ ///
+ public static readonly TimeSpan MAX_TIME_SERVICE_IS_DOWN = TimeSpan.FromMinutes(5);
+
///
/// The version of the application being run right now.
///
diff --git a/src/SiteMonitor/ViewModels/MainWindowViewModel.cs b/src/SiteMonitor/ViewModels/MainWindowViewModel.cs
index b32ffa7..db9c818 100644
--- a/src/SiteMonitor/ViewModels/MainWindowViewModel.cs
+++ b/src/SiteMonitor/ViewModels/MainWindowViewModel.cs
@@ -21,6 +21,7 @@ namespace SiteMonitor.ViewModels;
/// The view model for the main UI.
///
public partial class MainWindowViewModel : ViewModelBase {
+ private DateTime? _apiDownSince;
[ObservableProperty] private bool _apiUp = true;
[ObservableProperty] private string? _chatTimestamp;
@@ -168,7 +169,7 @@ private async Task PingSite() {
TimeSpan diff = DateTime.Now - time.ToLocalTime();
timestamp = $"{timestamp} ({diff.Hours}h {diff.Minutes}m {diff.Seconds}s ago)";
ChatTimestamp = timestamp;
- chatNotUpdating = diff > TimeSpan.FromMinutes(5);
+ chatNotUpdating = diff > Constants.MAX_TIME_WITHOUT_CHATS;
}
}
else {
@@ -176,7 +177,9 @@ private async Task PingSite() {
chatNotUpdating = true;
}
- if ((!WebsiteUp || !ApiUp || !NullUp || chatNotUpdating) && IsMinimized) {
+ _apiDownSince = !WebsiteUp || !ApiUp || !NullUp ? _apiDownSince ?? DateTime.Now : null;
+ bool apiNotComingUp = DateTime.Now - _apiDownSince > Constants.MAX_TIME_SERVICE_IS_DOWN;
+ if ((apiNotComingUp || chatNotUpdating) && IsMinimized) {
WindowState = WindowState.Normal;
}