Skip to content

Commit

Permalink
Use jsonb column for device drives.
Browse files Browse the repository at this point in the history
  • Loading branch information
bitbound committed Oct 29, 2024
1 parent 178311e commit deae630
Show file tree
Hide file tree
Showing 19 changed files with 178 additions and 262 deletions.
13 changes: 0 additions & 13 deletions .idea/.idea.ControlR/.idea/.gitignore

This file was deleted.

5 changes: 0 additions & 5 deletions .idea/.idea.ControlR/.idea/codeStyles/codeStyleConfig.xml

This file was deleted.

13 changes: 0 additions & 13 deletions .idea/.idea.ControlR/.idea/dataSources.xml

This file was deleted.

8 changes: 0 additions & 8 deletions .idea/.idea.ControlR/.idea/indexLayout.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/.idea.ControlR/.idea/sqldialects.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/.idea.ControlR/.idea/vcs.xml

This file was deleted.

38 changes: 0 additions & 38 deletions .idea/.idea.ControlR/Docker/docker-compose.generated.override.yml

This file was deleted.

40 changes: 0 additions & 40 deletions .run/compose.run.xml

This file was deleted.

4 changes: 2 additions & 2 deletions ControlR.Web.Client/Components/Dashboard.razor
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@if (!DeviceCache.Devices.Any())
@if (DeviceCache.Devices.Count == 0)
{
<MudAlert Severity="Severity.Info">
No devices found. Head over to the <MudLink Href="/deploy">Deploy Page</MudLink>
No devices found. Head over to the <MudLink Color="Color.Tertiary" Href="/deploy">Deploy Page</MudLink>
to install an agent!
</MudAlert>
}
Expand Down
135 changes: 61 additions & 74 deletions ControlR.Web.Client/Components/Dashboard.razor.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using ControlR.Libraries.Shared.Dtos.StreamerDtos;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;
using Microsoft.AspNetCore.Components;

namespace ControlR.Web.Client.Components;

Expand All @@ -13,12 +11,16 @@ public partial class Dashboard
};

private Version? _agentReleaseVersion;
private bool _hideOfflineDevices;
private bool _loading = true;
private string? _searchText;

[Inject]
public required IBusyCounter BusyCounter { get; init; }

[Inject]
public required IControlrApi ControlrApi { get; init; }

[Inject]
public required IDeviceCache DeviceCache { get; init; }

Expand All @@ -36,21 +38,14 @@ public partial class Dashboard

[Inject]
public required ISnackbar Snackbar { get; init; }

[Inject]
public required IControlrApi ControlrApi { get; init; }

[Inject]
public required IViewerHubConnection ViewerHub { get; init; }


[Inject]
public required IDeviceContentWindowStore WindowStore { get; init; }

private bool _hideOfflineDevices;


private IEnumerable<DeviceResponseDto> FilteredDevices
private ICollection<DeviceResponseDto> FilteredDevices
{
get
{
Expand All @@ -59,7 +54,9 @@ private IEnumerable<DeviceResponseDto> FilteredDevices
return DeviceCache.Devices;
}

return DeviceCache.Devices.Where(x => x.IsOnline);
return DeviceCache.Devices
.Where(x => x.IsOnline)
.ToArray();
}
}

Expand Down Expand Up @@ -99,9 +96,8 @@ protected override async Task OnInitializedAsync()
await RefreshLatestAgentVersion();

Messenger.RegisterGenericMessage(this, HandleGenericMessage);
Messenger.Register<HubConnectionStateChangedMessage>(this, HandleHubConnectionStateChanged);

if (!DeviceCache.Devices.Any())
if (DeviceCache.Devices.Count == 0)
{
await DeviceCache.Refresh();
}
Expand All @@ -128,10 +124,10 @@ private async Task ConfigureDeviceSettings(DeviceResponseDto device)
};

