Skip to content

Commit

Permalink
🐛 Fix interactive embedded monitor configuration changes not being no…
Browse files Browse the repository at this point in the history
…tified.
  • Loading branch information
hexawyz committed Feb 9, 2025
1 parent 8664114 commit 613ce01
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/Exo/Service/Exo.Service.Core/EmbeddedMonitorService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -673,6 +673,7 @@ public async ValueTask SetBuiltInGraphicsAsync(Guid deviceId, Guid monitorId, Gu
if (!_embeddedMonitorDeviceStates.TryGetValue(deviceId, out var deviceState)) throw new InvalidOperationException("Device not found.");

PersistedMonitorConfiguration configuration;
ChannelWriter<EmbeddedMonitorConfigurationWatchNotification>[]? configurationChangeListeners;

using (await deviceState.Lock.WaitAsync(cancellationToken).ConfigureAwait(false))
{
Expand All @@ -681,9 +682,23 @@ public async ValueTask SetBuiltInGraphicsAsync(Guid deviceId, Guid monitorId, Gu
if (!await monitorState.SetBuiltInGraphicsAsync(graphicsId, cancellationToken).ConfigureAwait(false)) return;

configuration = monitorState.CreatePersistedConfiguration();

configurationChangeListeners = Volatile.Read(ref _configurationChangeListeners);
}

await PersistConfigurationAsync(deviceState.EmbeddedMonitorConfigurationContainer, monitorId, configuration, cancellationToken).ConfigureAwait(false);

configurationChangeListeners?.TryWrite
(
new EmbeddedMonitorConfigurationWatchNotification
{
DeviceId = deviceId,
MonitorId = monitorId,
GraphicsId = configuration.GraphicsId,
ImageId = configuration.ImageId,
ImageRegion = configuration.ImageRegion,
}
);
}

public async ValueTask SetImageAsync(Guid deviceId, Guid monitorId, UInt128 imageId, Rectangle imageRegion, CancellationToken cancellationToken)
Expand All @@ -699,6 +714,7 @@ public async ValueTask SetImageAsync(Guid deviceId, Guid monitorId, UInt128 imag
}

PersistedMonitorConfiguration configuration;
ChannelWriter<EmbeddedMonitorConfigurationWatchNotification>[]? configurationChangeListeners;

using (await deviceState.Lock.WaitAsync(cancellationToken).ConfigureAwait(false))
{
Expand All @@ -707,9 +723,23 @@ public async ValueTask SetImageAsync(Guid deviceId, Guid monitorId, UInt128 imag
if (!await monitorState.SetImageAsync(_imageStorageService, imageId, imageRegion, cancellationToken).ConfigureAwait(false)) return;

configuration = monitorState.CreatePersistedConfiguration();

configurationChangeListeners = Volatile.Read(ref _configurationChangeListeners);
}

await PersistConfigurationAsync(deviceState.EmbeddedMonitorConfigurationContainer, monitorId, configuration, cancellationToken).ConfigureAwait(false);

configurationChangeListeners?.TryWrite
(
new EmbeddedMonitorConfigurationWatchNotification
{
DeviceId = deviceId,
MonitorId = monitorId,
GraphicsId = configuration.GraphicsId,
ImageId = configuration.ImageId,
ImageRegion = configuration.ImageRegion,
}
);
}

public async IAsyncEnumerable<EmbeddedMonitorDeviceInformation> WatchDevicesAsync([EnumeratorCancellation] CancellationToken cancellationToken)
Expand Down

0 comments on commit 613ce01

Please sign in to comment.