mirror of
https://github.com/immense/Remotely.git
synced 2025-10-26 11:27:15 +00:00
83 lines
2.6 KiB
C#
83 lines
2.6 KiB
C#
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Components.Web;
|
|
using Remotely.Server.Hubs;
|
|
using Remotely.Server.Services;
|
|
using Remotely.Shared.Enums;
|
|
using Remotely.Shared.ViewModels;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Remotely.Server.Components.Devices
|
|
{
|
|
public partial class ChatFrame : AuthComponentBase, IDisposable
|
|
{
|
|
|
|
[Inject]
|
|
private IClientAppState AppState { get; set; }
|
|
|
|
[Inject]
|
|
private ICircuitConnection CircuitConnection { get; set; }
|
|
|
|
public void Dispose()
|
|
{
|
|
AppState.PropertyChanged -= AppState_PropertyChanged;
|
|
CircuitConnection.MessageReceived -= CircuitConnection_MessageReceived;
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
protected override Task OnInitializedAsync()
|
|
{
|
|
AppState.PropertyChanged += AppState_PropertyChanged;
|
|
CircuitConnection.MessageReceived += CircuitConnection_MessageReceived;
|
|
return base.OnInitializedAsync();
|
|
}
|
|
|
|
private void CircuitConnection_MessageReceived(object sender, Models.CircuitEvent e)
|
|
{
|
|
if (e.EventName == Models.CircuitEventName.ChatReceived)
|
|
{
|
|
var deviceId = (string)e.Params[0];
|
|
|
|
if (!AppState.DevicesFrameChatSessions.Exists(x => x.DeviceId == deviceId))
|
|
{
|
|
var deviceName = (string)e.Params[1];
|
|
var message = (string)e.Params[2];
|
|
var disconnected = (bool)e.Params[3];
|
|
|
|
if (disconnected)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var newChat = new ChatSession()
|
|
{
|
|
DeviceId = deviceId,
|
|
DeviceName = deviceName,
|
|
IsExpanded = true
|
|
};
|
|
|
|
newChat.ChatHistory.Add(new ChatHistoryItem()
|
|
{
|
|
Message = message,
|
|
Origin = ChatHistoryItemOrigin.Device
|
|
});
|
|
|
|
AppState.DevicesFrameChatSessions.Add(newChat);
|
|
|
|
InvokeAsync(StateHasChanged);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void AppState_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
|
|
{
|
|
if (e.PropertyName == nameof(AppState.DevicesFrameChatSessions))
|
|
{
|
|
InvokeAsync(StateHasChanged);
|
|
}
|
|
}
|
|
}
|
|
}
|