diff --git a/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs b/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs
index c1d6461..6fcd8e8 100644
--- a/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs
+++ b/LibMatrix/Homeservers/AuthenticatedHomeserverGeneric.cs
@@ -16,37 +16,41 @@ using LibMatrix.Services;
namespace LibMatrix.Homeservers;
public class AuthenticatedHomeserverGeneric(string serverName, string accessToken) : RemoteHomeserver(serverName) {
- public static async Task<T> Create<T>(string serverName, string accessToken, string? proxy = null) where T : AuthenticatedHomeserverGeneric {
- var instance = Activator.CreateInstance(typeof(T), serverName, accessToken) as T
- ?? throw new InvalidOperationException($"Failed to create instance of {typeof(T).Name}");
- HomeserverResolverService.WellKnownUris? urls = null;
- if (proxy is null)
- urls = await new HomeserverResolverService().ResolveHomeserverFromWellKnown(serverName);
-
+ public static async Task<T> Create<T>(string serverName, string accessToken, string? proxy = null) where T : AuthenticatedHomeserverGeneric =>
+ await Create(typeof(T), serverName, accessToken, proxy) as T ?? throw new InvalidOperationException($"Failed to create instance of {typeof(T).Name}");
+ public static async Task<AuthenticatedHomeserverGeneric> Create(Type type, string serverName, string accessToken, string? proxy = null) {
+ if(!type.IsAssignableTo(typeof(AuthenticatedHomeserverGeneric))) throw new ArgumentException("Type must be a subclass of AuthenticatedHomeserverGeneric", nameof(type));
+ var instance = Activator.CreateInstance(type, serverName, accessToken) as AuthenticatedHomeserverGeneric
+ ?? throw new InvalidOperationException($"Failed to create instance of {type.Name}");
+
instance.ClientHttpClient = new() {
- BaseAddress = new Uri(proxy ?? urls?.Client
- ?? throw new InvalidOperationException("Failed to resolve homeserver")),
Timeout = TimeSpan.FromMinutes(15),
DefaultRequestHeaders = {
Authorization = new AuthenticationHeaderValue("Bearer", accessToken)
}
};
instance.ServerHttpClient = new() {
- BaseAddress = new Uri(proxy ?? urls?.Server
- ?? throw new InvalidOperationException("Failed to resolve homeserver")),
Timeout = TimeSpan.FromMinutes(15),
DefaultRequestHeaders = {
Authorization = new AuthenticationHeaderValue("Bearer", accessToken)
}
};
- instance.WhoAmI = await instance.ClientHttpClient.GetFromJsonAsync<WhoAmIResponse>("/_matrix/client/v3/account/whoami");
-
- if (proxy is not null) {
+ if (string.IsNullOrWhiteSpace(proxy)) {
+ HomeserverResolverService.WellKnownUris? urls = await new HomeserverResolverService().ResolveHomeserverFromWellKnown(serverName);
+ instance.ClientHttpClient.BaseAddress = new Uri(urls?.Client ?? throw new InvalidOperationException("Failed to resolve homeserver"));
+ instance.ServerHttpClient.BaseAddress = new Uri(urls?.Server ?? throw new InvalidOperationException("Failed to resolve homeserver"));
+ }
+ else {
+ instance.ClientHttpClient.BaseAddress = new Uri(proxy);
+ instance.ServerHttpClient.BaseAddress = new Uri(proxy);
instance.ClientHttpClient.DefaultRequestHeaders.Add("MXAE_UPSTREAM", serverName);
instance.ServerHttpClient.DefaultRequestHeaders.Add("MXAE_UPSTREAM", serverName);
}
+ instance.WhoAmI = await instance.ClientHttpClient.GetFromJsonAsync<WhoAmIResponse>("/_matrix/client/v3/account/whoami");
+
+
return instance;
}
@@ -55,12 +59,6 @@ public class AuthenticatedHomeserverGeneric(string serverName, string accessToke
public string UserLocalpart => UserId.Split(":")[0][1..];
public string ServerName => UserId.Split(":", 2)[1];
- // public virtual async Task<WhoAmIResponse> WhoAmI() {
- // if (_whoAmI is not null) return _whoAmI;
- // _whoAmI = await _httpClient.GetFromJsonAsync<WhoAmIResponse>("/_matrix/client/v3/account/whoami");
- // return _whoAmI;
- // }
-
public string AccessToken { get; set; } = accessToken;
public GenericRoom GetRoom(string roomId) {
diff --git a/LibMatrix/Homeservers/RemoteHomeServer.cs b/LibMatrix/Homeservers/RemoteHomeServer.cs
index a47b731..a461d6e 100644
--- a/LibMatrix/Homeservers/RemoteHomeServer.cs
+++ b/LibMatrix/Homeservers/RemoteHomeServer.cs
@@ -37,9 +37,9 @@ public class RemoteHomeserver(string baseUrl) {
public MatrixHttpClient ServerHttpClient { get; set; } = null!;
public HomeserverResolverService.WellKnownUris WellKnownUris { get; set; } = null!;
- public async Task<UserProfileResponse> GetProfileAsync(string mxid) {
+ public async Task<UserProfileResponse> GetProfileAsync(string mxid, bool useCache = false) {
if (mxid is null) throw new ArgumentNullException(nameof(mxid));
- if (_profileCache.TryGetValue(mxid, out var value)) {
+ if (useCache && _profileCache.TryGetValue(mxid, out var value)) {
if (value is SemaphoreSlim s) await s.WaitAsync();
if (value is UserProfileResponse p) return p;
}
|