diff --git a/.claude/settings.local.json b/.claude/settings.local.json
new file mode 100644
index 0000000..afac14a
--- /dev/null
+++ b/.claude/settings.local.json
@@ -0,0 +1,9 @@
+{
+ "permissions": {
+ "allow": [
+ "Bash(dotnet build:*)"
+ ],
+ "deny": [],
+ "ask": []
+ }
+}
diff --git a/LD-SysInfo/LD_SysInfo.csproj b/LD-SysInfo/LD_SysInfo.csproj
index 0d31a2e..84f02bd 100644
--- a/LD-SysInfo/LD_SysInfo.csproj
+++ b/LD-SysInfo/LD_SysInfo.csproj
@@ -12,6 +12,17 @@
C:\Users\Sonder\source\repos\psg-oversight-app\BuildDir\bin\Debug\net8.0-windows\
false
+
+ 1.0.0.0
+ 1.0.3.0
+ 1.0.3
+
+
+ true
+ true
+ https://gitea.psg.net.au/your-repo
+ true
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
+
+
diff --git a/LD-SysInfo/MainWindow.xaml.cs b/LD-SysInfo/MainWindow.xaml.cs
index 024213e..69ea665 100644
--- a/LD-SysInfo/MainWindow.xaml.cs
+++ b/LD-SysInfo/MainWindow.xaml.cs
@@ -1,24 +1,33 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
using System.Net.Http;
+using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
-using Microsoft.Win32;
-using System.IO;
-using System.Windows.Threading;
using System.Windows.Forms;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Threading;
+
using Hardcodet.Wpf.TaskbarNotification;
+
+using LD_SysInfo.Models;
using LD_SysInfo.Services;
+
+using MaterialDesignColors;
+
+using MaterialDesignThemes.Wpf;
+
+using Microsoft.Win32;
+
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
-using System.Windows.Media.Animation;
-using LD_SysInfo.Models;
-using MaterialDesignColors;
-using MaterialDesignThemes.Wpf;
-using System.Windows.Input;
+
using Application = System.Windows.Application;
-using System.Windows.Media;
@@ -34,6 +43,7 @@ namespace LD_SysInfo
private readonly DispatcherTimer messageClearTimer;
private readonly DispatcherTimer postTimer;
private readonly DispatcherTimer keepAliveTimer;
+ private readonly DispatcherTimer tokenRefreshTimer;
private readonly Uri LightThemeUri = new Uri("pack://application:,,,/Themes/LightTheme.xaml", UriKind.Absolute);
private readonly Uri DarkThemeUri = new Uri("pack://application:,,,/Themes/DarkTheme.xaml", UriKind.Absolute);
private bool isDarkTheme = false;
@@ -47,6 +57,8 @@ namespace LD_SysInfo
System.Net.ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
InitializeComponent();
+ var fvi = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
+ VersionTextBlock.Text = $"v{fvi.ProductVersion}";
LoadConfig();
DisplaySystemInfo();
AutoLogin();
@@ -74,7 +86,12 @@ namespace LD_SysInfo
keepAliveTimer.Tick += KeepAliveTimer_Tick;
keepAliveTimer.Start();
-
+ // 🔄 Initialize the Token Refresh timer to refresh token proactively before expiration
+ // Tokens expire in 60 minutes, so refresh at 50 minutes to be safe
+ tokenRefreshTimer = new DispatcherTimer();
+ tokenRefreshTimer.Interval = TimeSpan.FromMinutes(50);
+ tokenRefreshTimer.Tick += TokenRefreshTimer_Tick;
+ tokenRefreshTimer.Start();
}
@@ -252,6 +269,41 @@ namespace LD_SysInfo
});
}
+ var formattedUserApplications = new List