add cool status circle changing depends on adb device connected

This commit is contained in:
Вячеслав 2026-01-02 21:49:44 +05:00
parent bac6bb9ccd
commit 864a07c75c
4 changed files with 169 additions and 5 deletions

View file

@ -15,9 +15,15 @@ public class AdbService : IAdbService
private readonly ILogger<AdbService> _logger;
private readonly AdbClient _adbClient;
private DeviceData _deviceData;
private DeviceMonitor? _deviceMonitor;
public event EventHandler<ProgressInfo>? ProgressChanged;
public event EventHandler<string>? StatusChanged;
public EventHandler<DeviceDataEventArgs>? DeviceConnected;
public EventHandler<DeviceDataEventArgs>? DeviceDisconnected;
public EventHandler<DeviceDataEventArgs>? DeviceChanged;
public bool IsDeviceConnected => _deviceData != null && _deviceData.State == DeviceState.Online;
public AdbService(ILogger<AdbService>? logger = null)
{
@ -27,6 +33,46 @@ public class AdbService : IAdbService
var serverStatus = server.StartServer(adbPath, restartServerIfNewer: false);
_adbClient = new AdbClient();
RefreshDeviceData();
StartDeviceMonitoring();
}
private void StartDeviceMonitoring()
{
try
{
_deviceMonitor = new DeviceMonitor(new AdbSocket(_adbClient.EndPoint));
_deviceMonitor.DeviceConnected += OnDeviceConnected;
_deviceMonitor.DeviceDisconnected += OnDeviceDisconnected;
_deviceMonitor.DeviceChanged += OnDeviceChanged;
_deviceMonitor.Start();
_logger.LogInformation("Device monitoring started");
}
catch (Exception ex)
{
_logger.LogError($"Failed to start device monitoring: {ex.Message}");
}
}
private void OnDeviceConnected(object? sender, DeviceDataEventArgs e)
{
_logger.LogInformation($"Device conn: {e.Device.Serial}");
RefreshDeviceData();
DeviceConnected?.Invoke(this, e);
}
private void OnDeviceDisconnected(object? sender, DeviceDataEventArgs e)
{
_logger.LogInformation($"Device disconnected: {e.Device.Serial}");
RefreshDeviceData();
DeviceDisconnected?.Invoke(this, e);
}
private void OnDeviceChanged(object? sender, DeviceDataEventArgs e)
{
_logger.LogInformation($"Device changed: {e.Device.Serial}");
RefreshDeviceData();
DeviceChanged?.Invoke(this, e);
}
public void RefreshDeviceData()
@ -163,7 +209,7 @@ public class AdbService : IAdbService
() => { _adbClient.ExecuteRemoteCommand($"mkdir -p \"{remoteDir}\"", _deviceData, reciever); },
cancellationToken);
}
_logger.LogInformation($"Ensured remote directory: {remoteDir}");
await Task.Run(() =>
@ -203,4 +249,15 @@ public class AdbService : IAdbService
{
return new DeviceInfo(_deviceData.Serial, _deviceData.State.ToString(), _deviceData.Model, _deviceData.Name);
}
public void Dispose()
{
if (_deviceMonitor != null)
{
_deviceMonitor.DeviceConnected -= OnDeviceConnected;
_deviceMonitor.DeviceDisconnected -= OnDeviceDisconnected;
_deviceMonitor.DeviceChanged -= OnDeviceChanged;
_deviceMonitor.Dispose();
}
}
}