about summary refs log tree commit diff
path: root/MatrixRoomUtils.Core/Interfaces
diff options
context:
space:
mode:
authorTheArcaneBrony <myrainbowdash949@gmail.com>2023-06-30 03:36:58 +0200
committerTheArcaneBrony <myrainbowdash949@gmail.com>2023-06-30 03:36:58 +0200
commitbb8c2637af3b7982e7a4b2fd15e2fbec613d0848 (patch)
treeb8075ba7e507aad3f96f354712ad920ac421e474 /MatrixRoomUtils.Core/Interfaces
parentUpdate stuff (diff)
downloadMatrixUtils-bb8c2637af3b7982e7a4b2fd15e2fbec613d0848.tar.xz
Todays progress
Diffstat (limited to 'MatrixRoomUtils.Core/Interfaces')
-rw-r--r--MatrixRoomUtils.Core/Interfaces/IHomeServer.cs42
-rw-r--r--MatrixRoomUtils.Core/Interfaces/Services/IStorageProvider.cs28
2 files changed, 36 insertions, 34 deletions
diff --git a/MatrixRoomUtils.Core/Interfaces/IHomeServer.cs b/MatrixRoomUtils.Core/Interfaces/IHomeServer.cs
index 4fa6c1b..4ee2a3e 100644
--- a/MatrixRoomUtils.Core/Interfaces/IHomeServer.cs
+++ b/MatrixRoomUtils.Core/Interfaces/IHomeServer.cs
@@ -6,34 +6,36 @@ using MatrixRoomUtils.Core.StateEventTypes;
 namespace MatrixRoomUtils.Core.Interfaces;
 
 public class IHomeServer {
-    private readonly Dictionary<string, ProfileResponse?> _profileCache = new();
+    private readonly Dictionary<string, object> _profileCache = new();
     public string HomeServerDomain { get; set; }
     public string FullHomeServerDomain { get; set; }
 
     protected internal MatrixHttpClient _httpClient { get; set; } = new();
 
-
     public async Task<ProfileResponse> GetProfile(string mxid, bool debounce = false, bool cache = true) {
-        if (cache) {
-            if (debounce) await Task.Delay(Random.Shared.Next(100, 500));
-            if (_profileCache.ContainsKey(mxid)) {
-                while (_profileCache[mxid] == null) {
-                    Console.WriteLine($"Waiting for profile cache for {mxid}, currently {_profileCache[mxid]?.ToJson() ?? "null"} within {_profileCache.Count} profiles...");
-                    await Task.Delay(Random.Shared.Next(50, 500));
-                }
-
-                return _profileCache[mxid];
-            }
+        // if (cache) {
+        //     if (debounce) await Task.Delay(Random.Shared.Next(100, 500));
+        //     if (_profileCache.ContainsKey(mxid)) {
+        //         while (_profileCache[mxid] == null) {
+        //             Console.WriteLine($"Waiting for profile cache for {mxid}, currently {_profileCache[mxid]?.ToJson() ?? "null"} within {_profileCache.Count} profiles...");
+        //             await Task.Delay(Random.Shared.Next(50, 500));
+        //         }
+        //
+        //         return _profileCache[mxid];
+        //     }
+        // }
+        if(mxid is null) throw new ArgumentNullException(nameof(mxid));
+        if (_profileCache.ContainsKey(mxid)) {
+            if (_profileCache[mxid] is SemaphoreSlim s) await s.WaitAsync();
+            if (_profileCache[mxid] is ProfileResponse p) return p;
         }
-
-        _profileCache.Add(mxid, null);
+        _profileCache[mxid] = new SemaphoreSlim(1);
+        
         var resp = await _httpClient.GetAsync($"/_matrix/client/v3/profile/{mxid}");
-        var data = await resp.Content.ReadFromJsonAsync<JsonElement>();
+        var data = await resp.Content.ReadFromJsonAsync<ProfileResponse>();
         if (!resp.IsSuccessStatusCode) Console.WriteLine("Profile: " + data);
-        var profile = data.Deserialize<ProfileResponse>();
-        _profileCache[mxid] = profile;
-        return profile;
+        _profileCache[mxid] = data;
+        
+        return data;
     }
-
-    public string? ResolveMediaUri(string mxc) => mxc.Replace("mxc://", $"{FullHomeServerDomain}/_matrix/media/v3/download/");
 }
\ No newline at end of file
diff --git a/MatrixRoomUtils.Core/Interfaces/Services/IStorageProvider.cs b/MatrixRoomUtils.Core/Interfaces/Services/IStorageProvider.cs
index 01314da..eefb79c 100644
--- a/MatrixRoomUtils.Core/Interfaces/Services/IStorageProvider.cs
+++ b/MatrixRoomUtils.Core/Interfaces/Services/IStorageProvider.cs
@@ -2,45 +2,45 @@ namespace MatrixRoomUtils.Core.Interfaces.Services;
 
 public interface IStorageProvider {
     // save all children of a type with reflection
-    public Task SaveAllChildren<T>(string key, T value) {
+    public Task SaveAllChildrenAsync<T>(string key, T value) {
         Console.WriteLine($"StorageProvider<{GetType().Name}> does not implement SaveAllChildren<T>(key, value)!");
-        return Task.CompletedTask;
+        throw new NotImplementedException();
     }
     
     // load all children of a type with reflection
-    public Task<T?> LoadAllChildren<T>(string key) {
+    public Task<T?> LoadAllChildrenAsync<T>(string key) {
         Console.WriteLine($"StorageProvider<{GetType().Name}> does not implement LoadAllChildren<T>(key)!");
-        return Task.FromResult(default(T));
+        throw new NotImplementedException();
     }
 
 
-    public Task SaveObject<T>(string key, T value) {
+    public Task SaveObjectAsync<T>(string key, T value) {
         Console.WriteLine($"StorageProvider<{GetType().Name}> does not implement SaveObject<T>(key, value)!");
-        return Task.CompletedTask;
+        throw new NotImplementedException();
     }
     
     // load
-    public Task<T?> LoadObject<T>(string key) {
+    public Task<T?> LoadObjectAsync<T>(string key) {
         Console.WriteLine($"StorageProvider<{GetType().Name}> does not implement LoadObject<T>(key)!");
-        return Task.FromResult(default(T));
+        throw new NotImplementedException();
     }
     
     // check if exists
-    public Task<bool> ObjectExists(string key) {
+    public Task<bool> ObjectExistsAsync(string key) {
         Console.WriteLine($"StorageProvider<{GetType().Name}> does not implement ObjectExists(key)!");
-        return Task.FromResult(false);
+        throw new NotImplementedException();
     }
     
     // get all keys
-    public Task<List<string>> GetAllKeys() {
+    public Task<List<string>> GetAllKeysAsync() {
         Console.WriteLine($"StorageProvider<{GetType().Name}> does not implement GetAllKeys()!");
-        return Task.FromResult(new List<string>());
+        throw new NotImplementedException();
     }
     
 
     // delete
-    public Task DeleteObject(string key) {
+    public Task DeleteObjectAsync(string key) {
         Console.WriteLine($"StorageProvider<{GetType().Name}> does not implement DeleteObject(key)!");
-        return Task.CompletedTask;
+        throw new NotImplementedException();
     }
 }
\ No newline at end of file