Improve endpoint loading times by using lazy loading

This commit is contained in:
BlossomiShymae
2024-08-22 20:15:13 -05:00
parent de6f9f64dd
commit 59619764c2
3 changed files with 49 additions and 36 deletions

View File

@@ -19,15 +19,12 @@ namespace Needlework.Net.ViewModels
public SolidColorBrush Color { get; }
public string Path { get; }
public OperationViewModel Operation { get; }
public ProcessInfo? ProcessInfo { get; }
[ObservableProperty] private bool _isBusy;
[ObservableProperty] private string? _responsePath;
[ObservableProperty] private string? _responseStatus;
[ObservableProperty] private string? _responseAuthentication;
[ObservableProperty] private string? _responseUsername;
[ObservableProperty] private string? _responsePassword;
[ObservableProperty] private string? _responseAuthorization;
[ObservableProperty] private Lazy<ResponseViewModel> _response;
public PathOperationViewModel(PathOperation pathOperation)
{
@@ -35,26 +32,7 @@ namespace Needlework.Net.ViewModels
Color = new SolidColorBrush(GetColor(Method));
Path = pathOperation.Path;
Operation = new OperationViewModel(pathOperation.Operation);
ProcessInfo = GetProcessInfo();
if (ProcessInfo != null)
{
ResponsePath = $"https://127.0.0.1:{ProcessInfo.AppPort}{Path}";
var riotAuth = new RiotAuthentication(ProcessInfo.RemotingAuthToken);
ResponseUsername = riotAuth.Username;
ResponsePassword = riotAuth.Password;
ResponseAuthorization = $"Basic {riotAuth.Value}";
}
}
private ProcessInfo? GetProcessInfo()
{
try
{
var processInfo = ProcessFinder.Get();
return processInfo;
}
catch (Exception) { }
return null;
Response = new(() => new ResponseViewModel(pathOperation.Path));
}
[RelayCommand]
@@ -112,11 +90,11 @@ namespace Needlework.Net.ViewModels
}
else WeakReferenceMessenger.Default.Send(new EditorUpdateMessage(new(responseBody, "EndpointResponseEditor")));
ResponseStatus = $"{(int)response.StatusCode} {response.StatusCode}";
ResponsePath = $"https://127.0.0.1:{processInfo.AppPort}{uri}";
ResponseAuthentication = $"Basic {riotAuthentication.Value}";
ResponseUsername = riotAuthentication.Username;
ResponsePassword = riotAuthentication.Password;
Response.Value.Status = $"{(int)response.StatusCode} {response.StatusCode}";
Response.Value.Path = $"https://127.0.0.1:{processInfo.AppPort}{uri}";
Response.Value.Authentication = Response.Value.Authorization = $"Basic {riotAuthentication.Value}";
Response.Value.Username = riotAuthentication.Username;
Response.Value.Password = riotAuthentication.Password;
}
catch (Exception ex)
{

View File

@@ -0,0 +1,35 @@
using BlossomiShymae.GrrrLCU;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Needlework.Net.ViewModels
{
public partial class ResponseViewModel : ObservableObject
{
[ObservableProperty] private string? _path;
[ObservableProperty] private string? _status;
[ObservableProperty] private string? _authentication;
[ObservableProperty] private string? _username;
[ObservableProperty] private string? _password;
[ObservableProperty] private string? _authorization;
public ResponseViewModel(string path)
{
Path = path;
var processInfo = GetProcessInfo();
if (processInfo != null)
{
var riotAuthentication = new RiotAuthentication(processInfo.RemotingAuthToken);
Path = $"https://127.0.0.1:{processInfo.AppPort}{path}";
Username = riotAuthentication.Username;
Password = riotAuthentication.Password;
Authorization = $"Basic {riotAuthentication.RawValue}";
}
}
private static ProcessInfo? GetProcessInfo()
{
if (ProcessFinder.IsActive()) return ProcessFinder.Get();
return null;
}
}
}

View File

@@ -95,7 +95,7 @@
<TextBox Grid.Row="0"
Grid.Column="1"
FontSize="12"
Text="{Binding SelectedPathOperation.ResponsePath}"
Text="{Binding SelectedPathOperation.Response.Value.Path}"
IsReadOnly="True"/>
<StackPanel Grid.Row="0"
Grid.Column="2"
@@ -189,7 +189,7 @@
Grid.Column="1"
Margin="0 0 0 8"
IsReadOnly="True"
Text="{Binding SelectedPathOperation.ResponseUsername}" />
Text="{Binding SelectedPathOperation.Response.Value.Username}" />
<TextBlock FontSize="12"
Grid.Row="1"
Grid.Column="0"
@@ -201,7 +201,7 @@
Grid.Column="1"
Margin="0 0 0 8"
IsReadOnly="True"
Text="{Binding SelectedPathOperation.ResponsePassword}"/>
Text="{Binding SelectedPathOperation.Response.Value.Password}"/>
<TextBlock FontSize="12"
Grid.Row="2"
Grid.Column="0"
@@ -212,7 +212,7 @@
Grid.Row="2"
Grid.Column="1"
IsReadOnly="True"
Text="{Binding SelectedPathOperation.ResponseAuthorization}"/>
Text="{Binding SelectedPathOperation.Response.Value.Authorization}"/>
</Grid>
</TabItem>
<TabItem Header="Schemas">
@@ -304,7 +304,7 @@
FontSize="10"
Padding="12 4 12 4"
Classes="Flat"
Content="{Binding SelectedPathOperation.ResponseStatus}"/>
Content="{Binding SelectedPathOperation.Response.Value.Status}"/>
</StackPanel>
<Grid Grid.Row="1" Grid.Column="4">