about summary refs log tree commit diff
path: root/MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs')
-rw-r--r--MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs35
1 files changed, 35 insertions, 0 deletions
diff --git a/MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs b/MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs
new file mode 100644
index 0000000..462364c
--- /dev/null
+++ b/MatrixRoomUtils.Web/Classes/LocalStorageWrapper.cs
@@ -0,0 +1,35 @@
+using Blazored.LocalStorage;
+using MatrixRoomUtils.Authentication;
+using MatrixRoomUtils.Responses;
+
+namespace MatrixRoomUtils.Web.Classes;
+
+public partial class LocalStorageWrapper
+{
+    //some basic logic
+    public static async Task LoadFromLocalStorage(ILocalStorageService localStorage)
+    {
+        RuntimeCache.AccessToken = await localStorage.GetItemAsync<string>("rory.matrixroomutils.token");
+        RuntimeCache.CurrentHomeserver = await localStorage.GetItemAsync<string>("rory.matrixroomutils.current_homeserver");
+        RuntimeCache.LoginSessions = await localStorage.GetItemAsync<Dictionary<string, UserInfo>>("rory.matrixroomutils.user_cache") ?? new();
+        RuntimeCache.HomeserverResolutionCache = await localStorage.GetItemAsync<Dictionary<string, HomeServerResolutionResult>>("rory.matrixroomutils.homeserver_resolution_cache") ?? new();
+        Console.WriteLine($"[LocalStorageWrapper] Loaded {RuntimeCache.LoginSessions.Count} login sessions, {RuntimeCache.HomeserverResolutionCache.Count} homeserver resolution cache entries");
+        if (RuntimeCache.AccessToken != null && RuntimeCache.CurrentHomeserver != null)
+        {
+            Console.WriteLine($"Access token and current homeserver are not null, creating authenticated home server");
+            RuntimeCache.CurrentHomeServer = new AuthenticatedHomeServer(RuntimeCache.LoginSessions[RuntimeCache.AccessToken].LoginResponse.UserId, RuntimeCache.AccessToken, RuntimeCache.LoginSessions[RuntimeCache.AccessToken].LoginResponse.HomeServer);
+            Console.WriteLine("Created authenticated home server");
+        }
+        RuntimeCache.WasLoaded = true;
+    }
+
+    public static async Task SaveToLocalStorage(ILocalStorageService localStorage)
+    {
+        await localStorage.SetItemAsStringAsync("rory.matrixroomutils.token", RuntimeCache.AccessToken);
+        await localStorage.SetItemAsync("rory.matrixroomutils.current_homeserver", RuntimeCache.CurrentHomeserver);
+        await localStorage.SetItemAsync("rory.matrixroomutils.user_cache", RuntimeCache.LoginSessions);
+        await localStorage.SetItemAsync("rory.matrixroomutils.homeserver_resolution_cache", 
+            RuntimeCache.HomeserverResolutionCache.DistinctBy(x => x.Key)
+                .ToDictionary(x => x.Key, x => x.Value));
+    }
+}
\ No newline at end of file