var parameters = new DialogParameters
{
{ nameof(AppSettingsEditorDialog.AppSettings), settingsResult.Value },
{ nameof(AppSettingsEditorDialog.Device), device }
};
{
{ nameof(AppSettingsEditorDialog.AppSettings), settingsResult.Value },
{ nameof(AppSettingsEditorDialog.Device), device }
};
var dialogRef = await DialogService.ShowAsync<AppSettingsEditorDialog>("Agent App Settings", parameters, dialogOptions);
if (dialogRef is null)
{
Expand Down Expand Up @@ -160,7 +156,7 @@ private Task HandleGenericMessage(object subscriber, GenericMessageKind kind)
{
Debouncer.Debounce(
TimeSpan.FromSeconds(1),
async () =>
async () =>
{
await InvokeAsync(StateHasChanged);
});
Expand All @@ -177,14 +173,6 @@ private Task HandleGenericMessage(object subscriber, GenericMessageKind kind)
return Task.CompletedTask;
}

private async Task HandleHubConnectionStateChanged(object subscriber, HubConnectionStateChangedMessage message)
{
if (ViewerHub.IsConnected)
{
await RefreshDevices();
}
}

private async Task HandleRefreshClicked()
{
Snackbar.Add("Refreshing devices", Severity.Success);
Expand All @@ -210,8 +198,8 @@ private async Task RefreshDevices()
try
{
_loading = true;
await InvokeAsync(StateHasChanged);
using var _ = BusyCounter.IncrementBusyCounter();
await InvokeAsync(StateHasChanged);
await RefreshLatestAgentVersion();
await DeviceCache.Refresh();
}
Expand All @@ -235,6 +223,46 @@ private async Task RefreshLatestAgentVersion()
}
}

private async Task RemoteControlClicked(DeviceResponseDto device)
{
switch (device.Platform)
{
case SystemPlatform.Windows:
var sessionResult = await ViewerHub.GetWindowsSessions(device);
if (!sessionResult.IsSuccess)
{
Logger.LogResult(sessionResult);
Snackbar.Add("Failed to get Windows sessions", Severity.Warning);
return;
}

var dialogParams = new DialogParameters() { ["DeviceName"] = device.Name, ["Sessions"] = sessionResult.Value };
var dialogRef = await DialogService.ShowAsync<WindowsSessionSelectDialog>("Select Target Session", dialogParams);
var result = await dialogRef.Result;
if (result is null || result.Canceled)
{
return;
}

if (result.Data is uint sessionId)
{
var remoteControlSession = new RemoteControlSession(device, (int)sessionId);
WindowStore.AddContentInstance<RemoteDisplay>(
device,
DeviceContentInstanceType.RemoteControl,
new Dictionary<string, object?>()
{
[nameof(RemoteDisplay.Session)] = remoteControlSession
});
}
break;
default:
Snackbar.Add("Platform is not supported", Severity.Warning);
break;
}

}

private async Task RemoveDevice(DeviceResponseDto device)
{
var result = await DialogService.ShowMessageBox(
Expand Down Expand Up @@ -285,52 +313,6 @@ private async Task ShutdownDevice(DeviceResponseDto device)
Snackbar.Add("Shutdown command sent", Severity.Success);
}

private async Task UpdateDevice(DeviceResponseDto device)
{
Snackbar.Add("Sending update request", Severity.Success);
await ViewerHub.SendAgentUpdateTrigger(device);
}
private async Task RemoteControlClicked(DeviceResponseDto device)
{
switch (device.Platform)
{
case SystemPlatform.Windows:
var sessionResult = await ViewerHub.GetWindowsSessions(device);
if (!sessionResult.IsSuccess)
{
Logger.LogResult(sessionResult);
Snackbar.Add("Failed to get Windows sessions", Severity.Warning);
return;
}

var dialogParams = new DialogParameters() { ["DeviceName"] = device.Name, ["Sessions"] = sessionResult.Value };
var dialogRef = await DialogService.ShowAsync<WindowsSessionSelectDialog>("Select Target Session", dialogParams);
var result = await dialogRef.Result;
if (result is null || result.Canceled)
{
return;
}

if (result.Data is uint sessionId)
{
var remoteControlSession = new RemoteControlSession(device, (int)sessionId);
WindowStore.AddContentInstance<RemoteDisplay>(
device,
DeviceContentInstanceType.RemoteControl,
new Dictionary<string, object?>()
{
[nameof(RemoteDisplay.Session)] = remoteControlSession
});
}
break;
default:
Snackbar.Add("Platform is not supported", Severity.Warning);
break;
}

}


private void StartTerminal(DeviceResponseDto device)
{
try
Expand All @@ -354,6 +336,11 @@ private void StartTerminal(DeviceResponseDto device)
}
}

private async Task UpdateDevice(DeviceResponseDto device)
{
Snackbar.Add("Sending update request", Severity.Success);
await ViewerHub.SendAgentUpdateTrigger(device);
}
private async Task WakeDevice(DeviceResponseDto device)
{
if (device.MacAddresses is null ||
Expand Down
Loading

0 comments on commit deae630

Please sign in to comment.