Too much to name... but damn, it got where we are needed
This commit is contained in:
@@ -1,40 +1,15 @@
|
||||
using System.Collections.Concurrent;
|
||||
using System.Threading.Channels;
|
||||
using Windows.Media.Control;
|
||||
|
||||
namespace Hyperbar.Windows.Primary;
|
||||
|
||||
public class MediaControllerManager :
|
||||
namespace Hyperbar.Windows.MediaController;
|
||||
public class MediaControllerManager(IMediator mediator,
|
||||
IFactory<GlobalSystemMediaTransportControlsSession, MediaController> factory) :
|
||||
IInitializer
|
||||
{
|
||||
private readonly ConcurrentDictionary<GlobalSystemMediaTransportControlsSession, MediaController> cachedSessions = [];
|
||||
private readonly IMediator mediator;
|
||||
private readonly Queue<MediaController> mediaControllers;
|
||||
private readonly IServiceFactory serviceFactory;
|
||||
|
||||
public MediaControllerManager(IServiceFactory serviceFactory,
|
||||
IMediator mediator,
|
||||
Queue<MediaController> mediaControllers)
|
||||
{
|
||||
this.serviceFactory = serviceFactory;
|
||||
this.mediator = mediator;
|
||||
this.mediaControllers = mediaControllers;
|
||||
}
|
||||
|
||||
private Channel<MediaController> d;
|
||||
public async Task InitializeAsync()
|
||||
{
|
||||
d = Channel.CreateUnbounded<MediaController>();
|
||||
|
||||
_ = Task.Run(async () => {
|
||||
|
||||
await foreach (var coordinates in d.Reader.ReadAllAsync())
|
||||
{
|
||||
Console.WriteLine(coordinates);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
GlobalSystemMediaTransportControlsSessionManager mediaTransportControlsSessionManager =
|
||||
await GlobalSystemMediaTransportControlsSessionManager.RequestAsync();
|
||||
mediaTransportControlsSessionManager.SessionsChanged += OnSessionsChanged;
|
||||
@@ -50,14 +25,10 @@ public class MediaControllerManager :
|
||||
|
||||
private async Task InitializeSessionAsync(GlobalSystemMediaTransportControlsSession session)
|
||||
{
|
||||
if (serviceFactory.Create<MediaController>(session) is MediaController mediaController)
|
||||
if (factory.Create(session) is MediaController mediaController)
|
||||
{
|
||||
await d.Writer.WriteAsync(mediaController);
|
||||
|
||||
mediaControllers.Enqueue(mediaController);
|
||||
|
||||
cachedSessions.TryAdd(session, mediaController);
|
||||
await mediator.PublishAsync(new Created<MediaController>(mediaController));
|
||||
cachedSessions.TryAdd(session, mediaController);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,13 +52,4 @@ public class MediaControllerManager :
|
||||
await InitializeSessionAsync(session);
|
||||
}
|
||||
}
|
||||
|
||||
private void RemoveSession(GlobalSystemMediaTransportControlsSession session)
|
||||
{
|
||||
if (serviceFactory.Create<MediaController>(session) is MediaController mediaController)
|
||||
{
|
||||
cachedSessions.TryAdd(session, mediaController);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user